めもめも

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

GlusterFS on EC2/RHEL6 - 3分クッキング

何かというと

こちらの記事の手順をスクリプトで自動化しました。10TBのボリュームがEC2上に3分で用意されます。(インスタンスの起動は並列で行われるので、原理的には、100TBでも1PBでもほぼ同じ時間で用意できるはずです。)

※動画は再生速度を上げてます。実際には2分40秒の内容です。

自動化スクリプトの中身

AMIは事前に作成してから利用します。AMIのID(ami-a69d43bb)は環境によって変わります。やっつけで作ったので、参考程度にご覧ください。。。

※ ext4のフォーマットは「-E lazy_itable_init=1」オプションでバックグランド化しています。

#!/bin/sh

NUM=$1

function confirm {
	echo -n "$1"
	read answer
	if [[ $answer != "y" ]]; then
		exit
	fi
}

TMPFILE=/tmp/glustertmp$$
RUN=0

confirm "Start $NUM gluster instances(y/n)? "
ec2-run-instances ami-a69d43bb -n $NUM -k enakai_sa -t m1.large -g glusterfs | grep "INSTANCE" | awk '{system("ec2-create-tags -t Name=GlusterNode " $2)}'

while [[ $RUN -lt $NUM ]]; do
	sleep 5
	RUN=$(ec2-describe-instances -F tag:Name=GlusterNode -F instance-state-name="running" | grep "INSTANCE" | wc -l)
done

{
	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 " "
	echo "gluster volume start vol01"
	echo "mount -t glusterfs localhost:/vol01 /mnt"
} > $TMPFILE

echo "-----"
echo "$NUM instances are now running."
echo "Wait a few minutes to finish ext4 formatting before initialization...."
confirm "Initialize Gluster volme(y/n)? "

NODE=$(ec2-describe-instances -F instance-state-name="running" | grep "INSTANCE" | head -1 | awk '{print $4}')
ssh -i enakai_sa.pem  -o "StrictHostKeyChecking no" root@${NODE} < $TMPFILE 2>/dev/null

echo "-----"
echo "Gluster volume is now mounted."
echo "Check with the following command:"
echo "ssh -i enakai_sa.pem root@${NODE} df -H"

rm $TMPFILE