さて MariaDB Galera Cluster で DB を冗長化したら、次はファイルも冗長化したくなりますよね?
そこで、使えるのが分散ファイルシステム GlusterFS です。
GlusterFS は UserLand で動作する FS ベースのファイルシステムで、自動復帰・ミラーリング/ストライピングを行うことができます。
サーバからは Glustefs Native Client や NFS でマウントして使用することができます。
GlusterFS でボリューム作っておいて、それを Web サーバでマウントして使えば、簡単に Web サーバをスケールアウトできて、嬉しいことこの上ないですね!
そんなわけで AWS で GlusterFS を試してみたので、やりかたを書いておきます。
GlusterFS のインストール
まずは CentOS 6 にインストールする方法。
公式サイトの QuickStart 読めば分かるんですが…
yum レポジトリを取得してから、yum でインストールします。
# wget -P /etc/yum.repos.d http://download.gluster.org/pub/gluster/glusterfs/LATEST/EPEL.repo/glusterfs-epel.repo # yum install glusterfs glusterfs-server
GlusterFS のブリックを保存するための EBS を追加
GlusterFS 用にシステムが入っているボリュームとは別に EBS をアタッチして、そこに GlusterFS のブリックを作ってみます。
ELB を作成するには AWS のコンソールから ELASTIC BLOCK STORE の Volume で Create Volume を選択して作成します。
Availabity Zone は EC2 インスタンスと同じものを選んでください。
あとは、適宜。
作成した EBS を EC2 インスタンスにアタッチします。
Device は適当に。図では /dev/sdf
としてますね。
その下に注意書きが出てて
Note: Newer linux kernels may rename your deveises to /dev/xvdf through /dev/xvdp internally, even when then device name entered here (and shown in the details) is /dev/sdf through /dev/sdp.
って書いてあります。
要は、ここで /dev/sdf
としてアタッチすると EC2 インスタンス上では /dev/xvdf
として認識されますよー。ってことなので、覚えておいてください。
ブリックの用意
公式サイトのクイックスタートに寄るとブリックを保存するボリュームは xfs でフォーマットした方が良いようです。
xfs でフォーマットするために xfsprogs パッケージをインストールしておきましょう。
# yum install xfsprogs
そんで、フォーマットします。
# mkfs.xfs -i size=512 /dev/xvdb
/export/brick1
ってディレクトリを作ってマウントしましょう。
まずは /etc/fstab
に以下を追記します。
/dev/sdb /export/brick1 xfs defaults 1 2
で、マウント。
# mount -a && mount
GlusterFS の設定
ここまでの設定を行った EC2 インスタンスが二台 (10.0.0.1, 10.0.0.2) あるとします。
まずは、両方の EC2 インスタンスで glusterd を起動します。
# service glusterd start # chkconfig glusterd on
glusterd を起動すると /var/lib/glusterd
に localhost や peer の UUID とかが保存されるので AMI を作って EC2 を複製した時は、これを削除してやってから glusterd を起動してください。
peer に他の Gluster サーバを追加するには以下のようにします。
# gluster peer probe 10.0.0.2
上の例では 10.0.0.1 サーバで、10.0.0.2 サーバを追加しています。
IP では無くホスト名でもおっけです。
最後に Gluster ボリュームをセットアップします。
10.0.0.1, 10.0.0.2 の二台でミラーリングするには、以下のようにします。
# gluster volume create gv0 replica 2 10.0.0.1:/export/brick1 10.0.0.2:/export/brick1 # gluster volume start gv0
これで Gluster ボリュームがセットアップされました。
gluster volume create でオプションを設定しないと distribute ボリュームになります。
これはファイル毎に複数のサーバに配置するオプションです。
参加しているサーバのうちの一台が死ぬと、そのサーバに配置されているファイルにアクセスできなくなります。
replica オプションで作成すると、すべてのサーバにすべてのファイルが配置されます。
参加しているサーバが1台死んでも、すべてのファイルにアクセスできます。
冗長性はあるけれども、速度的には一番劣ります。
strip オプションで作成すると、ファイルを細切れに分割して複数のサーバに配置します。
distribute, replica に比較して高速ですが、参加しているサーバのうち1台でも死んでしまうと、すべてのファイルにアクセスできなくなります。
GlusterFS ボリュームのマウント
作成した GlusterFS ボリュームをマウントするには、fuse が必要になるので、yum でインストールします。
# yum install glusterfs-fuse
実際にマウントするには、以下のようにします。
# mount -t glusterfs 10.0.0.1:/gv0 /mnt/gluster
試してないけど、普通に NFS マウントもできるようですよ。
よい、分散ストレージライフを!