ソフトウェアRAIDとDRBD作業ログ
ディスクのフォーマット。
sdaとsdbに150GBのパーティションをそれぞれ一つ作る。
#/bin/bash for device in /dev/sda /dev/sdb; do /sbin/sfdisk $device << EOF ,,L EOF /sbin/sfdisk $device -uM << EOF ,153600,fd ,,E ; ; ,10240,S EOF done
RAIDアレイの作成。
#/bin/bash mdadm -C /dev/md1 -l1 -n2 /dev/sd[ab]1 echo "DEVICE /dev/sd[ab]1" >> /etc/mdadm/mdadm.conf mdadm -Ds >> /etc/mdadm/mdadm.conf
DRBDの設定。
cat /etc/drbd.d/md1.res
resource md1 { protocol C; disk { on-io-error detach; } device /dev/drbd_d1; disk /dev/md1; meta-disk internal; on host1{ address 192.168.1.2:7789; } on host2{ address 192.168.1.3:7789; } }
Found LVM2 physical volume signature 157287448 kB left usable by current configuration Could not determine the size of the actually used data area. Device size would be truncated, which would corrupt data and result in 'access beyond end of device' errors. If you want me to do this, you need to zero out the first part of the device (destroy the content). You should be very sure that you mean it. Operation refused.
前に使っていたデータが残っているとエラーが出ることがあるので先頭を消す。
dd if=/dev/zero of=/dev/md1 count=2
DRBDメタデータの作成。
drbdadm create-md md1
DRBDを起動。
/etc/init.d/drbd start /etc/init.d/drbd status drbd driver loaded OK; device status: version: 8.3.7 (api:88/proto:86-91) GIT-hash: ea9e28dbff98e331a62bcbcc63a6135808fe2917 build by root@buildd, 2010-01-18 15:33:29 m:res cs ro ds p mounted fstype ... sync'ed: 0.1% (153600/153600)M 1:md1 SyncSource Secondary/Secondary UpToDate/Inconsistent C
フル同期を実行する。
drbdadm -- --overwrite-data-of-peer primary md1 /etc/init.d/drbd status drbd driver loaded OK; device status: version: 8.3.7 (api:88/proto:86-91) GIT-hash: ea9e28dbff98e331a62bcbcc63a6135808fe2917 build by root@buildd, 2010-01-18 15:33:29 m:res cs ro ds p mounted fstype ... sync'ed: 0.1% (153596/153600)M 1:md1 SyncSource Primary/Secondary UpToDate/Inconsistent C
drbd1にパーティションを作る。
…と思ったけどそういう使い方はできないのね。
RAIDアレイにパーティションを作る場合は md_d0 などの名前にするらしいが、DRBDはそういうことは無理なのか…DRBD上にLVMができるならDRBD上に直接パーティションも作れそうなんだけど。
そういうわけで普通にファイルシステムを作ってリンクするのがいいのかなぁ。
mkfs.ext3 /dev/drbd1 echo "/dev/drbd1 /mnt/drbd1 ext3 usrquota,grpquota 0 0" >> /etc/fstab mount /mnt/drbd1 aptitude install drbdlinks cp -a /var /mnt/drbd1/var cp -a /home /mnt/drbd1/home echo "mountpoint('/mnt/drbd1')" >> /etc/drbdlinks.conf echo "link('/var/')" >> /etc/drbdlinks.conf echo "link('/home/')" >> /etc/drbdlinks.conf drbdlinks start
元々のディレクトリは var.drgdlinks などにリネームされる。
lsof |grep /var.drbdlinks/ ... /etc/init.d/portmap force-reload /etc/init.d/rsyslog reload /etc/init.d/cron restart /etc/init.d/exim4 reload /etc/init.d/nfs-common restart /etc/init.d/nfs-kernel-server restart
こんな感じでデーモンを再起動してDRBD上のファイルを使うようにすればリンク完了。
これで…いける?
mdadm --fail /dev/md1 /dev/sdb1 mdadm --remove /dev/md1 /dev/sdb1 mount -t ext3 -o ro /dev/sdb1 /mnt/sdb1 ls /mnt/sdb1/ aquota.group aquota.user home lost+found var
見れた。
DRBDは動かしたままの状態で、Secondary側でRAIDを切り離してマウントすることによるスナップショット。
再同期。
umount /mnt/sdb1/ mdadm --add /dev/md1 /dev/sdb1 cat /proc/mdstat Personalities : [raid1] md1 : active raid1 sdb1[2] sda1[0] 157292288 blocks [2/1] [U_] [>....................] recovery = 0.0% (40192/157292288) finish=2526.5min speed=1036K/sec
…遅い。
DRBDの同期が完了してからなら速くなるのかな…なってほしいところ。
syslogのログ
Apr 9 04:30:12 allegro kernel: [28345.853976] md: recovery of RAID array md1 Apr 9 04:30:12 allegro kernel: [28345.854001] md: minimum _guaranteed_ speed: 1000 KB/sec/disk. Apr 9 04:30:12 allegro kernel: [28345.854028] md: using maximum available idle IO bandwidth (but not more than 200000 KB/sec) for recovery. Apr 9 04:30:12 allegro kernel: [28345.854076] md: using 128k window, over a tot al of 157292288 blocks.
速度が1000KB/sに抑えられているみたい。
cat /proc/sys/dev/raid/speed_limit_min 1000 echo 100000 > /proc/sys/dev/raid/speed_limit_min cat /proc/mdstat Personalities : [raid1] md1 : active raid1 sdb1[2] sda1[0] 157292288 blocks [2/1] [U_] [==>..................] recovery = 14.3% (22637184/157292288) finish=43.0min speed=52170K/sec
うーん。速くなったけどこれってディスクに大幅な負荷がかかるのかな。
http://itline.jp/~svx/diary/?date=20070113
ここの場合は容量が少ないんだろうか。
やっぱりスナップショットにはLVMが必要かねぇ…。
速度メモ。
ローカルディスク
time dd if=/dev/zero of=tmp.img bs=1G count=1 1+0 records in 1+0 records out 1073741824 bytes (1.1 GB) copied, 4.39133 s, 245 MB/s real 0m4.448s user 0m0.000s sys 0m1.528s
DRBD-RAID-DISK + DRBD-LVM-RAID-DISK
time dd if=/dev/zero of=/mnt/drbd1/tmp.img bs=1G count=1 1+0 records in 1+0 records out 1073741824 bytes (1.1 GB) copied, 66.104 s, 16.2 MB/s real 1m6.166s user 0m0.000s sys 0m1.472s