こんにちは。インフラグループ deraxです。
今回はGlusterFSをインストールしてみたいと思います。
GlusterFS は分散ファイルシステムの一つで、自動復帰・ミラーリング/ストライピングを行うことができます。
ファイルシステムで障害が発生した場合
●冗長化でNFSを利用している・・・
復旧まで片肺で動作(復旧出来るまで不安が募る)
復旧作業としてはOSインストール→初期設定→ミドルウェア設定→再度冗長構成へ投入(うまく動作するか不安)→
場合によっては他サーバからのデータコピーが必要(コピー完了まで時間かかるし相方の負荷を上げてしまいページのレスポンスが落ちるかも・・・)
●分散ファイルシステムだと・・・
1台の故障程度なら放置でもよい(ゆっくり休めます)
復旧作業はOSインストール→初期設定→ミドルウェア設定→ブリック領域へ追加
サーバを追加するだけで単純にスケールアウト出来る、障害対応が柔軟に出来るなど
GlusterFSを使うことで今までのファイルシステムよりも
より効率的に対応出来るようになります。
●今回のサーバ構成
サーバ2台
クライアント1台
●GlusterFSサーバインストール
サーバ2台とも以下の作業を行います。
GlusterFSはepelリポジトリにあります。
# rpm -ivh http://download.gluster.org/pub/gluster/glusterfs/LATEST/EPEL.repo/glusterfs-epel.repo # yum install --enablerepo=epel glusterfs glusterfs-server
●ブリック領域の準備
ボリュームに割り当てるディレクトリを作成しておく(任意の場所でよい)
公式ページだとxfsファイルシステムを推奨していますが
推奨なので今回はxfsは利用しません
# mkdir /var/gfs_srv_vol
●GlusterFSの設定
・すべてのサーバで
# /etc/init.d/glusterd start # chkconfig glusterd on
・1つのサーバで以下のコマンドでGlusterFSサーバを探しステータスを確認します。
# gluster peer probe [IPアドレス] # gluster peer status
●Gluster領域の作成
1つのサーバで以下のコマンドを発行する
# gluster volume create gfs_vol0 replica 2 [IPアドレス]:/var/gfs_srv_vol [IPアドレス]:/var/gfs_srv_vol # gluster volume start gfs_vol0
・領域の構成情報と起動状況を確認
# gluster volume info
●クライアントからのマウント
fuseのインストール
# yum install glusterfs-fuse
Nativeクライアントとしてボリュームをマウントする際は、任意のGlusterFSサーバを指定してマウントします。
# mount -t glusterfs [IPアドレス]:/gfs_vol0 /mnt/gluster *NFS形式でもマウント出来ます
●ブリック領域の追加
# gluster volume add-brick ボリューム名 ホスト1:パス1 ホスト2:パス2・・・ # gluster volume rebalance ボリューム名 start
●レプリケーションの自己修復
クライアントから以下を実行します。
# find <gluster-mount> -print0 | xargs --null stat >/dev/null # find <gluster-mount> -type f -exec dd if='{}' of=/dev/null bs=1M \; > /dev/null 2>&1
●サーバのボリュームについて
後から変更出来ないと思われるのでよく考えた方がいいです。
ブリックはひとつのサーバに複数作成することが出来ます。
Distributed Volume
ファイル分散方式でGlusterFSデフォルトの構成
ファイルはいずれかのブリックに格納
ブリックがあるサーバーに障害が発生した場合は、そのサーバー内に保存されているファイルだけが参照できない
冗長性はないが全データ消失は避けられる
Striped Volume
ストライピング方式
ひとつのファイルをブリックで分割(ストライプサイズ:デフォルト128KB)格納
サーバーに障害が発生した場合は、全てのファイルにアクセスできなくなる
冗長性はない
Replicated Volume
RAID 1 方式
ひとつのファイルをブリック間でミラーリングする
サーバーに障害が発生した場合は、片方のブリックからファイルにアクセスできる
冗長性あり。
高信頼性と高可用性を求めるならレプリカがおすすめです。
ブリック追加時には2つ以上のブリックを同時に追加する必要があります。
Distributed Striped
分散ストライピング
一つのファイルを分割して格納するブリックを複数用いる
冗長性はないが全データ消失は避けられる
Distributed Replicated
分散レプリカ
一つのファイルを2つ以上のブリックへ保存する
冗長性がある
Distributed Striped Replicated
分散ストライピングレプリカ
4つ以上のブリックを用いて分散ストライピングを行う
ファイルは分割されるが冗長性がある
Striped Replicated
ストライピングレプリカ
ストライピングしてストライピングのデータをレプリカする
ファイルは分割されるが冗長性がある
●所感
DRBDのようにOSレベルまで食い込んでいない。
特にレプリカは実ファイルがそれぞれのサーバへ書き込まれるので
障害が発生した場合ファイルが残っているのでNFS+DRBDよりも安心感があります。
ストライピングをしてしまうとファイルが分割されるため
障害が起こると復旧は難しそうと感じました。