2011年11月18日 星期五

Linux 網路結合(network bonding)技術與實務

何謂網路結合(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的技術須要由網卡硬體廠商支援驅動程式與工具來實現。