Archive for the 'iscsi' Category

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サーバーはさて、どうしたものか・・・・・。

Next »