利用 Linux 中的 bonding 技術配置備援網絡
Linux 下的 bonding 技術,将多塊網卡接口通過綁定虛拟成為一塊網卡,在使用者看來這個聚合起來的裝置好像是一個單獨的以太網接口裝置,或者說就是多塊網卡具有相同的 IP 位址而并行連接配接聚合成一個邏輯鍊路工作。
Bonding 技術用于高可靠性,提供最大網絡可靠性的配置,通過在主機和其他裝置間的備援或備份裝置、鍊路或交換機,目标是提供最大的網絡連結可靠性(要求網絡一直可用)。
以每個節點上面有四個網卡接口 (eth10,eth11,eth12,eth13) 為例,它們可被虛拟成兩個綁定裝置:bond0 和 bond1。bond0 為外部網卡 , 被綁定的網卡接口(也稱為 slave 裝置)是 eth10 和 eth12;bond1 為内部網卡,被綁定的網卡接口是 eth11 和 eth13。其中 bond0 用于外部通信,bond1 用于節點之間通信。其網絡結構如圖所示:
圖 1. 網絡結構圖
網卡綁定 綁定配置
綁定裝置 bond0 和 bond1 分别對應配置資訊檔案 /proc/net/bonding/bond0 和 /proc/net/bonding/bond1。以 /proc/net/bonding/bond0 為例,其内容如下:
Ethernet Channel Bonding Driver: v3.0.1 (January 9, 2006)
Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eth10
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 200
Down Delay (ms): 200
Slave Interface: eth10
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:21:5e:09:61:06
Slave Interface: eth12
MII Status: up
Link Failure Count: 0
Permanent HW addr: 00:1a:64:e7:10:d6
其中,包含 bonding 裝置和 slave 裝置的配置資訊。Bonding Mode 是綁定的政策或模式,可用于優化可靠性的綁定模式有 fault-tolerance( 或者稱為 active-backup) 和 broadcast 模式,fault-tolerance 通常是推薦的模式,尤其是如果交換機間存在 ISL 并能一起很好的工作。如果一個交換機被配置為備份交換機 ( 比如,有更低的處理能力,更高的費用等等 ),則可以使用 primary 選項來保證期望的鍊路在它可用時總是用它。
Primary Slave 指定哪個 slave 成為主裝置 (primary device),取值為字元串,如 eth0,eth1 等。隻要指定的裝置可用,它将一直是激活的 slave。隻有在主裝置(primary device)斷線時才會切換裝置。這在希望某個 slave 裝置優先使用的情形下很有用,比如,某個 slave 裝置有更高的吞吐率。
Currently Active Slave 為目前被激活的 slave 裝置。bond0 裝置有兩個 slave 裝置:eth10 和 eth12。目前被激活的 slave 裝置是 eth10。
MII Status 為 MII 監控狀态。MII 監控通過監控本地網絡接口的載波狀态來實作監控鍊路狀态。可以通過 3 種方法之一來實作:通過依賴裝置驅動來維護載波狀态;通過查詢裝置的 MII 寄存器;或者通過給裝置發送 ethtool 查詢。
MII Polling Interval 指定 MII 鍊路監控頻率,這将決定驅動檢查每個 slave 鍊路狀态頻率,100 為初始參考值。
Up Delay 指定當發現一個鍊路恢複時,在激活該鍊路之前的等待時間。
Down Delay 指定一個時間,用于在發現鍊路故障後,等待一段時間然後禁止一個 slave 裝置。
網絡配置
網絡配置可以通過 ifconfig 指令檢視,Bonding 裝置會被标上 MASTER 标記,slave 裝置會被标上 SLAVE 标記。ifconfig 的輸出不包含哪個 slave 裝置關聯于哪個 Bonding 裝置的關系。
# /sbin/ifconfig
bond0 Link encap:Ethernet HWaddr 00:21:5E:09:61:06
inet addr:XXX.XXX.XXX.YYY Bcast:XXX.XXX.XXX.255 Mask:255.255.255.0
inet6 addr: fe80::221:5eff:fe09:6106/64 Scope:Link
UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1
RX packets:102250 errors:0 dropped:0 overruns:0 frame:0
TX packets:3083 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:29734912 (28.3 Mb) TX bytes:364297 (355.7 Kb)
bond1 Link encap:Ethernet HWaddr 00:21:5E:09:61:04
inet addr:XXX.XXX.XXX.YYY Bcast:XXX.XXX.XXX.255 Mask:255.255.248.0
inet6 addr: fe80::221:5eff:fe09:6104/64 Scope:Link
UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1
RX packets:438007 errors:0 dropped:0 overruns:0 frame:0
TX packets:193184 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:39536092 (37.7 Mb) TX bytes:16723783 (15.9 Mb)
eth10 Link encap:Ethernet HWaddr 00:21:5E:09:61:06
inet6 addr: fe80::221:5eff:fe09:6106/64 Scope:Link
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:51369 errors:0 dropped:0 overruns:0 frame:0
TX packets:3080 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:14893183 (14.2 Mb) TX bytes:364075 (355.5 Kb)
Interrupt:138 Memory:98000000-98012100
eth11 Link encap:Ethernet HWaddr 00:21:5E:09:61:04
inet6 addr: fe80::221:5eff:fe09:6104/64 Scope:Link
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:340168 errors:0 dropped:0 overruns:0 frame:0
TX packets:193180 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:33274394 (31.7 Mb) TX bytes:16723497 (15.9 Mb)
Interrupt:169 Memory:96000000-96012100
eth12 Link encap:Ethernet HWaddr 00:21:5E:09:61:06
inet6 addr: fe80::221:5eff:fe09:6106/64 Scope:Link
UP BROADCAST RUNNING NOARP SLAVE MULTICAST MTU:1500 Metric:1
RX packets:50881 errors:0 dropped:0 overruns:0 frame:0
TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:14841729 (14.1 Mb) TX bytes:222 (222.0 b)
Interrupt:146 Memory:94000000-94012100
eth13 Link encap:Ethernet HWaddr 00:21:5E:09:61:04
inet6 addr: fe80::221:5eff:fe09:6104/64 Scope:Link
UP BROADCAST RUNNING NOARP SLAVE MULTICAST MTU:1500 Metric:1
RX packets:97839 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:6261698 (5.9 Mb) TX bytes:286 (286.0 b)
Interrupt:177 Memory:92000000-92012100
可以看到 bond0 接口是 master(MASTER),而 eth10 和 eth12 是 slave(SLAVE),所有 bond0 的 slave 和 bond0 有着同樣的 MAC 位址 (00:21:5E:09:61:06)。Bond1 接口是 master(MASTER),而 eth11 和 eth13 是 slave(SLAVE),所有 bond1 的 slave 和 bond1 有着同樣的 MAC 位址 (00:21:5E:09:61:04)。