Jump to content 日本-日本語
製品  >  ソフトウェア  >  Linux

異なる複数のNICドライバで bondingドライバを利用する例

Open Source & Linux

導入事例

product

ハードウェア
ソフトウェア
サービス & サポート

buy now?

HPE OPEN SERVICES
保守サービス
教育プログラム

support

OS対応表
ProLiant
Workstation
システム構成図
技術文書
FAQ
ディストリ対応表
サポート & ドライバ
リンク
SDR - 設定方法
FreeBSD
サイトマップ
HPE & Red Hat情報ポータル HPEとRed Hatが実現するオープンなイノベーション
BSD 動作確認レポート等を掲載
コンテンツに進む
revised 10-JUN-05
 本ページに記載してある内容は限られた評価環境に於ける検証結果に基づいたものです。本ページの情報を利用する前に予めサイト内リンク技術情報サイト内リンク保証について、ディストリビュータが提供する WEBサイト等をご覧ください。

本ページの対処が必要な理由

 下記の条件で bondingデバイスを利用した場合、NICドライバのロード順序が入れ替わる、または、一部のインターフェイスが無視されるといった問題が発生します。
  • RHEL3 および RHEL21(initscripts-6.47.5-1以上)
  • Network interface(eth0, eth1...) が3種類のNICドライバ(e100,e1000,bcm5700)で構成されている
  • slave device が連続していない(例: slave deviceがeth1, eth4等)
 これは initscriptsパッケージに含まれるネットワーク起動スクリプト処理が原因で発生するため、NICおよび bondingドライバの問題ではありません。

 なお、RHEL21(initscripts-6.47.5-1未満)では、この問題が発生することはありません。

動作確認環境

  • ProLiant ML370 G2
+
  • NC3123
  • NC7170
  • NC7770
  • NC7771
  • Red Hat EL 2.1 AS QU3
  • Red Hat EL 3 AS QU1
+
  • bonding v1.0.4g
  • e100.o v2.3.27a
  • e1000.o v5.2.16a
  • bcm5700.o v7.1.9c
他のディストリビューションを利用した同等環境でも同様に発生すると思われます

構成例

 Proliant ML370 G2へNICを5つ追加し、slaveデバイスを2つ持つ bondingデバイスを2つ作成します。残りのインターフェイスは非bondingデバイスとします。
構成例
bonding構成
No. alias名 Network IP address bonding
NIC1 eth0 192.168.2.0/24 192.168.2.1 無し
NIC2 eth1 192.168.1.0/24 192.168.1.101 bond0のslave (arp監視)
NIC3 eth2 192.168.3.0/24 192.168.3.1 無し
NIC4 eth3 192.168.4.0/24 192.168.4.101 bond1のslave (MII監視)
NIC5 eth4 192.168.1.0/24 192.168.1.101 bond0のslave (arp監視)
NIC6 eth5 192.168.4.0/24 192.168.4.101 bond1のslave (MII監視)
 ハードウェア構成は、下表の通りです。
No. NIC card chip NIC driver
NIC1 ML370 G2内蔵NIC 82559 e100
NIC2 追加NIC (NC3123) 82559 e100
NIC3 追加NIC (NC7170) 82546EB e1000
NIC4 追加NIC (NC7170) 82546EB e1000
NIC5 追加NIC (NC7770) bcm5701 bcm5700
NIC6 追加NIC (NC7771) bcm5703 bcm5700

設定ファイル例

 /etc/sysconfig/network-scripts下のネットワークインターフェイス設定ファイルです。
# cat ifcfg-bond0
 DEVICE=bond0
 IPADDR=192.168.1.101
 NETMASK=255.255.255.0
 NETWORK=192.168.1.0
 BROADCAST=192.168.1.255
 ONBOOT=yes
 BOOTPROTO=none
 USERCTL=no
 GATEWAY=192.168.1.254
 MACADDR=00:01:02:03:04:05

# cat ifcfg-bond1
 DEVICE=bond1
 IPADDR=192.168.4.101
 NETMASK=255.255.255.0
 NETWORK=192.168.4.0
 BROADCAST=192.168.4.255
 ONBOOT=yes
 BOOTPROTO=none
 USERCTL=no
 GATEWAY=192.168.4.254
 MACADDR=88:88:88:88:88:88

# cat ifcfg-eth0
 DEVICE=eth0
 BOOTPROTO=static
 ONBOOT=yes
 TYPE=Ethernet
 BROADCAST=192.168.2.255
 IPADDR=192.168.2.1
 NETMASK=255.255.255.0
 NETWORK=192.168.2.0

