[0] 備忘:GlusterFSによるDistributed-Replicatedボリューム構成について。-[Id of Radiance ver.5]





■ 備忘:GlusterFSによるDistributed-Replicatedボリューム構成について。

 ちと複数サーバによるファイル分散、しかもある程度の冗長性を持った分散を実現する必要に迫られた。最初は自分で管理システムでも作って適度に分散ーとか思ってたのだが、いちいち整合性とか考えるのめんどくさい。今ならきっとお手軽なファイル分散管理システムがあるに違いない!と探して最も要件にマッチしたのが「GlusterFS」。ちょうど去年辺りRedHatの傘下に入ったらしく将来性と安定性にも一定の評価ができる点もポイント。
 Glusterのバージョンは3.2.6。OSはCentOS6.2でインストールはオフィシャルサイトにあったrpmから。

 で、これまでのバージョンだと連携した複数サーバに順繰りでファイルを保存していく「Distribute」、ファイルを全てのサーバに複製する「Replica」、ファイルを分割して並行保存する「Stripe」の3パターンからしか挙動を選べなかったらしいが、3.2.5以降辺りから基本の「Distribute」と、「Replica」もしくは「Stripe」を連携させた動きが取れるようになったらしい。今回は安全性重視なので「Distributed-Replicated」構成で構築することに。以降は環境構築時における微妙な実験結果を含む備忘録です。ちなみに間違ってる可能性も否定できないのでご注意を。

  • rpmでインストールする場合今のところx86_64環境しかないっぽい。今回別機能のために32bit環境も必要だったのだが、64bit環境で構築したホストのKVM上に32bit仮想環境をインストすることで対応した。
  • とりあえずgluster関係をインストールしたのはホストとなる4台の64bit環境。ゲストからはNFSでのアクセスで対応することに(後述)。
  • まずはglusterとしてのペアリング?を取るために「gluster peer probe HOSTNAME」コマンドで関連するサーバの登録を行うのだが、コレは複数台のうちどれで実行しても問題ない。また、最初に実行したサーバとは別のサーバで後から実行しても問題ない。→「管理サーバ」を特定する必要はないということ。
  • 実際に連携することになるボリュームは他のファイルシステム(extなど)でフォーマットしてあって構わない。というかしといたほうが何かと便利かな。
  • 1つのサーバ、というかノード上の異なるフォルダを指定することが可能。
   例:gluster volume create glusterVol replica 2 transport tcp svr1:/home/brick1 svr1:/home/brick2
  • ただし「Replica」系の設定をした場合、「同一ノードを避ける」事は行なわないようなので、状況によっては冗長化のためのReplicaが全くのムダに終わる恐れがある。
  • 「Distribute」の場合、基本的にボリューム作成時のノードの順序でコピーを行うらしい。容量によるバランシングはその後。「Distributed-Replicated」の場合も同様。
  • なので、各ノードの「複数ボリューム」を連結する場合、同一ノード上のフォルダを離して記述することである程度同一ノード上に複製されるリスクを減らす事ができるだろう。※完全に無くせるかは未検証。
   例:gluster volume create glusterVol replica 2 transport tcp svr1:/home/brick1 svr2:/home/brick1 svr1:/home/brick2 svr2:/home/brick2 ←svr1の間を開けている
  • その前の話だが、「Distributed-Replicated」を構築する場合、連結するノードの数はreplicaで設定する複製の数の倍数になってないといけないらしい、というか倍数になってないとコマンドが通らない。上記でわざわざ同一ノードの2フォルダを連結しようとしたそもそもの発端は、当初奇数であるサーバ3台で構成しようとしたためである。replica=2の2フォルダx3ノードで6フォルダ、と。一応これで構築は可能。当然のように後からノードを追加する場合もreplicaの倍数ずつ追加しなければならない。
  • 構築したボリュームは何らかの方法でマウントすることで利用可能になる。
  • 構築したサーバ、というかglusterがインストールされているサーバ上ならばマウントタイプ「glusterfs」でマウントできる。
     mount -t glusterfs svr1:glusterVol /mnt
  • そうでない場合NFSマウントがてっとり早いか。
     mount -o mountproto=tcp -t nfs svr1:/glusterVol /mnt
  • 「KVMで32bit仮想環境を構築」と上述したが、そのゲスト環境からはこのnfsマウントを行なっている。
  • マウントさえ済めば後はフツーにコピーなりでファイルを置け、かつ自動的に分散・複製を行なってくれる。
  • その性質上DBとかも置けるとは思うが、レスポンス的にどーだかは未検証。やらない方が良いとおもわれる。
  • 「Distributed-Replicated」で、「ノード数未満のreplica数を指定した」≒「全てのサーバには複製されない」設定でも、フォルダについては全てのサーバに作成される。なので「フォルダ作成時、条件に基づき特定ノードに分散して作成され、以降そのフォルダにコピーしたファイルはそのノードに集中してしまうのではないか」とゆー懸念は不要。

 …今のところこんなところ。またいずれ追加情報があったら記事追加します。

関連タグ:LinuxglusterFS
2012-04-17 [技術・作業]

関連記事: