EC2でインスタンスストアをRAID0で組む手順/起動スクリプト化

More than 3 years have passed since last update.

サンプルとしてインスタンスストア×2で組むパターンを書く


前提

CentOS6系、ファイルシステムはとりあえずext4で設定。


備考

AmazonLinuxでやる場合は、インスタンスストアの自動マウント機能を無効化する必要があるので注意。

http://askubuntu.com/questions/405442/how-can-i-disable-cloud-init


インスタンスストアを追加する手順

公式ドキュメント参照

http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/add-instance-store-volumes.html

EC2インスタンスをLaunchする時にアタッチする。

既存EC2インスタンスに後から追加したい場合はAMIから再作成してその時にアタッチする。


RAID0で組む

単純に組むだけの手順

yum install mdadm

yes Y | mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/xvd[bc]
mkfs.ext4 /dev/md0
mkdir -p /media/ephemeral0
mount -o rw,relatime,errors=continue,user_xattr,acl,barrier=1,data=ordered /dev/md0 /media/ephemeral0

ただし、この方法で組んだ場合, インスタンスストアのデータが失われるタイミングでRAID0とマウントが外れてしまう。


起動スクリプト化する

データが失われるのはともかく、RAIDとマウントが外れるのはサーバとしては困る。

OS起動と共にRAIDを組み、OSシャットダウンと共にRAIDを破棄する起動スクリプトを作ることで解決する。

/etc/init.d/ephemeral-raid0

#!/bin/sh

# chkconfig: 23456 99 01
# description: Creates the Ephemeral RAID0 volume by using the instance store of EC2.

prog=ephemeral-raid0
lockfile=/var/lock/subsys/$prog

start() {
[ -x /sbin/mdadm ] || exit 1
echo -n $"mounting $prog: "
yes Y | mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/xvd[bc]
mkfs.ext4 /dev/md0
mkdir -p /media/ephemeral0
mount -o rw,relatime,errors=continue,user_xattr,acl,barrier=1,data=ordered /dev/md0 /media/ephemeral0
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch $lockfile
return $RETVAL
}

stop() {
echo -n $"unmounting $prog: "
[ ! -f /dev/md0 ] || exit 1
umount /dev/md0
mdadm --stop /dev/md0
mdadm --zero-superblock /dev/xvd[bc]

RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f $lockfile
return $RETVAL
}

case "$1" in
start)
start
;;
stop)
stop
;;
status)
cat /proc/mdstat
;;
restart)
stop
start
;;
*)
echo $"Usage: $0 {start|stop|status|restart}"
exit 2
esac


設定

$ chkconfig --add ephemeral-raid0

$ chkconfig ephemeral-raid0 on


使う

service ephemeral-raid0 start

service ephemeral-raid0 status