# cat ifcfg-eth1
 DEVICE=eth1
 USERCTL=no
 ONBOOT=yes
 MASTER=bond0
 SLAVE=yes
 BOOTPROTO=none

 
# cat ifcfg-eth2
 DEVICE=eth2
 BOOTPROTO=static
 ONBOOT=yes
 TYPE=Ethernet
 BROADCAST=192.168.3.255
 IPADDR=192.168.3.1
 NETMASK=255.255.255.0
 NETWORK=192.168.3.0

# cat ifcfg-eth3
 DEVICE=eth3
 USERCTL=no
 ONBOOT=yes
 MASTER=bond1
 SLAVE=yes
 BOOTPROTO=none

# cat ifcfg-eth4
 DEVICE=eth4
 USERCTL=no
 ONBOOT=yes
 MASTER=bond0
 SLAVE=yes
 BOOTPROTO=none

# cat ifcfg-eth5
 DEVICE=eth5
 USERCTL=no
 ONBOOT=yes
 MASTER=bond1
 SLAVE=yes
 BOOTPROTO=none


 /etc/modules.confの設定です。bond0に arp監視、bond1にMII監視を指定しています。bond1には“-o bonding1”とロードされるモジュール名を指定していますが、ユニークな名前であれば、どのような名前でもかまいません。
# cat /etc/modules.conf
 alias bond0 bonding
 alias bond1 bonding
 alias eth0 e100
 alias eth1 e100
 alias eth2 e1000
 alias eth3 e1000
 alias eth4 bcm5700
 alias eth5 bcm5700
 alias scsi_hostadapter aic7xxx
 alias scsi_hostadapter1 cciss
 alias scsi_hostadapter2 cciss
 alias usb-controller usb-ohci
 # arp_ip_taget は、bonding driver が arp request を送信するターゲットを指定します
 options bond0 arp_ip_target=192.168.1.99 arp_interval=200 mode=1
 options bond1 -o bonding1 miimon=200 mode=1

 既存のネットワーク起動スクリプトでは期待通りのネットワーク設定にならないので、本構成例に特化した専用のネットワーク設定スクリプトをデフォルトランレベルのディレクトリへ作成(または/etc/init.dからリンク)します。なお、このスクリプトは S10network実行直後にネットワークを再設定するよう配置します。
#!/bin/sh

# 既存のネットワーク起動スクリプトでは期待するネットワーク設定にならないので全ての
# インターフェイスをダウンし、ネットワーク関連のモジュールをアンロードします

# 全てのインターフェイスをダウンします
/sbin/service network stop

# 全てのモジュールをアンロードします
/sbin/rmmod e100
/sbin/rmmod e1000
/sbin/rmmod bcm5700
/sbin/rmmod bonding
/sbin/rmmod bonding1

# 正しいネットワーク設定になるように、再度設定しなおします

# 最初に bondingデバイスをアップします
/sbin/ifconfig bond0 192.168.1.101 netmask 255.255.255.0 hw ether 01:02:03:04:05:06 up
/sbin/ifconfig bond1 192.168.4.101 netmask 255.255.255.0 hw ether 88:88:88:88:88:88 up

# /etc/module.confの ailasで指定した順番どおりにモジュールがロードされるように
# インターフェイスをアップします(詳細は【モジュールのロード順序】を参照して下さい)

# e100モジュールがロードされ、eth0および eth1が割り当てられます
/sbin/ifconfig eth0 up

# e1000モジュールがロードされ、eth2および eth3が割り当てられます
/sbin/ifconfig eth2 up

# bond0へ eth1を enslave します
/sbin/ifenslave bond0 eth1

# bond1へ eth3を enslave します。
# bcm5700モジュールがロードされ、eth4およびeth5が割り当てられます
/sbin/ifenslave bond1 eth3

# bond0へ eth4を enslave します
/sbin/ifenslave bond0 eth4

# bond1へ eth5を enslave します
/sbin/ifenslave bond1 eth5

# default routeは必要に応じて設定します。
#/sbin/route add default netmask 0.0.0.0 gw 192.168.1.254 dev bond0


【モジュールのロード順序】
 インターフェイスをアップ(および enslave)する順序によっては、モジュールのロードされる順序が変わってしまいます。

 本例の場合、
eth0 e100
eth1 e100
eth2 e1000
eth3 e1000
eth4 bcm5700
eth5 bcm5700
 となることを期待していますが、以下のようにスクリプトを記述すると、
