システム構成を見直しました (2024-10)
投稿者: Karasuma (@[email protected])
こんにちは.Chillout Chat システム管理者の Karasuma です.この記事では今年8月から実施してきた一連のメンテナンスについてまとめていきたいと思います.度々のメンテナンスとなってしまいましたが,10月28日の移行作業をもって一区切りとなります.これまでお付き合い頂きありがとうございました.
構成を変更する目的
システム監視の強化
2022年4月から長らくの間,Chillout Chat・Chillroma は Mastodon サーバ homoo.social などが収容されている物理マシンをお借りして運用していました.データベースやメディアファイルの配信なども含めて全て同一の収容ホストで運用しており,当初は安定してサービスを提供することができていました.
しかし,2023年頃から不自然なメモリ使用量の増加やバックアップファイルの肥大化など,次第に「闇」の部分が増えていきます.ここ一年ほどの間に発生したダウンタイムの多くは,これらの問題に対処できていなかったことが原因です.これまでも Netdata などによる簡易的なシステム監視を行っていましたが,再発防止のための監視基盤の強化が求められていました.
可用性の向上
以前からの収容ホストはオンプレミスという都合上,どうしてもハードウェアなどの都合でダウンタイムが発生することがありました.ダウンタイムのタイミングによっては管理者による迅速な対応が難しく,公開サービスとしての信頼性の低下を招いてしまいました.全てのリソースをクラウドに移行するのは費用的に難しいですが,その代わりとして複数のオンプレ拠点にデプロイする構成を検討し始めました.
複数拠点にリソースを分散させることで,バックアップの信頼性も高めることができます.以前の構成では単一の収容ホストの異なるディスクにバックアップを保管していましたが,やはり別拠点にもバックアップを置くことは重要です.
オブジェクトストレージの採用
手始めにメディアファイルをローカルから外部のオブジェクトストレージに移行しました.これにより,サーバがダウンした際も連合先から画像の参照が可能になります.
Chillout Chat のメディアファイルは総計 80GB 前後,一時的にリモートからのキャッシュが増えても 100GB には満たないため,最低料金の安さを重視して業者を選定しました.その結果 Cloudflare R2 を採用しています.もちろん S3 互換ですし,独自ドメインなどの設定が簡単に済むのもありがたいです.月額料金はオブジェクトの操作回数などによって変動しますが,おおむね $6 以内には収まっています.
ロードバランサの設置
今回はオンプレ2拠点 (以前から利用していた収容ホストに加えて,自宅サーバを使用しています) をアプリケーションサーバとして,そこへ接続するためのロードバランサを設置することにしました.マネージドサービスの利用は予算に収まらないため早々に諦め,小さなクラウドインスタンスを借りて Nginx を運用する方針としました.当初は Linode の Shared 1GB プラン (月額 $5) を使っていましたが,ConoHa の 1GB プラン (月額 ¥763) に移行しています.
データベースの移行
データベースのプライマリはオンプレから剥がすことにしました.当初は自動フェイルオーバーが可能な構成としていましたが,かえって構成が煩雑となり不安定になることが判明したため,現在では障害発生時のプライマリ昇格は手動で行うようにしています.また,プライマリの収容ホストは Linode の Shared 1GB プランに追加ストレージ (10GB あたり月額 $1) をマウントさせて稼働していましたが,コスト削減のため ConoHa (ロードバランサと同一ホスト) への移行を実施しました.
ステージング環境の作成
Chillout Chat のステージング環境として nightly.chillout.chat を立ち上げました.本番環境とほぼ同じ構成で運用しているため,本番環境でソフトウェアのアップデートやハードウェアの構成変更を実施する前の検証用途として使われる予定です.
Grafana によるメトリクス可視化
新しい監視ダッシュボードとして Grafana を採用しています.データの収集には Prometheus を使用しており,サービスに応じた Exporter を設定することで監視対象を細かくカスタマイズすることができます.
監視基盤は ConoHa 2GB プラン (月額 ¥1144) のホストに収容されており,他のシステムからは独立しています.Chillroma もこのホストに収容されているため,Chillout Chat にシステム障害が発生した際の代替サービスとして提供することができます.
構成管理の自動化
これまでのメンテナンスは人力でシェルを操作することにより実施していましたが,ヒューマンエラーの発生リスクや作業内容のチーム内共有の難しさが課題となっていました.今回からは構成管理ツールとして Ansible を採用しており,自動化されたタスクの内容は全て Git で管理されています.これによりシステム構成のブラックボックス化を防ぎ,障害発生時の原因究明にも役立つはずです.