Debian5.0(lenny)でPXEbootをiscsi経由でやってみる ネットワーク冗長化編
admin 2009/06/15 16:14:04
イーサ2枚構成でbondingを行う
iscsi経由でrootパーティションマウントすることになるとイーサネットの障害でサーバーは容赦なく停止する。
精神衛生上なんらかの対策は必要なので、bondingを行ってイーサの2重化を図ることにする。
bonding自体は簡単で普通のサーバーであれば、何の問題もなく導入可能であるが、initrdに組み込むのもさほど難しくはない。
debianでbondingを行う場合、ifenslaveを導入する。
iscsi-server:~# apt-get install ifenslave Reading package lists... Done Building dependency tree Reading state information... Done The following extra packages will be installed: ifenslave-2.6 The following NEW packages will be installed: ifenslave ifenslave-2.6 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded. Need to get 0B/13.6kB of archives. After this operation, 61.4kB of additional disk space will be used. Do you want to continue [Y/n]? Selecting previously deselected package ifenslave-2.6. (Reading database ... 18975 files and directories currently installed.) Unpacking ifenslave-2.6 (from .../ifenslave-2.6_1.1.0-10_i386.deb) ... Selecting previously deselected package ifenslave. Unpacking ifenslave (from .../archives/ifenslave_2_all.deb) ... Processing triggers for man-db ... Setting up ifenslave-2.6 (1.1.0-10) ... Setting up ifenslave (2) ... iscsi-server:~#
これで必要なパッケージは導入完了。このサーバー自体でbonding設定を行う必要はない。
ここから起動されるinitrdをbonding設定にする。
まず以前作成したinitrdはそのまま残しつつ新しくbonding用initrdを作成するためコピーから。
iscsi-server:~# cp -ar initrd initrd_bonding iscsi-server:~# cd /initrd/lib/modules/2.6.26-2-686/kernel/drivers/net/ iscsi-server:~/initrd_bonding/lib/modules/2.6.26-2-686/kernel/drivers/net# cp -ar /lib/modules/2.6.26-2-686/kernel/drivers/net/bonding/ . iscsi-server:~/initrd_bonding/lib/modules/2.6.26-2-686/kernel/drivers/net# cd ~/initrd_bonding/sbin/ iscsi-server:~/initrd_bonding/sbin# cp /sbin/ifenslave . iscsi-server:~/initrd_bonding/sbin# cd .. iscsi-server:~/initrd_bonding# cd scripts/init-premount/
以前作成したz_iscsiスクリプトを修正する。
iscsi-server:~/initrd_bonding/scripts/init-premount# cat z_iscsi
#!/bin/sh
PREREQ=""
prereqs()
{
echo "$PREREQ"
}
case $1 in
# get pre-requisites
prereqs)
prereqs
exit 0
;;
esac
# scsiドライバ
modprobe scsi_mod.ko
modprobe sd_mod.ko
# iscsiドライバ
modprobe scsi_transport_iscsi
modprobe iscsi_tcp
modprobe libcrc32c
modprobe crc32c
modprobe bonding <-- ここから3行追加
ifconfig bond0 up
ifenslave bond0 eth0 eth1
# IP取得 <-- こちらについもbond0でDHCPからIP取得
dhclient -lf /var/run/dhcpc.lease -pf /var/run/dhcpc.pid bond0
# iscsi実行
iscsid
iscsiadm -m discovery -t sendtargets -p ${iscsitargetip}
iscsiadm -m node -T ${iscsitarget} -p ${iscsitargetip} --login
iscsi-server:~/initrd_bonding/scripts/init-premount#これとbondingの設定を行う。
iscsi-server:~/initrd_bonding/scripts/init-premount# cd ~/initrd_bonding/etc/modprobe.d iscsi-server:~/initrd_bonding/etc/modprobe.d# cat bonding options bonding mode=1 miimon=0 arp_interval=1500 arp_ip_target=172.16.159.128
これでOK!。
bondingの設定はいろいろできるのだが、active-backupモードでないとうまくいかない。
また、primaryオプションをつけると回線切断時はうまく動作するが、復旧時にハングアップしてしまう。
いろいろ設定を試した結果、上記設定でのみうまく動作した。
ここまでくると前回と同様、initrdを作成しなおしてコピーする。
新しいイメージはinitrd.img-2.6.26-2-686-new_bondingとし、起動設定ファイルも変更する。
iscsi-server:~/initrd_bonding/etc/modprobe.d# cd
iscsi-server:~# (cd initrd_bonding; find . | cpio -o -H newc ) | gzip > initrd.img-2.6.26-2-686-new_bonding
iscsi-server:~# cp -i initrd.img-2.6.26-2-686-new_bonding /var/lib/tftpboot/
iscsi-server:~# cd /var/lib/tftpboot/pxelinux.cfg/
iscsi-server:/var/lib/tftpboot/pxelinux.cfg# cat 01-00-0c-29-4c-29-8a
default lenny1
label lenny1
kernel vmlinuz-2.6.26-2-686
append load initrd=initrd.img-2.6.26-2-686-new_bonding vga=773 root=/dev/sda2 iscsitarget=iqn.2001-04.com.example:storage.disk2.sys1.xyz iscsitargetip=172.16.159.128
iscsi-server:/var/lib/tftpboot/pxelinux.cfg#VMwareマシンで試す場合、当然のことながらクライアント側にはイーサネットカードを追加しておくこと。
これだけの設定でbondingが完成する。
しかし実機で試したことはないので、実機だとどうなるかは不明。
ネットワーク2重化による信頼性アップでiscsiサーバー(target)を用意すればWEBサーバー、POPサーバー、IMAPサーバー、SMTPサーバー
については負荷分散装置と組み合わして簡単にサーバー増設ができるはず。
DBサーバーはさて、どうしたものか・・・・・。