/sbin/ifconfig bond0 192.168.1.101 netmask 255.255.255.0 hw ether 01:02:03:04:05:06 up
/sbin/ifconfig bond1 192.168.4.101 netmask 255.255.255.0 hw ether 88:88:88:88:88:88 up
/sbin/ifconfig eth0 up
/sbin/ifenslave bond0 eth1 eth4
/sbin/ifconfig eth2 up
/sbin/ifenslave bond1 eth3 eth5
 “/sbin/ifenslave bond0 eth1 eth4“が eth4を enslaveする時に eth4をアップするので、カーネルはe1000モジュールをロードする前に bcm5700モジュールをロードします。結果的に、eth2, eth3へbcm5700、eth4, eth5へ e1000モジュールが割り当てられ、期待したモジュールのロード順と一致しなくなってしまいます。
eth0 e100
eth1 e100
eth2 bcm5700
eth3 bcm5700
eth4 e1000
eth5 e1000
 インターフェイスへ割り当てられたドライバを確認するには ethtoolコマンドを使用します。
# ethtool -i eth2
driver: bcm5700
version: 7.1.9c
firmware-version:
bus-info: 01:05.0

設定確認

インターフェイスの確認
 ifconfigコマンドを使用し、全てのインターフェイスに IPアドレス、イーサネットアドレス、ネットマスクが設定されていること、ダウンしているインターフェイスがないことを確認します。
 bond0 Link encap:Ethernet HWaddr 00:01:02:03:04:05
inet addr:192.168.1.101 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1
RX packets:1537 errors:0 dropped:0 overruns:0 frame:0
TX packets:772 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:84926 (82.9 Kb) TX bytes:32970 (32.1 Kb)
 bond1 Link encap:Ethernet HWaddr 88:88:88:88:88:88
inet addr:192.168.4.101 Bcast:192.168.4.255 Mask:255.255.255.0
UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1
RX packets:1526 errors:0 dropped:0 overruns:0 frame:0
TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:97664 (95.3 Kb) TX bytes:256 (256.0 b)
 eth0 Link encap:Ethernet HWaddr 00:02:A5:AB:08:6D
inet addr:192.168.2.1 Bcast:192.168.2.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:777 errors:0 dropped:0 overruns:0 frame:0
TX packets:5 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:36340 (35.4 Kb) TX bytes:210 (210.0 b)
Interrupt:10 Base address:0x2400 Memory:f7bb0000-f7bb0038
 eth1 Link encap:Ethernet HWaddr 00:01:02:03:04:05
inet addr:192.168.1.101 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:780 errors:0 dropped:0 overruns:0 frame:0
TX packets:772 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:36478 (35.6 Kb) TX bytes:32970 (32.1 Kb)
Interrupt:15 Base address:0x3800 Memory:f7ec0000-f7ec0038
 eth2 Link encap:Ethernet HWaddr 00:02:A5:48:45:92
inet addr:192.168.3.1 Bcast:192.168.3.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:773 errors:0 dropped:0 overruns:0 frame:0
TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:49472 (48.3 Kb) TX bytes:256 (256.0 b)
Interrupt:15 Base address:0x3840 Memory:f7ce0000-f7d00000
 eth3 Link encap:Ethernet HWaddr 88:88:88:88:88:88
inet addr:192.168.4.101 Bcast:192.168.4.255 Mask:255.255.255.0
UP BROADCAST RUNNING NOARP SLAVE MULTICAST MTU:1500 Metric:1
RX packets:773 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:49472 (48.3 Kb) TX bytes:0 (0.0 b)
Interrupt:15 Base address:0x3880 Memory:f7c60000-f7c80000
 eth4 Link encap:Ethernet HWaddr 00:01:02:03:04:05
inet addr:192.168.1.101 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING NOARP SLAVE MULTICAST MTU:1500 Metric:1
RX packets:757 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:48448 (47.3 Kb) TX bytes:0 (0.0 b)
Interrupt:15 Memory:f7ed0000-f7ee0000
 eth5 Link encap:Ethernet HWaddr 88:88:88:88:88:88
inet addr:192.168.4.101 Bcast:192.168.4.255 Mask:255.255.255.0
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:753 errors:0 dropped:0 overruns:0 frame:0
TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:48192 (47.0 Kb) TX bytes:256 (256.0 b)
Interrupt:15 Memory:f7ff0000-f8000000
 lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:546 errors:0 dropped:0 overruns:0 frame:0
TX packets:546 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:41154 (40.1 Kb) TX bytes:41154 (40.1 Kb)

bondingデバイスの確認
 /proc/net/bond?/info で bondingデバイスの状態(モードが正しいか等)を確認します。
