對服務器來說,將多個網卡綁定(鏈路聚合)是一個很常見的需求,Linux在比較早期的版本kernel裏就支持bonding這個功能,通過bonding可以將多個以太網口的網絡連接聚合起來,一方面可以提供更大的網絡帶寬,另一方面還可以提供更好的可靠性和端口冗餘保障。
Bonding的配置有7種模式(從bond0到bond6),分別提供不同的收發包方式和端口冗餘機制,對上聯交換機配置和網卡也有不同的要求,需要根據不同的應用場景來選擇使用。
常用的有三種:
mode=0:平衡負載模式,有自動備援,但需要”Switch”支援及設定。
mode=1:自動備援模式,其中一條線若斷線,其他線路將會自動備援。
mode=6:平衡負載模式,有自動備援,不必”Switch”支援及設定。
Bonding接口的故障切換機制有兩種,一種稱爲MII monitor,也就是隻監控端口的狀態,另一種是ARP monitor,也就是通過發送arp的方式來測試網絡連接狀態。MII monitor方式比較簡單,但是存在狀態檢測不準確的問題,比如對於光口網卡來說,如果收發的兩條光纖出現其中一條中斷的情況,對於收光正常,發光斷掉的網卡來說,就不能檢測到鏈路狀態的變化了。ARP monitor的方式則採用發送arp query看有沒有收到arp reply的方式來測試IP連通性,還可以配置多個Target來進行測試,相比MII monitor來說檢測結果更準確。
在rhel6/centos6中使用的是bonding技術雙網卡綁定技術,而在rhel7.3中使用了teaming技術,其實在rhel7.3中雙網卡綁定既能使用teaming也可以使用bonding,這裏推薦使用teaming技術,方便與查看和監控。
Teaming功能主要由kernel裏的team driver、用來作爲通訊接口的libteam lib和userspace的teamd 三部分組成,teaming也支持不同的工作模式,相比bonding 來說少了balance-xor和balance-alb這兩種模式的支持,其中的balance-xor完全可以通過lacp代替,另外一種balance-alb功能據說以後teaming也會支持。
broadcast (data is transmitted over all ports)
roundrobin (data is transmitted over all ports in turn)
activebackup (one port or link is used while others are kept as a backup)
loadbalance (with active Tx load balancing and BPF-based Tx port selectors)
lacp (implements the 802.3ad Link Aggregation Control Protocol)
實質上teaming的目的就是要把網卡綁定的功能從kernel裏搬出來,把這些功能放到userspace來解決,保持kernel的簡潔,讓它只做kernel應該做的事情。
在本文中介紹rhel7.3兩種最常見的雙網卡綁定模式:
(1) activebackup - 主備模式
一個網卡處於活動狀態,另一個處於備份狀態,所有流量都在主鏈路上處理,當活動網卡down掉時,啓用備份網卡。
(2) roundrobin - 輪詢模式
所有鏈路處於負載均衡狀態,這種模式的特點增加了帶寬,同時支持容錯能力。
下面以activebackup - 主備模式爲例來做下示例配置:
1、進入系統,查看服務器網卡配置情況。
如上圖所示,共有ens3及ens8兩塊網卡共4個端口。決定爲兩個網段分別配置雙網卡綁定,業務網綁定ens3f0和ens8f0兩個端口,私網綁定ens3f1和ens8f1兩個端口。
2、我們可以使用nmcli命令進行網卡綁定,具體命令如下:
配置業務網主接口team0,設置模式爲activebackup
nmcli con add type team con-name team0 ifname team0 config‘{“runner”: {“name”: ”activebackup”}}’
設置IP地址,子網掩碼,網關
nmcli con mod team0 ipv4.addresses 11.11.205.145/28ipv4.gateway 11.11.205.158 ipv4.method manual connectio.autoconnect yes
添加綁定到team0的端口ens3f0
nmcli con add type team-slave con-name team0-port1 ifname ens3f0 master team0
添加綁定到team0的端口ens8f0
nmcli con add type team-slave con-name team0-port2 ifname ens8f0 master team0
重新載入連接配置
nmcli con reload
啓動team0
nmcli con up team0
3、查看狀態,使用teamdctl命令進行驗證
4、檢測發現狀態都正常。
5、如果需要嘗試換成roundrobin模式,則可以進入team0和team1的配置文件,修改模式爲roundrobin,其他配置不變。
提示:在做網卡綁定的時候,如果發現物理網卡總是無法綁定到team0,請檢查該物理網卡是否處於up狀態。