単なるメモです。
- ホストを 2台用意して DRBD でミラーリング
- iSCSI Enterprise Target で iSCSI target にする
- Keepalived VRRP で VIP を振って Master/Backup 構成で failover 可能に
- VMware ESXi からその iSCSI target 上に仮想マシンを構築
- failover しても仮想マシンが止まらない
という構成ができた。OS は CentOS-5.2。
仮想マシンで make などをして、IO がガリガリ起きている状態で failover (マスターになっているマシンの電源断とか) しても、仮想マシン側では IO が数秒待たされるだけで特にエラーなどは起きず。結構気持ちいいなこれ。
ただし、DRBD のプロトコルが A or C だと大丈夫だが、B だと仮想マシン側で IO error が大量発生。A だと信頼性が不安だし、C だと速度でなさそうだし、というのがちょっと悩みどころかも。
# DRBD のホスト自体を仮想マシンで構築したので、速度は計測していない。
以下インストールと設定のメモ。
ちなみに DRBD + Keepalived の部分はおなじみの
[24時間365日] サーバ/インフラを支える技術 ?スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ)
- 作者: 安井真伸,横川和哉,ひろせまさあき,伊藤直也,田中慎司,勝見祐己
- 出版社/メーカー: 技術評論社
- 発売日: 2008/08/07
- メディア: 単行本(ソフトカバー)
- 購入: 133人 クリック: 2,270回
- この商品を含むブログ (289件) を見る
- VIP: 192.168.0.40
- drbd1: 192.168.0.41
- drbd2: 192.168.0.42
# yum install drbd82 kmod-drbd82 # tar zxvf keepalived-1.1.15.tar.gz # cd keepalived-1.1.15 # ./configure # make # make rpm # rpm ができる # rpm -Uvh keepalived-1.1.15-5.i386.rpm # rpm -Uvh daemontools-toaster-0.76-1.3.3.i386.rpm
/etc/drbd.conf
common { syncer { rate 100M; } } resource r1 { protocol C; on drbd1 { device /dev/drbd1; disk /dev/sdc; address 192.168.0.41:7790; meta-disk internal; } on drbd2 { device /dev/drbd1; disk /dev/sdc; address 192.168.0.42:7790; meta-disk internal; } }
# modprobe drbd # drbdadm create-md all # メタディスク作成 (両方で) # drbdadm up all # 起動 (両方で) # drbdadm -- --overwrite-data-of-peer primary all # 最初に primary -> secondary の同期を取る (ホストdrbd1のみ) # cat /proc/drbd # 状態を見る
iSCSI Enterprise Target のインストール。
# yum install kernel-devel # tar zxvf iscsitarget-0.4.16.tar.gz # cd iscsitarget-0.4.16 # make # make install
/etc/ietd.conf
Target iqn.2008-10.com.topicmaker.internal.drbdtest Lun 1 Path=/dev/drbd1,Type=fileio Alias drbd-test
Keepalived VRRP の設定。
/etc/keepalived/keepalived.conf
vrrp_instance DRDB { state BACKUP interface eth0 garp_master_delay 5 virtual_router_id 200 priority 100 nopreempt advert_int 1 authentication { auth_type PASS auth_pass XXXX } virtual_ipaddress { 192.168.0.40/24 dev eth0 } notify_master "/usr/local/sbin/drbd-master" notify_backup "/usr/local/sbin/drbd-backup" notify_fault "/usr/local/sbin/drbd-backup" }
マスターになったときに行う処理 /usr/local/sbin/drbd-master
#!/bin/sh drbdadm primary all service iscsi-target start
バックアップになったときに行う処理 /usr/local/sbin/drbd-backup
#!/bin/sh service iscsi-target stop drbdadm secondary all
daemontools から keepalived を起動するためのスクリプト /etc/daemon/keepalived/run
#!/bin/sh [ -f /var/run/vrrp.pid ] && exit exec 2>&1 trap 'kill -TERM $PID' TERM trap 'kill -HUP $PID' HUP trap 'kill -INT $PID' INT keepalived -n -S 1 --vrrp & PID=$! wait $PID /usr/local/sbin/drbd-backup
/etc/inittab に以下を追加
# daemontools SV:123456:respawn:/usr/bin/svscanboot