めもめも

このブログに記載の内容は個人の見解であり、必ずしも所属組織の立場、戦略、意見を代表するものではありません。

RHELonEC2でGlusterFSを利用してみる

はじめに

Amazon EC2では、Red Hat Enterprise Linux 6(RHEL6)のAMIを時間課金で利用することができます。(利用者は、Red Hatからサブスクリプションを購入する必要はありません。)

AWS環境専用のyumリポジトリが用意されているので、yumコマンドで最新のアップデートパッケージも適用可能です。現在、提供されているAMIは、RHEL6.1ですが、yum updateするとRHEL6.2になります。

RHEL6では、EPELリポジトリからGlusterFSが簡単に導入できるので、これを使って、RHELonEC2でGlusterFSを利用してみます。

(参考)GlusterFSの気になるあれこれ

事前準備

TCP 22, 111, 24007-24020をオープンしたセキュリティグループ「GlusterFS」を作成します。

RHEL6.1のインスタンスを起動してログインした後に、次を実行します。

# yum -y localinstall http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-5.noarch.rpm
# yum -y install glusterfs-server glusterfs-fuse
# chkconfig glusterd on
# chkconfig iptables off

# cat <<EOF >>/etc/rc.local
mkfs.ext4 /dev/xvdj
mkfs.ext4 /dev/xvdk
mkdir -p /brick01
mkdir -p /brick02
mount /dev/xvdj /brick01
mount /dev/xvdk /brick02
EOF

なお、上記のmkfs.ext4コマンドに下記のオプションを指定しておくとと、ファイルシステム作成時間が短縮されます。

mkfs.ext4 -E lazy_itable_init=1 /dev/xvdj
mkfs.ext4 -E lazy_itable_init=1 /dev/xvdk

最後にこのインスタンスからAMIを作成しておきます。

クラスタNode起動

先に作成したAMIから、

・m1.large、セキュリティグループ「GlusterFS」、タグ「Name:GlusterNode」

のインスタンスを好きな数だけ立ち上げます。起動するとEphemeralディスクのフォーマットが走るので、終わるまで気長に待ちます。(以下の例では、10インスタンス起動しています。)

※インスタンスにログインして、/brick01, /brick02がマウントされていればフォーマットは完了しています。あるいは、AWS管理コンソールのモニタでDiks Writesを見ていると終わったのが分かります。

500GBx2をフォーマットしているのでそれなりに時間がかかっていますが、先の「-E lazy_itable_init=1」を使うと短時間で完了するようになります。(これは、inodeテーブルをファイルシステム作成後にバックグラウンドで作成するオプションです。)

Amazon EC2 API Toolsを入れた端末から次を実行すると、peer probeとvolume createのコマンドが表示されます。

$ ec2-describe-instances -F tag:Name=GlusterNode -F instance-state-name="running" | grep "INSTANCE" | awk '{print "gluster peer probe " $15}'
$ echo -n "gluster volume create vol01 "; ec2-describe-instances -F tag:Name=GlusterNode -F instance-state-name="running" | grep "INSTANCE" | awk '{print $15 ":/brick01 " $15 ":/brick02"}' | paste -s -d " "

表示されるコマンドはこんな感じです。

gluster peer probe 10.150.119.187
gluster peer probe 10.161.7.0
gluster peer probe 10.150.145.57
gluster peer probe 10.152.18.49
gluster peer probe 10.152.105.189
gluster peer probe 10.152.50.158
gluster peer probe 10.160.5.103
gluster peer probe 10.152.57.127
gluster peer probe 10.150.90.45
gluster peer probe 10.152.23.242

gluster volume create vol01 10.150.119.187:/brick01 10.150.119.187:/brick02 10.161.7.0:/brick01 10.161.7.0:/brick02 10.150.145.57:/brick01 10.150.145.57:/brick02 10.152.18.49:/brick01 10.152.18.49:/brick02 10.152.105.189:/brick01 10.152.105.189:/brick02 10.152.50.158:/brick01 10.152.50.158:/brick02 10.160.5.103:/brick01 10.160.5.103:/brick02 10.152.57.127:/brick01 10.152.57.127:/brick02 10.150.90.45:/brick01 10.150.90.45:/brick02 10.152.23.242:/brick01 10.152.23.242:/brick02

どれか1つのインスタンスにログインして、これをコピペで実行します。

これでボリュームができたので、開始してマウントしてみます。

[root@ip-10-150-119-187 ~]# gluster volume start vol01
Starting volume vol01 has been successful
[root@ip-10-150-119-187 ~]# mkdir /mnt/vol01
[root@ip-10-150-119-187 ~]# mount -t glusterfs localhost:/vol01 /mnt/vol01
[root@ip-10-150-119-187 ~]# df -h
Filesystem            Size  Used Avail Use% マウント位置
/dev/xvde1            5.7G  2.0G  3.7G  35% /
none                  3.7G     0  3.7G   0% /dev/shm
/dev/xvdj             414G  199M  393G   1% /brick01
/dev/xvdk             414G  199M  393G   1% /brick02
localhost:/vol01      8.1T  3.9G  7.7T   1% /mnt/vol01

8TBのファイルシステムがあっという間に用意できました。(^^/