読者です 読者をやめる 読者になる 読者になる

CA MOBILE エンジニアブログ

株式会社シーエー・モバイルのエンジニアブログです

【旧ブログ】GlusterFSを試す

こんにちは。インフラグループ 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よりも安心感があります。

ストライピングをしてしまうとファイルが分割されるため
障害が起こると復旧は難しそうと感じました。