はじめに
結局うまくいかなかったため、試行錯誤した内容を書き連ねています。お見苦しいかと思いますがご了承下さい。。。
Openblocks600では正常動作したため、Bonding設定にまとめています。
対象サーバについて
うまくいかないため2台で試しました。結果はほとんど同じだったため、Hitachiの方を例として載せます。
1台目
製品名 | Hitachi PC8DG2-P108P1C10 |
OS(kernel ver) | Debian lenny(2.6.26-2-686) |
CPU | Intel(R) Celeron(R) CPU 2.00GHz |
メモリ | 512M(256M DDR PC2100 x 2枚) |
ストレージ | Seagate 160GB |
2台目
製品名 | Dell OPTIPLEX SX280 |
OS(kernel ver) | Debian lenny(2.6.26-2-686) |
CPU | Intel Pentium4 CPU 2.8GHz |
メモリ | 3GB(PC2-5300U(1GB) x 1枚、PC2-5300U(2G) x 1枚) |
ストレージ | IBM SATA 160GB |
事前準備
・ifenslaveのインストール
close:~# aptitude install ifenslave-2.6 パッケージリストを読み込んでいます... 完了 依存関係ツリーを作成しています 状態情報を読み取っています... 完了 拡張状態情報を読み込んでいます パッケージの状態を初期化しています... 完了 タスクの記述を読み込んでいます... 完了 以下の新規パッケージがインストールされます: ifenslave-2.6 更新: 0 個、新規インストール: 1 個、削除: 0 個、保留: 0 個。 12.3kB のアーカイブを取得する必要があります。展開後に 57.3kB のディスク領域が新たに消費されます。 拡張状態情報を書き込んでいます... 完了 取得:1 http://ftp.jp.debian.org lenny/main ifenslave-2.6 1.1.0-10 [12.3kB] 12.3kB を 2s 秒でダウンロードしました (5911B/s) 未選択パッケージ ifenslave-2.6 を選択しています。 (データベースを読み込んでいます ... 現在 59491 個のファイルとディレクトリがインストールされています。) (.../ifenslave-2.6_1.1.0-10_i386.deb から) ifenslave-2.6 を展開しています... man-db のトリガを処理しています ... ifenslave-2.6 (1.1.0-10) を設定しています ... パッケージリストを読み込んでいます... 完了 依存関係ツリーを作成しています 状態情報を読み取っています... 完了 拡張状態情報を読み込んでいます パッケージの状態を初期化しています... 完了 拡張状態情報を書き込んでいます... 完了 タスクの記述を読み込んでいます... 完了
・MACアドレス確認
冗長させる前に、MACアドレスを確認しておきます。
筐体括り付け | 00:00:e2:88:3d:13 |
Catalyst fa0/7と接続した方のUSB-LAN | 00:10:60:dd:99:5c |
Catalyst fa0/8と接続した方のUSB-LAN | 00:10:60:db:04:24 |
・bondingの前に、それぞれのIFで正常に起動するか確認
close:~# cat /etc/network/interfaces # This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface auto eth1 allow-hotplug eth1 iface eth1 inet static address .3 netmask 255.255.255.0 network 192.168.0.0 broadcast 192.168.0.255 gateway 192.168.0.1 auto eth2 allow-hotplug eth2 iface eth2 inet static address 192.168.0.4 netmask 255.255.255.0 gateway 192.168.0.1
→USB-LANを使っている場合、刺す順番を入れ替えたりすると正常に動作しなくなる場合があります。その場合は、以下のファイルを参照して下さい。
close:~# vi /etc/udev/rules.d/70-persistent-net.rules # This file was automatically generated by the /lib/udev/write_net_rules # program run by the persistent-net-generator.rules rules file. # # You can modify it, as long as you keep each rule on a single line. # PCI device 0x10ec:0x8139 (8139too) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:00:e2:88:3d:13", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0" # USB device 0x0bda:0x8150 (rtl8150) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:10:60:dd:99:5c", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1" # USB device 0x0bda:0x8150 (rtl8150) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:10:60:db:04:24", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth2"
→MACアドレスとNAMEが想定通りであるかを確認します。
※想定通りで無い場合、NAMEを修正して再起動をかければOKだという情報が様々なサイトで紹介されていましたが私の環境では駄目でした。
代わりに、一度上記のファイルを削除してリブートすると回復しました。
close:~# cp /etc/udev/rules.d/70-persistent-net.rules /etc/udev/rules.d/70-persistent-net.rules.original close:~# rm /etc/udev/rules.d/70-persistent-net.rules close:~# shutdown -r now
bonding設定
組み込むIFが正常に認識されましたら、bondingの設定に移ります。
・結合ドライバモジュールのロード
close:~# vi /etc/modprobe.d/arch/i386 ... alias bond0 bonding close:~# modprobe bond0 close:~# vi /etc/modules ... bonding
→本来、/etc/modprobe.d/arch/i386にbondingのオプションを記載していましたが、以下の通り、/etc/network/interface中に記載するように変わったみたいです。(私の環境では/etc/modprobe.d/arch/i386に記載してもオプションは認識されましたが…)
close:~# cat /usr/share/doc/ifenslave-2.6/README.Debian ifenslave for Debian ---------------------- The ifenslave program distributed with the Linux kernel sources has not always been up to date, and several modified versions have been floating around. The latest kernels now contain an updated version though. The Debian package ifenslave will now use the version found in the kernel, without any patches. You can also enslave interfaces using Debian's /etc/network/interfaces file, like this: iface bond0 inet static address 192.168.48.157 netmask 255.255.252.0 broadcast 192.168.48.255 gateway 192.168.48.1 slaves eth0 eth1 The "slaves" option can take a list of network interfaces, the keyword "none" (with obvious results) and the keyword "all" (which selects all interfaces with "eth" in their name). Additionally you can set bonding options by adding them to the interface section: bond_mode active-backup bond_primary eth0 This would run the bonding device in active backup mode with eth0 as primary. Supported options are bond_mode, bond_miimon, bond_primary, bond_updelay, bond_downdelay, bond_arp_ip_target, bond_arp_interval, bond_xmit_hash_policy and bond_lacp_rate. Guus Sliepen, Fri, 30 Sep 2005 14:33:06 +0200
→上記の通り、設定してみます。
close:~# vi /etc/network/interfaces # This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback allow-hotplug bond0 auto bond0 iface bond0 inet static address 192.168.0.3 netmask 255.255.255.0 network 192.168.0.0 broadcast 192.168.0.255 gateway 192.168.0.1 slaves eth1 eth2 bond_mode active-backup bond_miimon 100
→再起動をかけます。
close:~# shutdown -r now
起動後、状態を確認します。
close:~# ifconfig -a bond0 Link encap:イーサネット ハードウェアアドレス 00:10:60:dd:99:5c inetアドレス:192.168.0.3 ブロードキャスト:192.168.0.255 マスク:255.255.255.0 inet6アドレス: fe80::210:60ff:fedd:995c/64 範囲:リンク UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 メトリック:1 RXパケット:1497 エラー:0 損失:0 オーバラン:0 フレーム:0 TXパケット:205 エラー:0 損失:0 オーバラン:0 キャリア:0 衝突(Collisions):0 TXキュー長:0 RXバイト:237984 (232.4 KiB) TXバイト:20591 (20.1 KiB) eth0 Link encap:イーサネット ハードウェアアドレス 00:00:e2:88:3d:13 BROADCAST MULTICAST MTU:1500 メトリック:1 RXパケット:0 エラー:0 損失:0 オーバラン:0 フレーム:0 TXパケット:0 エラー:0 損失:0 オーバラン:0 キャリア:0 衝突(Collisions):0 TXキュー長:1000 RXバイト:0 (0.0 B) TXバイト:0 (0.0 B) 割り込み:18 ベースアドレス:0xe800 eth1 Link encap:イーサネット ハードウェアアドレス 00:10:60:dd:99:5c UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 メトリック:1 RXパケット:859 エラー:0 損失:0 オーバラン:0 フレーム:0 TXパケット:205 エラー:0 損失:0 オーバラン:0 キャリア:0 衝突(Collisions):0 TXキュー長:1000 RXバイト:125897 (122.9 KiB) TXバイト:20591 (20.1 KiB) eth2 Link encap:イーサネット ハードウェアアドレス 00:10:60:dd:99:5c UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 メトリック:1 RXパケット:638 エラー:0 損失:0 オーバラン:0 フレーム:0 TXパケット:0 エラー:0 損失:0 オーバラン:0 キャリア:0 衝突(Collisions):0 TXキュー長:1000 RXバイト:112087 (109.4 KiB) TXバイト:0 (0.0 B) lo Link encap:ローカルループバック inetアドレス:127.0.0.1 マスク:255.0.0.0 inet6アドレス: ::1/128 範囲:ホスト UP LOOPBACK RUNNING MTU:16436 メトリック:1 RXパケット:12 エラー:0 損失:0 オーバラン:0 フレーム:0 TXパケット:12 エラー:0 損失:0 オーバラン:0 キャリア:0 衝突(Collisions):0 TXキュー長:0 RXバイト:840 (840.0 B) TXバイト:840 (840.0 B)
→bond0、Eth1、2ともにStatus: upでありMACアドレスが「00:10:60:dd:99:5c」になっていることを確認します。
close:~# cat /proc/net/bonding/bond0 Ethernet Channel Bonding Driver: v3.2.5 (March 21, 2008) Bonding Mode: fault-tolerance (active-backup) Primary Slave: None Currently Active Slave: eth1 MII Status: up MII Polling Interval (ms): 100 Up Delay (ms): 0 Down Delay (ms): 0 Slave Interface: eth1 MII Status: up Link Failure Count: 0 Permanent HW addr: 00:10:60:dd:99:5c Slave Interface: eth2 MII Status: up Link Failure Count: 0 Permanent HW addr: 00:10:60:dd:99:5c
→active-backupであり、MII Polling Intervalが100msであること、Eth1,2ともにStatus: upでありMACアドレスが「00:10:60:dd:99:5c」になっていることを確認します。
close:~# vi /etc/udev/rules.d/70-persistent-net.rules # This file was automatically generated by the /lib/udev/write_net_rules # program run by the persistent-net-generator.rules rules file. # # You can modify it, as long as you keep each rule on a single line. # PCI device 0x10ec:0x8139 (8139too) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:00:e2:88:3d:13", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0" # USB device 0x0bda:0x8150 (rtl8150) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:10:60:dd:99:5c", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1" # USB device 0x0bda:0x8150 (rtl8150) SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:10:60:dd:99:5c", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth2"
→Eth1、2ともに、MACアドレスが「00:10:60:dd:99:5c」になっていることを確認します。
・対向L2SWでも確認
c2940-ACT#show arp Protocol Address Age (min) Hardware Addr Type Interface Internet 192.168.0.3 14 0010.60dd.995c ARPA Vlan1
→MACアドレスが一つで認識されています。
・動作確認
ping www.yahoo.co.jp
→1本(ACT/SBYそれぞれ)抜いても応答に変化が無いことを確認
というわけで、一応動くには動いたのですが、/etc/init.d/networking restartするとサーバが固まってしまいました。
仕方なく強制再起動させて状態確認してみたところ、eth2が認識されなくなっていました。
何度か試してみたところ、以下のパターンでは問題なく復旧刺さることができました(ただし、起動時にエラーが出ていますが・・・)
1. /etc/network/interfacesの修正
close:~# vi /etc/network/interfaces # This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback allow-hotplug bond0 auto bond0 iface bond0 inet static address 192.168.0.3 netmask 255.255.255.0 network 192.168.0.0 broadcast 192.168.0.255 gateway 192.168.0.1 #slaves eth1 eth2 #bond_mode active-backup #bond_miimon 100 pre-up ifconfig bond0 up pre-up ifenslave bond0 eth1 eth2 pre-down ifenslave -d bond0 eth1 eth2 post-down ifconfig bond0 down
→bonding設定を削除し、末尾四行を追記
2. ドライバオプションを以前の形式で行う
close:~# vi /etc/modprobe.d/arch/i386 ... alias bond0 bonding options bonding mode=1 miimon=100
→末尾optionsの行を追記
3. rm /etc/udev/rules.d/70-persistent-net.rules
4. shutdown -r now
5. 正常性確認
close:~# cat /proc/net/bonding/bond0 Ethernet Channel Bonding Driver: v3.2.5 (March 21, 2008) Bonding Mode: fault-tolerance (active-backup) Primary Slave: None Currently Active Slave: eth1 MII Status: up MII Polling Interval (ms): 100 Up Delay (ms): 0 Down Delay (ms): 0 Slave Interface: eth1 MII Status: up Link Failure Count: 0 Permanent HW addr: 00:10:60:dd:99:5c Slave Interface: eth2 MII Status: up Link Failure Count: 0 Permanent HW addr: 00:10:60:dd:99:5c
→問題なし
close:~# /etc/init.d/networking restart Reconfiguring network interfaces...done.
→今度は問題無し
close:~# ping www.yahoo.co.jp PING www.ya.gl.yahoo.co.jp (124.83.147.212) 56(84) bytes of data. 64 bytes from f6.top.vip.ogk.yahoo.co.jp (124.83.147.212): icmp_seq=1 ttl=50 time=18.2 ms 64 bytes from f6.top.vip.ogk.yahoo.co.jp (124.83.147.212): icmp_seq=2 ttl=50 time=22.2 ms 64 bytes from f6.top.vip.ogk.yahoo.co.jp (124.83.147.212): icmp_seq=3 ttl=50 time=18.0 ms ^C --- www.ya.gl.yahoo.co.jp ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2007ms rtt min/avg/max/mdev = 18.077/19.548/22.284/1.936 ms
→問題なし
close:~# mii-tool SIOCGMIIPHY on 'eth0' failed: Invalid argument SIOCGMIIPHY on 'eth1' failed: Operation not supported SIOCGMIIPHY on 'eth2' failed: Operation not supported no MII interfaces found
→ここまでやってMIIをサポートしていないことが判明しました。
代わりにARPを使う方式に変えます。
close:~# vi /etc/modprobe.d/arch/i386 ... alias bond0 bonding options bonding mode=1 miimon=0 arp_interval=50000 arp_ip_target=192.168.0.1
rm /etc/udev/rules.d/70-persistent-net.rulesして再度、再起動します。
close:~# cat /proc/net/bonding/bond0 Ethernet Channel Bonding Driver: v3.2.5 (March 21, 2008) Bonding Mode: fault-tolerance (active-backup) Primary Slave: None Currently Active Slave: eth1 MII Status: up MII Polling Interval (ms): 0 Up Delay (ms): 0 Down Delay (ms): 0 ARP Polling Interval (ms): 50000 ARP IP target/s (n.n.n.n form): 192.168.0.1 Slave Interface: eth1 MII Status: up Link Failure Count: 0 Permanent HW addr: 00:10:60:dd:99:5c Slave Interface: eth2 MII Status: up Link Failure Count: 0 Permanent HW addr: 00:10:60:dd:99:5c
→ARP関連の出力が新たに表示されました。パラメータも指定どおりになっています。
キャプチャ結果でもARPが5秒間隔で飛んでいるのを確認できました。
うまくいったと思ったのも束の間、IFを片方抜くと、10発OK、10発NGという不安定な状態になり、しばらくしてBOND0ごとDOWNするという事象が発生しました。
起動時時のログにBUGらしきエラーが出ているのが原因でしょうか…
close:~# cat /var/log/dmesg [ 22.255032] rtl8150: eth1: allmulti set [ 22.255107] BUG: scheduling while atomic: ifenslave/1910/0x00000100 [ 22.255168] Pid: 1910, comm: ifenslave Not tainted 2.6.26-2-686 #1 [ 22.255193] [] schedule+0x70/0x66f [ 22.255217] [ ] lock_timer_base+0x19/0x35 [ 22.255231] [ ] __mod_timer+0x99/0xa3 [ 22.255243] [ ] schedule_timeout+0x6b/0x86 ... [ 22.257996] BUG: scheduling while atomic: ifenslave/1910/0x00000100 [ 22.257996] Pid: 1910, comm: ifenslave Not tainted 2.6.26-2-686 #1 ... [ 22.260006] bonding: bond0: making interface eth1 the new active one. [ 22.260006] rtl8150: eth1: allmulti set [ 22.260006] bonding: bond0: first active interface up! [ 22.260006] bonding: bond0: enslaving eth1 as an active interface with an up link. [ 22.276026] rtl8150: eth2: allmulti set [ 22.276026] BUG: scheduling while atomic: ifenslave/1910/0x00000100 [ 22.276026] Pid: 1910, comm: ifenslave Not tainted 2.6.26-2-686 #1 [ 22.276026] [ ] schedule+0x70/0x66f [ 22.276026] [ ] lock_timer_base+0x19/0x35 ... [ 22.294120] BUG: scheduling while atomic: ifenslave/1910/0x00000100 [ 22.294178] Pid: 1910, comm: ifenslave Not tainted 2.6.26-2-686 #1 ... [ 22.297085] bonding: bond0: enslaving eth2 as a backup interface with an up link.
→何とかしたいのですがお手上げです。
一応、オプション設定をdebian流儀に戻しても同じ問題が起きるか、再度確認してみます。
close:~# vi /etc/network/interfaces # This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback allow-hotplug bond0 auto bond0 iface bond0 inet static address 192.168.0.3 netmask 255.255.255.0 network 192.168.0.0 broadcast 192.168.0.255 gateway 192.168.0.1 slaves eth1 eth2 bond_mode active-backup bond_miimon 0 bond_primary eth1 bond_arp_interval 5000 bond_arp_ip_target 192.168.0.1 #bond_updelay 10000 #pre-up ifconfig bond0 up #pre-up ifenslave bond0 eth1 eth2 #pre-down ifenslave -d bond0 eth1 eth2 #post-down ifconfig bond0 down
close:~# vi /etc/modprobe.d/arch/i386 ... alias bond0 bonding #options bonding mode=1 miimon=100 #options bonding mode=1 miimon=0 arp_interval=50000 arp_ip_target=192.168.0.1 close:~# /etc/init.d/networking stop Deconfiguring network interfaces...done. close:~# /etc/init.d/networking start Configuring network interfaces.../etc/network/if-pre-up.d/ifenslave: line 58: echo: write error: Invalid argument done.
エラーが出るため、こちらのサイトを参照にして
vi /etc/network/if-post-down.d/ifenslave echo '-192.168.0.1' > /sys/class/net/bond0/bonding/arp_ip_target
末尾に上記を追記して再起動
close:~# /etc/init.d/networking stop Deconfiguring network interfaces...done. close:~# /etc/init.d/networking start Configuring network interfaces...done.
→うまく起動しましたが、しばらくしてBOND0ごとDOWNするという事象は改善されず、再起動してもだめでした。