GlusterFS で分散ストレージ環境を手に入れる

さて 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 を追加

Create VolumeGlusterFS 用にシステムが入っているボリュームとは別に EBS をアタッチして、そこに GlusterFS のブリックを作ってみます。
ELB を作成するには AWS のコンソールから ELASTIC BLOCK STORE の Volume で Create Volume を選択して作成します。
Availabity Zone は EC2 インスタンスと同じものを選んでください。
あとは、適宜。

Attach Volume作成した 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 マウントもできるようですよ。

よい、分散ストレージライフを!

コメントを残す

メールアドレスが公開されることはありません。