實現多網卡綁定在Centos6和Centos7可采用bonding方式,Centos7上team網絡組也可實現,并且功能更強大。
-
Linux bonding 模塊提供一種將多個網卡聚合成一塊邏輯捆綁網卡的實現方法。 捆綁的網卡擁有多種模式,根據模式的特性,可實現網絡負載均衡,網絡冗余切換,提高網絡吞吐量等功能。
大多流行Linux發行版都已裝載bonding模塊,及其用戶控制工具ifenslave。查詢語句:
modinfo bonding
-
“頻道綁定”、“以太網綁定”、“端口聚合”、“頻道成組”、“NIC 成組”、“鏈接合并” 等等。這個最初在 Linux 內核中應用的概念泛指“綁定”。Centos7上以網絡組代表這個概念的最新應用。網絡組依靠teamd模塊驅動實現。
檢查teamd模塊語句:
rpm -q teamd
一、bonding方式
bonding參數介紹
設定bonding 驅動參數值,以配置成需要的所需工作方式。以下并未列出全部參數,更多詳見文檔
/usr/share/doc/kernel-doc-2.6.32/Documentation/networking/bonding.txt
此文檔需要安裝kernel-doc rpm包。
1、mode模式設定
指定一種網卡綁定策略。常用模式為0,1,4,6。
balance-rr or 0
round-robin,平衡輪循策略。依次在活動的slave上傳輸數據包。
次模式提供負載均衡,網絡冗余。
active-backup or 1
主備策略。只有一個slave處于激活工作狀態,當且僅當活動的slave失敗時,去激活下一個slave工作。為避免交換機產生混亂,綁定網口的MAC地址對外只有一個接口上可見。
此模式提供網絡冗余。
balance-xor or 2
XOR策略?;谥付ǖ膫鬏擧ASH策略傳輸數據包。缺省的策略是:(源MAC地址 XOR 目標MAC地址)% slave數量。其他的傳輸策略可以通過xmit_hash_policy選項指定。
此模式提供負載平衡和網絡冗余。
broadcast or 3
廣播策略。在所有slave上傳輸所有數據包。
此模式提供網絡冗余。
802.3ad or 4
IEEE 802.3ad 鏈接聚合策略。創建一個聚合組,它們共享同樣的速率和雙工設定。根據802.3ad規范將多個slave工作在同一個激活的聚合體下。
條件1:ethtool支持獲取每個slave的速率和雙工設定
條件2:switch(交換機)支持IEEE802.3ad Dynamic link aggregation。多數交換機需要配置啟用802.3ad模式。
此模式可提高網絡吞吐量。
balance-tlb or 5
適應傳輸負載均衡策略。在每個slave上根據當前的負載(根據速度計算)分配外出流量。如果正在接受數據的slave出故障了,另一個slave接管失敗的slave的MAC地址。
條件:ethtool支持獲取每個slave的速率和雙工設定
此模式提供負載平衡和網絡冗余。
balance-alb or 6
適應負載均衡模式。該模式包含了balance-tlb模式,同時加上針對IPV4流量的接收負載均衡(receiveload balance, rlb)。接收負載均衡是通過ARP協商實現的。bonding驅動截獲本機發送的ARP應答,并把源硬件地址改寫為bond中某個slave的唯一硬件地址,從而使得不同的對端使用不同的目標硬件地址來和本機通信。
條件1:ethtool支持獲取每個slave的速率;
條件2:底層驅動支持設置某個設備的硬件地址。
此模式支持負載均衡和網絡冗余。
需要說明的是:active-backup、balance-tlb 和 balance-alb 模式不需要交換機的任何特殊配置。其他綁定模式需要配置交換機以便整合鏈接。
2、fail_over_mac
指定active-backup模式下bond及slave的MAC地址設定
none or 0
默認值。激活某一slave時,將所有slave及bond設置為該設備的MAC地址。
active or 1
bond的MAC地址跟隨當前活動slave的MAC地址。在slave失敗切換時,bond的MAC地址進行改變,而不是slave。這種模式適合slave設備不能自己更改MAC地址的情況。
follow or 2
bond的MAC地址進行通常性選擇。通常,bond的MAC地址被設定為第一個激活的slave,但其他處于備用狀態下的slave不會被設定該MAC地址。
3、miimon
MII 鏈路檢測頻率設定,單位為毫秒,默認值為0。
4、primary
設定值為網卡設備名(eth0,eth1)。指定active-backup模式下,只要該slave可用時,總是指定其為活動slave。
配置實例
在目錄/etc/sysconfig/network-scripts/,使用配置文件ifcfg-bondN創建bonding組,N為接口序號。
bond配置文件
DEVICE=bond0 NAME=bond0 TYPE=Bond BONDING_MASTER=yes IPADDR=10.1.252.234 PREFIX=16 ONBOOT=yes BOOTPROTO=none BONDING_OPTS="miimon=100 mode=1 primary=eth1 fail_over_mac=1"
這里指定mode模式為1,即active-backup,監聽間隔為100毫秒,主設備為eth1。如果指定primary選項,fail_over_mac值要指定為1。
slave配置文件
DEVICE=eth1 TYPE=Ethernet BOOTPROTO=none ONBOOT=yes MASTER=bond0 SLAVE=yes
DEVICE=eth2 TYPE=Ethernet BOOTPROTO=none ONBOOT=yes MASTER=bond0 SLAVE=yes
配置完成后,重啟網絡服務,注意在Centos6上關掉NetworkManager服務。
service network restart
查看接口狀態,slave的MAC地址設為不同地址,bond0跟隨活動slave的MAC地址,因為fail_over_mac=1。狀態都為up。
bond0可以使用命令ifup bond0/ifdown bond0啟用或禁用
查看bonding狀態
cat /proc/net/bonding/bond0
可以看到模式,主設備信息,當前活動slave,及各slave狀態。
冗余測試試驗
從另外一個主機ping bond0 IP:10.1.252.234。網絡連通。
剛才查看bond狀態,可知活動slave為eth1,現在在虛擬機控制臺斷掉eth1
bond狀態信息中,活動slave已切換為eth2,而且eth1狀態為down
查看接口MAC,bond0跟隨eth2的MAC地址
網絡ping沒有問題,此處體現了active-backup模式的冗余功能。
現在恢復eth1,
網絡連通沒問題
二、網絡組方式
網絡組的守護進程,teamd,使用libteam控制一個網絡組驅動的一個實例,此實例添加硬件設備驅動多個實例來組成網絡連接的成組。網絡組驅動對內核其他部分呈現一個接口來調用,這個接口一般命名為team0,team1之類。用戶可以以JASON格式配置一個網絡組實例,配置當中用runner來指定teamd運行的特性,相當于bonding方式中的mode。
主接口和從屬接口的默認行為:
-
啟動主接口不會自動啟動端口接口。
-
啟動端口接口總是會啟動主接口。
-
停止主接口總是會停止端口接口。
-
沒有端口的主機可啟動靜態
IP
連接。 -
沒有端口的主機在啟動
DHCP
連接時會等待端口。 -
添加附帶載波的端口后,使用
DHCP
連接的主機會等待端口完成連接。 -
添加不附帶載波的端口后,使用
DHCP
連接的主機會讓端口繼續等待。
runner可配置成:
-
broadcast(可將數據傳送到所有端口)
-
round-robin(可按順序將數據傳送到所有端口)
-
active-backup(使用一個端口或鏈接時其他則處于備用狀態)
-
loadbalance(使用主動 Tx 負載平衡及基于 BPF 的 Tx 端口選擇程序)
-
lacp(采用 802.3ad 鏈接合并控制協議)
配置實例
使用ifcfg文件配置一個網絡組,路徑為/etc/sysconfig/network-scripts/ifcfg-team0
配置主接口文件
DEVICE=team0 DEVICETYPE=Team ONBOOT=yes BOOTPROTO=none IPADDR=10.1.252.235 PREFIX=16 TEAM_CONFIG='{"runner": {"name": "activebackup","hwaddr_policy": "by_active"}}'
這里指定運行方式為activebackup,hwaddr_policy相當于bonding中的fail_over_mac參數,指定硬件地址策略為by_active。
配置從屬接口文件
ifcfg-tp1
DEVICE=eno33554984 NAME=tp1 DEVICETYPE=TeamPort ONBOOT=yes TEAM_MASTER=team0 TEAM_PORT_CONFIG='{"prio": 100}'
ifcfg-tp2
DEVICE=eno50332208 NAME=tp2 DEVICETYPE=TeamPort ONBOOT=yes TEAM_MASTER=team0 TEAM_PORT_CONFIG='{"prio": 50}'
這里指定了端口優先權。
~]$ ifup team0 #啟動team0主接口,創建守護進程teamd ~]$ teamdctl team0 state #查看teamd狀態
可以看到主接口已創建,但是從屬接口沒有加進來。ip命令查看,team0處于down狀態。
~]$ ifup tp1 ~]$ ifup tp2 #啟動從屬接口
可以看到team0 網絡組已正常運行。
更多信息查詢請參考:rhel7聯網指南–網絡組
原創文章,作者:cutemsyu,如若轉載,請注明出處:http://www.www58058.com/45043