ログ日記

作業ログと日記とメモ

ソフトウェア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