スケールアウトする分散ファイルシステム
DSAS開発者の部屋で、いかにして多重化+負荷分散されたシステムを構築しているかという仕組みが公開されました。必見(+必聴)です。
「DSASのあれこれ」の資料を公開します
VIVER的に重要なのは、dsas.conf。ネットワークブートすると、すべてのマシンの構成がまったく同じになってしまう。VIVERではRUNES(Role-based Unified Network Extension System)というplaggableなアプリケーションを開発することで解決しています。
RUNESの問題は、いちいちプラグインが無いと使えない点。要するに使いにくい。拡張性と使いやすさの両立は難しい…。これは根本的に解決する計画があるので、向こう1年以内には解決します。(どうにも開発者リソースが少なくてスパンの長い話になってしまいがち)
資料の中にもありますが、やはり難しいのは、永続的なストレージの多重化と負荷分散のようです。ストレージでもいろいろなソフトウェアが開発されていますが、「スケールアウトするか」「動的な運用が可能か」という観点から考えると、これだ!というものが無いというのが事実ではなかろうか。(ちなみにそのヘンの学生が言っていることなので間違っている可能性は大いにアリです。ツッコミお願いします)
たとえばNFSの冗長化にはDRBDがほぼ唯一の解決策であるものの、DRBDはまったく負荷分散できない。それから、サーバーがダウンして、待機していたサーバーに切り替わった後、代わりの待機サーバーが自動的に用意されないので、障害が起こったら、どこかで一度システムを停止して復旧作業をしないといけない。
ではDB(MySQLとPostgreSQL)ではどうかと言うと、DBの冗長化にはレプリケーションがある、と思いきや、レプリケーションの構成は冗長化と言うよりロードバランサーに近くて、マスターが単一点障害(&ボトルネック)になってしまう。それでいて負荷分散するにも制限がある。
さらに言えば動的にサーバーを追加できなくて、動的な運用(最初は小規模で無計画、次第にスケールアウトさせつつ冗長化)ができない。
DBでもOracle RACは、単一点障害の無い多重化と負荷分散ができるらしい。が、Oracle RACはShared Everythingで、SANが必要。SANは高い!ついでにOracle RACも高い!よって動的な運用ができない。
DBは少し置いておいて、NFSがダメならNFS以外でファイルを共有する手段があるかどうかという話。
SANがある。SANは高い。
FC-SANがダメならIP-SAN(iSCSI)はどうか。iSCSIイニシエータは安い、と言うかNICとLinuxとGFS(or OCFS)だけ。構築もたぶんそんなに難しくないし、OCFSなら動的に拡張できる(今のところ動的な縮小はできない模様)。だがしかし、iSCSIターゲット(ストレージ)が高い。
高いのはいけない。動的な運用ができない。
IP-SANっぽいことを安上がりに実現しようとしたら、Linux+NBD+OCFSという方法がある。構築はとても簡単。特別なハードウェアは何も要らない。が、これはNFSとそんなに変わらない。NFSと違うのはロックが分散ロック(DLM)になっているところくらいで、NFSよりはちょっとスケーラビリティが良いかも、というくらい。iSCSIと違ってターゲットまで汎用PCなので、冗長化は結局DRBD。
SAN以外では、Lustreというクラスタファイルシステムがある模様。よく調べていない(と言うか私の英語力に問題がある)ので何とも言えないのだけど、クラスタファイルシステムは冗長化というよりもむしろ、パフォーマンスに重点を置いている模様。汎用PCをたくさん使って性能を出せるものの、信頼性が高いのかどうかが良く分からない。
Lustre(1.6)では、多重化しないといけないものが2つあって、1つはOST(実際にデータを保持するノード。データは分散されているので、OSTノードはたくさん居る)、もう1つはMDT(メタデータを保持するノード。1台)。(ちょっと疑問なのは、LustreはOSTとMDTと、もう1つMGSというノードがいるのだけど、これはどうすれば良いのかのか分からない)
まずOSTにはフェイルオーバーモードとフェイルアウトモードがあるらしい。フェイルオーバーモードだと、OSTノードが1台でも欠けると、とりあえずデータの書き込みができなくなるらしい。復旧後に再開される。フェイルアウトモードだと、OSTノードが欠けていても書き込みができるけど、もし書き込み中にOSTノードが落ちたら、その書き込みかけのデータが失われてしまうらしい。
MDTにはフェイルオーバーモードしかない。
データが失われるのは良くないので、フェイルオーバーモードを使うとして、ノードが1台でもダウンしたら夜中に起きないといけないのは問題。
(それからノードの動的な追加ができない?)
Linuxのファイルシステムとして使えるクラスタファイルシステムには、Lustreの他にGfarmFSというのがあって、これは日本語で嬉しいのだけど、冗長性は無い模様。
クラスタファイルシステムでもダメなら、研究レベルまで行ったらどうなのか?と言うと、そのあたりはこの資料(Chordプロトコルを活用したシステム開発の実際)がとても詳しいです。理論はあっても実装は無い、というのが現実のようです。
さて、そんなわけで、多重化できて、とってもスケールアウトして、動的に運用できる分散ファイルシステムは、どうやらこの世の中に存在しない模様。
無い、そして必要ならば、作ろうではないか!と言うのが本題であります。