# cat /proc/net/bond0/info
 Bonding Mode: fault-tolerance (active- backup)
 Currently Active Slave: eth1
 MII Status: up
 MII Polling Interval (ms): 0
 Up Delay (ms): 0
 Down Delay (ms): 0
 Multicast Mode: all slaves

 Slave Interface: eth4
 MII Status: up
 Link Failure Count: 1

 Slave Interface: eth1
 MII Status: up
 Link Failure Count: 0

 
# cat /proc/net/bond1/info
 Bonding Mode: fault-tolerance (active- backup)
 Currently Active Slave: eth5
 MII Status: up
 MII Polling Interval (ms): 200
 Up Delay (ms): 0
 Down Delay (ms): 0
 Multicast Mode: all slaves

 Slave Interface: eth5
 MII Status: up
 Link Failure Count: 0

 Slave Interface: eth3
 MII Status: up
 Link Failure Count: 0


SNMP MIBオブジェクトの確認
 snmpwalkコマンドを使用し、インターフェイスのインデックス番号とIPアドレスのインデックス値が同じであることを確認します。以下は RedHat EL2.1上で snmpwalkを実行したときの結果です。RedHat EL3と net-snmpの組み合わせでは、問題が発生します。詳細は【既知の問題】を参照してください。
# snmpwalk -v 1 -c public 192.168.1.101 interfaces

interfaces.ifTable.ifEntry.ifDescr.1 = lo
interfaces.ifTable.ifEntry.ifDescr.2 = bond1
interfaces.ifTable.ifEntry.ifDescr.3 = bond0
interfaces.ifTable.ifEntry.ifDescr.4 = eth0
interfaces.ifTable.ifEntry.ifDescr.5 = eth1
interfaces.ifTable.ifEntry.ifDescr.6 = eth2
interfaces.ifTable.ifEntry.ifDescr.7 = eth3
interfaces.ifTable.ifEntry.ifDescr.8 = eth4
interfaces.ifTable.ifEntry.ifDescr.9 = eth5

# snmpwalk -v 1 -c public 192.168.1.101 ip

ip.ipAddrTable.ipAddrEntry.ipAdEntIfIndex.127.0.0.1 = 1
ip.ipAddrTable.ipAddrEntry.ipAdEntIfIndex.192.168.1.101 = 3
ip.ipAddrTable.ipAddrEntry.ipAdEntIfIndex.192.168.2.1 = 4
ip.ipAddrTable.ipAddrEntry.ipAdEntIfIndex.192.168.3.1 = 6
ip.ipAddrTable.ipAddrEntry.ipAdEntIfIndex.192.168.4.101 = 2

#

【既知の問題】
 net-snmp(5.0.8-11)がインストールされている RedHat EL3上で MIBオブジェクトを取得すると IP-MIB::ipAdEntIfIndex へ誤った値が返されます。しかし、net-snmpを弊社提供の ucd-snmp-4.2.5-79-rhel3.i386.rpm に入れ替えた場合、この問題は発生しません。よって net-snmpの問題であると考えられます。
# snmpwalk -v 1 -c public 192.168.1.101 interfaces

IF-MIB::ifDescr.1 = STRING: lo
IF-MIB::ifDescr.2 = STRING: bond0
IF-MIB::ifDescr.3 = STRING: bond1
IF-MIB::ifDescr.4 = STRING: eth0
IF-MIB::ifDescr.5 = STRING: eth1
IF-MIB::ifDescr.6 = STRING: eth2
IF-MIB::ifDescr.7 = STRING: eth3
IF-MIB::ifDescr.8 = STRING: eth4
IF-MIB::ifDescr.9 = STRING: eth5

# snmpwalk -v 1 -c public 192.168.1.101 ip

IP-MIB::ipAdEntIfIndex.127.0.0.1 = INTEGER: 1
IP-MIB::ipAdEntIfIndex.192.168.1.101 = INTEGER: 14 <-- 正しい値は2
IP-MIB::ipAdEntIfIndex.192.168.2.1 = INTEGER: 16   <-- 正しい値は4
IP-MIB::ipAdEntIfIndex.192.168.3.1 = INTEGER: 18   <-- 正しい値は6
IP-MIB::ipAdEntIfIndex.192.168.4.101 = INTEGER: 15 <-- 正しい値は3

#
 この問題は、RedHat EL3(net-snmp-cmaX-5.1-83)およびMiracle Linux V3.0(net-snmp-5.1-2.1)でも確認されております。
印刷用画面へ印刷用画面へ
プライバシー ご利用条件・免責事項