何謂網路結合(Network Bonding)
Network Bonding (有時又稱為Network teaming、Link aggregation 、trunking )是一種將將多個網路連線、網卡或連線埠整合成單一邏輯連線的技術,目的在於提升網路流通量(throughput)、負載平衡(load balance)與容錯(fault tolerance)能力。
Linux Network bonding
Linux 核心2.x版後,提供了bonding模組可將多個網卡結合成為一個單一結合的網卡功能。
Linux bonding 模組可以支援七種模式,有些模式只支援負載平衡能力,有些只支援容錯能力,有些模式可支援二者,此外,有些模式還需要交換器支援,七種模式說明如下:
模式 | 名稱 | 運作特性 |
0 | balance-rr | l 負載平衡模式, 採用round robin方式,依序由第一個salve網卡至最後一個salve網卡來傳送封包 l 亦具容錯功能, 其中一張 Slave 網卡失效仍可持續運作 |
1 | active-backup | l 同一時間只有單一 Slave 網卡是啟動運作 l 目前啟動的Slave 網卡一旦失效立即自動啟用次一順位的 Slave 網卡 l 不需要 switch 支援 |
2 | balance-xor | 本模式具負載平衡與容錯功能,對每個目的網卡卡號只使用相同slave網卡與其傳送流量 |
3 | broadcast | l 所有 Slave 網卡均會收送網路封包 l 本模式主要提供容錯能力,任一張 Slave 網卡失效仍可持續運作 |
4 | 802.3ad | l 802.3ad為正式的交換器連接埠的連線聚合技術,需要交換器本身支援802.3ad,而您的網卡驅動程式必需支援ethtool (利用ethtool eth0如果可看到網卡規格資料即是) |
5 | balance-tlb | l 只有輸出流量使用繫結而具有自動負載平衡 l 流量輸入則由目前啟動的 Slave 網卡負責 l 具容錯功能, 其中一張 Slave 網卡失效仍可持續運作 l 無需交換器支援及設定 |
6 | balance-alb | l 輸入與輸出流量皆具有自動負載平衡功能 l 亦具容錯功能, 其中一張 Slave 網卡失效仍可持續運作 l Slave 網卡驅動程式需需支援變更網卡卡號功能和支援ethtool l 無需交換器支援及設定 |
實作步驟
底下使用CentOS Linux 6實作network bonding:
| 步驟 | 實作內容 |
1 | 檢查網卡是否支援bonding -- mii-tool或 ethtool ethN | [root@linxsrv ~]# mii-tool eth0: negotiated 100baseTx-FD, link ok eth1: negotiated 100baseTx-FD, link ok [root@linxsrv ~]# ethtool eth0 Settings for eth0: Supported ports: [ TP ] Supported link modes: 10baseT/Half ........... Link detected: yes |
2 | 新增結合網卡(bond0)介面及內容 | 建立並新增結合網卡檔案:/etc/sysconfig/network-scripts/ifcfg-bond0 ================================ DEVICE=bond0 USERCTL=no ONBOOT=yes BOOTPROTO=static IPADDR=192.168.2.100 NETMASK=255.255.255.0 NETWORK=192.168.2.0 BROADCAST=192.168.2.255 BONDING_OPTS="miimon=100 mode=6"
|
3 | 修改第一個網卡內容 | /etc/sysconfig/network-scripts/ifcfg-eth0 (修改內容如下) =============================== DEVICE=eth0 USERCTL=no ONBOOT=yes BOOTPROTO=none MASTER=bond0 SLAVE=yes
|
4 | 修改第二個網卡內容 | /etc/sysconfig/network-scripts/ifcfg-eth1 (修改內容如下) ================================== DEVICE=eth1 USERCTL=no ONBOOT=yes BOOTPROTO=none MASTER=bond0 SLAVE=yes |
5 | 設定開機時啟動網卡結合模組 | 新增下列檔案 /etc/modprobe.d/bonding.conf ========================== alias bond0 bonding |
6 | 重新啟動網路服務並測試 | # service network restart # ifconfig # cat /proc/net/bonding/bond0 若有問題請檢查bonding模組是有已載入 # lsmod | grep -i bond |
[root@linxsrv ~]# ifconfig bond0 Link encap:Ethernet HWaddr 00:0C:29:81:26:98 inet addr:192.168.2.199 Bcast:192.168.2.255 Mask:255.255.255.0 inet6 addr: fe80::20c:29ff:fe81:2698/64 Scope:Link UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1 RX packets:9560 errors:0 dropped:0 overruns:0 frame:0 TX packets:94054 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:1603721 (1.5 MiB) TX bytes:5648217 (5.3 MiB)
eth0 Link encap:Ethernet HWaddr 00:0C:29:81:26:98 UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1 RX packets:4917 errors:0 dropped:0 overruns:0 frame:0 TX packets:46995 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:813992 (794.9 KiB) TX bytes:2826809 (2.6 MiB)
eth1 Link encap:Ethernet HWaddr 00:0C:29:81:26:A2 UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1 RX packets:4644 errors:0 dropped:0 overruns:0 frame:0 TX packets:47060 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:789795 (771.2 KiB) TX bytes:2821718 (2.6 MiB) |
後語
Linux透過核心的 Bonding模組輕鬆的支援此種將多個網卡繫結在一起以便提供更高流通量、負載平衡或容錯能力,故很多人會詢問微軟的Windows作業系統是否也支援Network bonding,答案是微軟作業系統本身並不支援Network teaming ,若從軟官方論壇內眾多關於network teaming的答覆中可知,這種單純將網卡結合在一起的Network Teaming技術被微軟認為並非必要或很有用的技術,因為若說要提升網路流通量,它解決不了常見的網段擁塞問題,若說負載平衡,也不過是單機網卡間的負載平衡,假若主機效能不佳的瓶頸在於CPU、記憶體或磁碟I/O或混合問題,使用Network teaming根本無法解決問題,至於容錯能力而言,試問一個知名廠商的網卡平均故障率會有多高? 所以微軟工程與設計團隊始終認為Network teaming技術的有用性並不高,自然就無需支援。況且在Windows Server上若要實現負載平衡或容錯能力,使用微軟的負載平衡叢集和容錯移轉叢集功能可獲得更好的效果 (不過複雜許多)。
不過若您基於任何理由仍然想要在Windows平台實現Network teaming,那也沒有問題,只需要購買二張有支援teaming功能的相同廠商網卡,然後使用廠商所提供的工具程式來繫結多個網卡即可。
總之,微軟Windows 平台上若要使用Network teaming的技術須要由網卡硬體廠商支援驅動程式與工具來實現。