Linux雙網卡綁定實現就是使用兩塊網卡虛擬成為一塊網卡,這個聚合起來的設備看起來是一個單獨的以太網接口設備,通俗點講就是兩塊網卡具有相同的IP地址而並行鏈接聚合成一個邏輯鏈路工作。其實這項 技術在Sun和Cisco中早已存在,被稱為Trunking和Etherchannel技術,在Linux的2.4.x的內核中也采用這這種技術,被稱為bonding。,什么是bonding需要從網卡的混雜(promisc)模式說起。我們知道,在正常情況下,網卡只接收目的硬件地址(MAC Address)是自身Mac的以太網幀,對於別的數據幀都濾掉,以減輕驅動程序的負擔。但是網卡也支持另外一種被稱為混雜promisc的模式,可以接收網絡上所有的幀,bonding也運行在這個模式下,而且修改了驅動程序中的mac地址,將兩塊網卡的Mac地址改成相同,可以接收特定mac的數據幀。然后把相應的數據幀傳送給bond驅動程序處理。
編輯 /etc/modules.conf 文件,加入如下一行內容,以使系統在啟動時加載bonding模塊,對外虛擬網絡接口設備為 bond0
說明:miimon是用來進行鏈路監測的。 比如:miimon=100,那么系統每100ms監測一次鏈路連接狀態,如果有一條線路不通就轉入另一條線路;mode的值表示工作模式,他共有0,1,2,3四種模式,常用的為0,1兩種。
mode=0表示load balancing (round-robin)為負載均衡方式,兩塊網卡都工作。
mode=1表示fault-tolerance (active-backup)提供冗余功能,工作方式是主備的工作方式,也就是說默認情況下只有一塊網卡工作,另一塊做備份.
BONDING_OPTS參數解釋
此參數用於指定網卡綁定時的屬性,以下是對常用參數進行的解釋:
miimon參數:指定網卡故障時的切換時間間隔以ms為單位。
primary參數:指定默認的主網卡設備。
mode參數:
0-輪詢模式,所綁定的網卡會針對訪問以輪詢算法進行平分。
1-高可用模式,運行時只使用一個網卡,其余網卡作為備份,在負載不超過單塊網卡帶寬或壓力時建議使用。
2-基於HASH算法的負載均衡模式,網卡的分流按照xmit_hash_policy的TCP協議層設置來進行HASH計算分流,使各種不同處理來源的訪問都盡量在同一個網卡上進行處理。
3-廣播模式,所有被綁定的網卡都將得到相同的數據,一般用於十分特殊的網絡需求,如需要對兩個互相沒有連接的交換機發送相同的數據。
4-802.3ab負載均衡模式,要求交換機也支持802.3ab模式,理論上服務器及交換機都支持此模式時,網卡帶寬最高可以翻倍(如從1Gbps翻到2Gbps)
5-適配器輸出負載均衡模式,輸出的數據會通過所有被綁定的網卡輸出,接收數據時則只選定其中一塊網卡。如果正在用於接收數據的網卡發生故障,則由其他網卡接管,要求所用的網卡及網卡驅動可通過ethtool命令得到speed信息。
6-適配器輸入/輸出負載均衡模式,在"模式5"的基礎上,在接收數據的同時實現負載均衡,除要求ethtool命令可得到speed信息外,還要求支持對網卡MAC地址的動態修改功能。
xmit_hash_policy參數(此參數對mode參數中的2、4模式有影響):
layer1-通過MAC地址進行HASH計算。
計算公式:(MACsrc⊕MACdest)% Nslave
layer3+4-通過TCP及UDP端口及其IP地址進行HASH計算。
計算公式:((portsrc⊕portdest)⊕(IPsrc⊕IPdest)) % Nslave
注意:
mode參數中的0、2、3、4模式要求交換機支持"ports group"功能並能進行相應的設置,例如在Cisco中要將所連接的端口設為"trunk group"。
選擇綁定模式的建議
如果系統流量不超過單個網卡的帶寬,請不要選擇使用mode 1之外的模式,因為負載均衡需要對流量進行計算,這對系統性能會有所損耗。
建議mode 5、mode 6只在交換機不支持"ports group"的情況下選用。
如果交換機及網卡都確認支持802.3ab,則實現負載均衡時盡量使用mode 4以提高系統性能