ふたつの川うるおう日記
2006-07-02 (Sun)
_ [Seasar][Project][Admin] Seasarのサーバにあった冗長性のある最適な環境
Seasarのサーバにあった最適な環境を考えてみます。まず現在提供しているサービスを挙げます。
- プロジェクトサイト閲覧
- SVNリポジトリ閲覧
- SVNリポジトリコミット
- SVNリポジトリブラウザ
- イベントサイト閲覧
- イベントサイト編集
- Wiki閲覧
- Wiki編集
- トラッキング閲覧
- トラッキング編集
- 検索エンジン
- メーリングリストアーカイブ
- メーリングリスト配信
- Mavenリポジトリ閲覧
- Mavenリポジトリデプロイ(SCP接続)
- メンバー用ページ
このうち書き込み処理が発生して、かつ頭の良いロードバランサじゃなくてDNSラウンドロビンのような簡易バランサにおいて、アプリケーションレベル(メモリ上)でのロックが必要になりそうなのは、次のサービスだと思われます。
- SVNリポジトリコミット
- Subversion + WebDAVのロックの仕方によっては大丈夫っぽい
- メーリングリスト配信
- メールサーバ自体のクラスタリングは問題ないが、メーリングソフトが謎
- Mavenリポジトリデプロイ(SCP接続)
- 問題ないけど、ホストが変わって新しいサーバ公開鍵だと承認のYes/Noが最初の1回出る可能性がある。サーバ公開鍵を同じのにしちゃうという手もあり。
上記だけ別ホストにすれば、残りはクラスタ化しても問題なさそう。そんなわけで、次のような構成にすると良さそうです。
- 概要
- SANでデータ一括管理
- ファイルシステムをGFSにして、複数サーバで同時に読み書き実現
- GFSはGoogleも改造して一部で使ってる分散ファイルシステム。
- リモートでの復旧を考慮して実サービスはXen上に展開
- ハード構成
- ストレージアレイ * 1
- SANスイッチ * 1
- 物理サーバ * 3
- Xenゲストサーバ構成
- xen01 (GFS + SAN)
- フロントサーバ1
- 書き込み用サーバ1
- xen02 (GFS + SAN)
- フロントサーバ2
- 書き込み用サーバ2 (xen01が死んだ時用の予備)
- GFSロックサーバ1
- xen03 (非 GFS + SAN)
- データバックアップサーバ
- xen01 (GFS + SAN)
この構成であれば、普段はフロントサーバ1, 2をDNSラウンドロビンで回し、書き込み用はどちらかの書き込み用サーバにアクセスさせておいて、障害が起きたらDNSラウンドロビンを止めるのと書き込み用サーバのアクセス先をもう1台に変えれば良い。もしくはフロントサーバの前にPoundだけが走るXenゲストサーバを走らせれば、障害時に自動的に読み込み用サーバへのアクセスを制御してくれる。もしくはもっと大規模にいくならUltraMonkey?。さらに負荷が高まったら単純にフロントサーバ足せば分散できる環境です。
ただ、この構成の場合の問題点もあります。
- SAN構成が高い
- ストレージ
- SANスイッチ
- ファイバチャネル
- iSCSIなら安いがパフォーマンス落ちる
- GFS + SAN構成をするのに同一ネットワーク内でないとツライ
- 同一ネットワークでのGFSのパフォーマンスは通常のext3などのファイルシステムの80%程度らしい
- どこかのデータセンタに一極集中してしまう
- SAN構成部分に冗長性がない
- やろうと思えばできるけどさらにお値段アップ
- データバックアップサーバをどこか別の回線が早いとこに置けば、緊急時はそっちで読み込み用サービス可
そんでもって、ほんとにここまでの環境が必要かどうかだけど、たぶん将来必要になるかと。問題はこのリソースを提供してくれるとこがあるかどうか(;´ー`)。また、SeasarじゃなくてもYukaraで必要なんじゃないかなと。
この構成案は今ある技術で考えたもので、実際に試してないので穴や罠があるかもしれないです。また、これ以外にもGoogle、SourceForge、Slashdot、はてな、mixiなどいろんな方法で分散環境を昔から構築されているのでどうやってるのか興味深いです。たまに講演とかニュースでちょこっと話題になることがあるけど、ほんのちょっと話してるだけなので聞きたいことがいろいろ。。
そんなことより、Seasarサーバの復活はやはり月曜になりそうです。コミッタの皆様、もうしばらくお待ちくださいm(_ _)m。こういった障害時のこと考えると、Xen上かいつでも現地対応できる環境は必要そうです。
[追記] DB関係考えてなかった。そこはまた別にレプリケーションの仕組み用意ってことで。
[追記] GFSにDB(PostgreSQL or MySQL)載せたらどうなんだろって調べてたら、GFSについて(eyes blogさん)という良い記事がありました。これによると2台でGFSは危険っぽいかも。


