Linuxにおいてファイル領域を冗長化したい場面は多いと思います。
例えばファイルサーバやNFSサーバなどの共有領域は冗長構成にしておきたい場面は多いのでは無いでしょうか。
オンプレなサーバであれば、媒体自体をハードウェアRAIDやソフトウェアRAIDでミラーリングしたり、DRBD等のツールでクラスタ化することが多いと思います。
クラウドを使った場合は、いろいろと仕様的な制限があったりで、使えない場合があります。
今回は簡単に構築でき、マスターレスで動作する分散ファイルシステム GlusterFS の設定について書きます。
ホストの用意
今回CentOS6、Amazon Linuxにて検証
※2台のVolume提供サーバをそれぞれ gfs_sv1・gfs_sv2、クライアントをgfs_clと仮定します。
提供領域の確保(※Volume提供サーバの作業)
提供用の領域を準備する
クラウドやアーキテクチャに従い作業
なお、提供領域が外部volumeで無い場合は、下記 /etc/fstab への追記までの作業は不要。
増設領域のマウントポイントを作る
今回の例は/var/glustervols
1
| |
領域をマウント
下記はext4でマウントしている
1
| |
再起動時に自動マウントするように、 /etc/fstab に追記する
1
| |
領域のユーザをアプリケーションサーバと同じにし、パーミッションを変更する
※UIDに注意
今回の例では、apacheの領域として設定
1 2 3 | |
すべての機器にGlusterFSを導入する
Glusterよりリポジトリサイトを登録
1 2 3 | |
/etc/yum.repos.d/glusterfs-epel.repo の enabled=1 を enabled=0 に書き換え、指定時以外はyumリポジトリを参照しないようにする。
1
| |
GlusterFSをインストールし、起動する
※Amazon Linuxの場合$releaseverの値が取得できないので、yumの実行前に /etc/yum.repo.d/glusterfs-epel.repo の $releasever を 6など適切な物に 書き換える
1 2 3 | |
DNSが使用できないときのために、 /etc/hosts に追記する
1 2 3 | |
Volume提供サーバ(の内、どちらか一方)にてVolumeを構成する。
例ではgfs_sv1において、replicaモードで2つの領域( gfs_sv1の /var/glustervols と gfs_sv2の /var/glustervols )を一つの vol01 という仮想ボリュームとして構成している
1 2 3 4 | |
注意する点としては、 gluster peer probe コマンドで連携するホストを指定するが、 Glusterクライアントの gfs_cl も含めている ところ。
クライアントにてlocalhostをマウントする
今回の例では、gfs_clでの作業
1 2 3 | |
起動時に自動マウントする場合は /etc/fstab に下記を追記する。
1
| |
これでクライアントであるgfs_clにおいて、 /var/app01 にファイルやディレクトリを作成すると、両方のVolume提供サーバの /var/glustervols にファイルが作成され冗長構成が実現する。
その後の編集なども同期され冗長化は維持される。
その他
クライアントがglusterfsファイルシステムを利用出来ない場合は、nfsでマウントすることも可能。
この場合クライアントからはVolume提供サーバのどちらかを指定しマウントすることになる。
GlusterFSは、マスターを持たないのでどちらを指定しても良い。
ただし、Volume提供サーバの物理的な故障などで冗長化が壊れた場合、glusterfsマウントした場合は自動的に動作中のVolume提供サーバと通信し、サービス可動が維持できるが、 NFSマウントした場合は指定したVolume提供サーバが落ちた場合は停止する ことになる。