EBSボリュームを使用したソフトウェアRAID1の構築
blogを移行したばかりなので、少しだけ『ブログを書く!』という気持が燃え上がっています。
さて、AWSを使ってる方でEC2インスタンスに複数のEBSボリュームを接続してRAID0を構成している方を見かけます。
EBSのI/Oを向上させるためにテストされた方が多いと思うのですが、そちらを参考にしつつRAID1をテストしてみました。
複数作ってもインスタンスにアタッチ出来るのは同じAvailability Zoneのものだけですし、簡単にスナップショットを作れるのでテストした人は少ないかも。
それでもRAIDの実験だけにHDDを買うのはもったいないので、そんな時はEBSが便利です。
テストに使用したのはAmazon LinuxのAMIです。
AMIからインスタスを起動して、インスタンスと同じAZに10GiBのEBSを2つ作成しました。
作成した2つのEBSを/dev/sdfと/dev/sdgにアタッチする事をお忘れなく!
EBSボリュームを/dev/sdfと/dev/sdgにアタッチすると以下のような状態となります
$ sudo ls -alh /dev/sd* lrwxrwxrwx 1 root root 5 1月 20 15:19 2012 /dev/sda1 -> xvda1 lrwxrwxrwx 1 root root 4 1月 20 15:21 2012 /dev/sdf -> xvdf lrwxrwxrwx 1 root root 4 1月 20 15:22 2012 /dev/sdg -> xvdg
念のため現在のファイルシステムを事前に調査しておきます。
$ df -hT Filesystem Type Size Used Avail Use% マウント位置 /dev/xvda1 ext4 7.9G 923M 6.9G 12% / tmpfs tmpfs 299M 0 299M 0% /dev/shm
ソフトウェアRAIDに必要なパッケージmdadmはAmazon Linuxは標準でインストール済みです
$ sudo yum info mdadm Loaded plugins: fastestmirror, priorities, security, update-motd Loading mirror speeds from cached hostfile * amzn-main: packages.ap-southeast-1.amazonaws.com * amzn-updates: packages.us-west-2.amazonaws.com Installed Packages Name : mdadm Arch : x86_64 Version : 3.2.2 Release : 1.11.amzn1 Size : 802 k Repo : installed Summary : The mdadm program controls Linux md devices (software RAID arrays) URL : http://www.kernel.org/pub/linux/utils/raid/mdadm/ License : GPLv2+ Description : The mdadm program is used to create, manage, and monitor Linux MD (software : RAID) devices. As suh, it provides similar functionality to the raidtools : package. However, mdadm is a single program, and it can perform : almost all functions without a configuration file, though a configuration : file can be used to help with some common tasks.
RAID0のデバイスを作成する
$ sudo mdadm --create /dev/md0 --level=1 --metadata=1.1 --raid-devices 2 /dev/sdf /dev/sdg mdadm: array /dev/md0 started.
mdadmn.confにデバイスの情報を入力する
$ echo DEVICE /dev/sdf /dev/sdg | sudo tee /etc/mdadm.conf DEVICE /dev/sdf /dev/sdg $ sudo mdadm --detail --scan | sudo tee -a /etc/mdadm.conf ARRAY /dev/md0 metadata=1.1 name=ip-10-146-43-124:0 UUID=ad36421a:428feda0:47b89664:b8858c73
/dev/md0にファイルシステムを作成する
$ sudo mkfs.ext4 /dev/md0 mke2fs 1.41.12 (17-May-2010) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 655360 inodes, 2621167 blocks 131058 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=2684354560 80 block groups 32768 blocks per group, 32768 fragments per group 8192 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632 Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done This filesystem will be automatically checked every 29 mounts or 180 days, whichever comes first. Use tune2fs -c or -i to override.
/volをマウント出来るようにする
$ echo "/dev/md0 /vol ext4 noatime 0 0" | sudo tee -a /etc/fstab /dev/md0 /vol ext4 noatime 0 0 $ sudo mkdir /vol $ sudo mount /vol
正常にマウントしてディスクを10Gで認識しているか確認する
$ df -hT Filesystem Type Size Used Avail Use% マウント位置 /dev/xvda1 ext4 7.9G 923M 6.9G 12% / tmpfs tmpfs 299M 0 299M 0% /dev/shm /dev/md0 ext4 9.9G 151M 9.2G 2% /vol
RAIDの動作確認としてapacheをインストール
$ sudo mkdir -m 777 /vol/www $ sudo yum install httpd $ echo "Hello World" | tee /vol/www/index.html $ sudo vi /etc/httpd/conf/httpd.conf 293 #DocumentRoot "/var/www/html" 294 DocumentRoot "/vol/www" $ sudo httpd -t Syntax OK $ sudo service httpd start Starting httpd: [ OK ]
障害チェック前に現在のRAID状態をチェックする
$ sudo mdadm --detail /dev/md0 /dev/md0: Version : 1.1 Creation Time : Fri Jan 20 15:23:50 2012 Raid Level : raid1 Array Size : 10484668 (10.00 GiB 10.74 GB) Used Dev Size : 10484668 (10.00 GiB 10.74 GB) Raid Devices : 2 Total Devices : 2 Persistence : Superblock is persistent Update Time : Fri Jan 20 15:28:36 2012 State : clean Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 Name : ip-10-146-43-124:0 (local to host ip-10-146-43-124) UUID : ad36421a:428feda0:47b89664:b8858c73 Events : 19 Number Major Minor RaidDevice State 0 202 80 0 active sync /dev/sdf 1 202 96 1 active sync /dev/sdg
/proc/mdstatからも動作確認が出来ます
$ cat /proc/mdstat Personalities : [raid1] md0 : active raid1 xvdg[1] xvdf[0] 10484668 blocks super 1.1 [2/2] [UU] unused devices: <none>
EBSボリュームをデタッチして別のホストからhttpアクセスをしても正常に接続出来る事を確認
$ curl http://ec2-175-41-219-124.ap-northeast-1.compute.amazonaws.com Hello World
障害となった/dev/sdgをRAIDから切り離す
$ sudo mdadm /dev/md0 -r /dev/sdg mdadm: hot removed /dev/sdg
デバイスが設定から削除された事を確認する
$ sudo mdadm --detail /dev/md0 /dev/md0: Version : 1.1 Creation Time : Fri Jan 20 13:19:30 2012 Raid Level : raid1 Array Size : 10484668 (10.00 GiB 10.74 GB) Used Dev Size : 10484668 (10.00 GiB 10.74 GB) Raid Devices : 2 Total Devices : 1 Persistence : Superblock is persistent Update Time : Fri Jan 20 14:28:00 2012 State : active, degraded Active Devices : 1 Working Devices : 1 Failed Devices : 0 Spare Devices : 0 Name : ip-10-146-38-134:0 (local to host ip-10-146-38-134) UUID : 7ce0077d:2f4b529a:2935e42a:d677001f Events : 20 Number Major Minor RaidDevice State 0 202 80 0 active sync /dev/sdf 1 0 0 1 removed $ cat /proc/mdstat Personalities : [raid1] md0 : active raid1 xvdf[0] 10484668 blocks super 1.1 [2/1] [U_] unused devices: <none>
新しいEBSボリュームを/dev/sdhに接続したのでRAIDアレイに加える
$ ls -alh /dev/sd* lrwxrwxrwx 1 root root 5 1月 20 15:19 2012 /dev/sda1 -> xvda1 lrwxrwxrwx 1 root root 4 1月 20 15:23 2012 /dev/sdf -> xvdf lrwxrwxrwx 1 root root 4 1月 20 15:46 2012 /dev/sdh -> xvdh $ sudo mdadm /dev/md0 -a /dev/sdh mdadm: added /dev/sdh
きちんとリビルドが開始されている事を確認する
$ sudo mdadm --detail /dev/md0 /dev/md0: Version : 1.1 Creation Time : Fri Jan 20 15:23:50 2012 Raid Level : raid1 Array Size : 10484668 (10.00 GiB 10.74 GB) Used Dev Size : 10484668 (10.00 GiB 10.74 GB) Raid Devices : 2 Total Devices : 2 Persistence : Superblock is persistent Update Time : Fri Jan 20 15:47:58 2012 State : clean, degraded, recovering Active Devices : 1 Working Devices : 2 Failed Devices : 0 Spare Devices : 1 Rebuild Status : 6% complete Name : ip-10-146-43-124:0 (local to host ip-10-146-43-124) UUID : ad36421a:428feda0:47b89664:b8858c73 Events : 26 Number Major Minor RaidDevice State 0 202 80 0 active sync /dev/sdf 2 202 112 1 spare rebuilding /dev/sdh $ cat /proc/mdstat Personalities : [raid1] md0 : active raid1 xvdh[2] xvdf[0] 10484668 blocks super 1.1 [2/1] [U_] [===>.................] recovery = 16.9% (1780768/10484668) finish=3.2min speed=44104K/sec unused devices: <none>
最後にこのようにリビルドが完了した事を確認したら終わりです。
$ sudo mdadm --detail /dev/md0 /dev/md0: Version : 1.1 Creation Time : Fri Jan 20 15:23:50 2012 Raid Level : raid1 Array Size : 10484668 (10.00 GiB 10.74 GB) Used Dev Size : 10484668 (10.00 GiB 10.74 GB) Raid Devices : 2 Total Devices : 2 Persistence : Superblock is persistent Update Time : Fri Jan 20 15:51:56 2012 State : clean Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 Name : ip-10-146-43-124:0 (local to host ip-10-146-43-124) UUID : ad36421a:428feda0:47b89664:b8858c73 Events : 44 Number Major Minor RaidDevice State 0 202 80 0 active sync /dev/sdf 2 202 112 1 active sync /dev/sdh $ cat /proc/mdstat Personalities : [raid1] md0 : active raid1 xvdh[2] xvdf[0] 10484668 blocks super 1.1 [2/2] [UU] unused devices: <none>
無事にRAID1によるミラーリングの動作を確認が出来ました。
本番環境でこのようなRAID構成にするかは別にして、こんな環境を一時的に(利用した分だけの課金で)使えるって学習目的の方に大きな魅力ですね。
AWSに限った話ではないと思いますが、使う方の立場が変われば色々なメリットや使い方も変わってくるのかも。
■参考サイト
http://dev.koba206.com/?p=21