Linux 網卡 Bonding 配置


一、bonding技術

簡介

 bonding(綁定)是一種將n個物理網卡在系統內部抽象(綁定)成一個邏輯網卡的技術,能夠提升網絡吞吐量、實現網絡冗余、負載等功能,有很多優勢。

 Linux 系統下支持網絡 Bonding,也叫 channel Bonding,它允許你將 2 個或者更多的網卡綁定到一起,成為一個新的邏輯網卡,從而實現故障切換或者負載均衡的功能,具體情況要取決於 mode 參數的具體配置。
 Linux系統bonding技術是內核層面實現的,它是一個內核模塊(驅動)。使用它需要系統有這個模塊, 我們可以modinfo命令查看下這個模塊的信息, 一般來說都支持.

modinfo bonding

bonding的七種工作模式

bonding技術提供了七種工作模式,在使用的時候需要指定一種,每種有各自的優缺點.

balance-rr (mode=0) 默認, 有高可用 (容錯) 和負載均衡的功能, 需要交換機的配置,每塊網卡輪詢發包 (流量分發比較均衡).
active-backup (mode=1) 只有高可用 (容錯) 功能, 不需要交換機配置, 這種模式只有一塊網卡工作, 對外只有一個mac地址。缺點是端口利用率比較低
balance-xor (mode=2) 不常用
broadcast (mode=3) 不常用
802.3ad (mode=4) IEEE 802.3ad 動態鏈路聚合,需要交換機配置,沒用過
balance-tlb (mode=5) 不常用
balance-alb (mode=6) 有高可用 ( 容錯 )和負載均衡的功能,不需要交換機配置 (流量分發到每個接口不是特別均衡)

詳細說明請參考網絡上其他資料,了解每種模式的特點根據自己的選擇就行, 一般會用到0、1、4、6這幾種模式。

二、RHEL6 下的 Boding 配置:

 在所有的 RHEL 版本下,目前都不支持在 NetworkManager 服務協作下實現 Bonding 配置.所以要么直接關閉 NetworkManager 服務,並取消其開機啟動,要么在所有涉及 Bonding 的網卡配置文件中(包含ethx 或者 bondY),顯式地添加一行:NM_CONTROLLED=no

 要配置網卡 Bonding,你必須在/etc/sysconfig/network-scripts/目錄下建立邏輯網卡的配置文件 ifcfg-bondX,一般 X 從 0 開始,依次增加.具體的文件內容根據參與 Bonding 的網卡類型的不同又有所差別,以最最常見的 Ethernet 為例,配置文件大致是這樣的:

DEVICE=bond0
IPADDR=192.168.0.1
NETMASK=255.255.255.0
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
BONDING_OPTS="bonding parameters separated by spaces" 
NM_CONTROLLED=no

 BONDING_OPTS 這一行填寫你需要的 Bonding 模式,比如 BONDING_OPTS="miimon=100 mode=1" ,
下面也會介紹幾種常見的配置方式和它代表的意義,這里暫時不展開說明.為了方便稱呼,我們把
Bongding 后的邏輯網卡 bondX 稱為主網卡(Master),參與 Bonding 的物理網卡 ethY 稱為子網卡(Slave).

 主網卡配置文件創建完畢以后,子網卡的配置文件也需要做相應的改變,主要是添加 MASTER=和
SLAVE=這兩項參數,我們假設 2 張子網卡為 eth0 和 eth1,那么他們的配置文件大致的樣子會是這樣子:

DEVICE=ethX
BOOTPROTO=none
ONBOOT=yes
MASTER=bond0
SLAVE=yes
USERCTL=no
NM_CONTROLLED=no

 像這樣,分別修改 ifcfg-eth0 和 ifcfg-eth1 配置文件,DEVICE=ethX 中的 X 用相應的值代替.然后
我們重啟網絡服務.

service network restart

這樣子,子網卡為 eth0 和 eth1,主網卡為 bond0,模式為 mode 1 的網絡 Bonding 就完成了

rhel6 bonding 實例展示

系統: rhel6
網卡: eth2、eth3
bond0:10.200.100.90
負載模式: mode1(active-backup) # 這里的負載模式為1,也就是主備模式.

1、關閉和停止NetworkManager服務

service  NetworkManager stop
chkconfig NetworkManager off

ps: 如果有裝的話關閉它,如果報錯說明沒有裝這個,那就不用管

2、加載bonding模塊

modprobe --first-time bonding

3、創建基於bond0接口的配置文件

[root@rhel6.6 network-scripts]# cat ifcfg-bond0
DEVICE=bond0
BOOTPROTO=none
IPADDR=10.200.100.90
NETMASK=255.255.255.0
ONBOOT=yes
NM_CONTROLLED=no
USERCTL=no
BONDING_OPTS="mode=1 miimon=200"

4、SLAVE網卡的配置文件

兩種子網卡的配置文件如下

[root@rhel6.6 network-scripts]# cat ifcfg-eth2
DEVICE=eth2
#HWADDR=14:58:D0:5A:0F:76
NM_CONTROLLED=no
#UUID=3b718bed-e8d4-4b64-afdb-455c8c3ccf91
ONBOOT=yes
#NM_CONTROLLED=yes
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
USERCTL=no
[root@rhel6.6 network-scripts]# cat ifcfg-eth3
DEVICE=eth3
#HWADDR=14:58:D0:5A:0F:77
NM_CONTROLLED=no
#UUID=988835c2-8bfa-4788-9e8d-e898f68458f0
ONBOOT=yes
#NM_CONTROLLED=yes
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
USERCTL=no

5、bonding信息查看

重啟網絡服務器后bonding生效

[root@rhel6.6 network-scripts]# ip a
4: eth2: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond0 state UP qlen 1000
    link/ether c4:34:6b:ac:5c:9e brd ff:ff:ff:ff:ff:ff
5: eth3: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond0 state UP qlen 1000
    link/infiniband a0:00:03:00:fe:80:00:00:00:00:00:00:00:02:c9:03:00:0a:6f:ba brd 00:ff:ff:ff:ff:12:40:1b:ff:ff:00:00:00:00:00:00:ff:ff:ff:ff
10: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP 
    link/ether c4:34:6b:ac:5c:9e brd ff:ff:ff:ff:ff:ff
    inet 10.200.100.90/24 brd 10.212.225.255 scope global bond0
    inet6 fe80::c634:6bff:feac:5c9e/64 scope link 
       valid_lft forever preferred_lft forever
[root@rhel6.6 network-scripts]# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)

Bonding Mode: fault-tolerance (active-backup)			# bond0接口采用mode1
Primary Slave: None
Currently Active Slave: eth2
MII Status: up
MII Polling Interval (ms): 200
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: eth2
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: c4:34:6b:ac:5c:9e
Slave queue ID: 0

Slave Interface: eth3
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: c4:34:6b:ac:5c:9f
Slave queue ID: 0

進行高可用測試,拔掉其中的一條網線看丟包和延時情況, 然后在插回網線(模擬故障恢復),再看丟包和延時的情況.

三、RedHat7配置bonding

系統: Red Hat Enterprise Linux Server release 7.6 (Maipo)
網卡: eno3、eno4
bonding:bond0
負載模式: mode1(active-backup)

服務器上兩張物理網卡eno3和eno4, 通過綁定成一個邏輯網卡bond0,bonding模式選擇mode1

注: ip地址配置在bond0上, 物理網卡不需要配置ip地址.

1、關閉和停止NetworkManager服務
RedHat7默認安裝了NetworkManager,在配置前先關掉NetworkManager服務,否則可能會對bonding或造成問題。

systemctl stop NetworkManager.service     # 停止NetworkManager服務
systemctl disable NetworkManager.service  # 禁止開機啟動NetworkManager服務

2、加載bonding模塊

modprobe --first-time bonding

沒有提示說明加載成功, 如果出現modprobe: ERROR: could not insert 'bonding': Module already in kernel說明你已經加載了這個模塊, 就不用管了

你也可以使用lsmod | grep bonding查看模塊是否被加載

lsmod | grep bonding
bonding               152656  0 

3、創建基於bond0接口的配置文件

[root@ReHat7.6 network-scripts]# cat ifcfg-bond0
DEVICE=bond0
IPADDR=10.211.100.10
NETMASK=255.255.255.0
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
NM_CONTROLLED=no
BONDING_OPTS="mode=1 miimon=200"

上面的BONDING_OPTS="mode=1 miimon=200" 表示這里配置的工作模式是mode1, miimon表示監視網絡鏈接的頻度 (毫秒), 我們設置的是100毫秒, 根據你的需求也可以指定mode成其它的負載模式。

4、修改eno3、eno4子接口的配置文件

[root@ReHat7.6 ]# cat ifcfg-eno3
NAME=eno3
DEVICE=eno3
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
ONBOOT=yes
MASTER=bond0
SLAVE=yes
UESCTL=no
NM_CONTROLLED=no
[root@ReHat7.6 ]# cat ifcfg-eno4
NAME=eno4
DEVICE=eno4
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
ONBOOT=yes
MASTER=bond0
SLAVE=yes
UESCTL=no
NM_CONTROLLED=no

5、查看bonding信息

重啟網絡服務

systemctl restart network

查看bond0的接口狀態信息 ( 如果報錯說明沒做成功,很有可能是bond0接口沒起來)

[root@ReHat7.6 network-scripts]# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)

Bonding Mode: fault-tolerance (active-backup)		// 綁定模式: 主備模式(mode 1)
Primary Slave: None
Currently Active Slave: eno4			// 當前活動接口
MII Status: up							// 接口狀態: up(MII是Media Independent Interface簡稱, 接口的意思)
MII Polling Interval (ms): 200		 	// 接口輪詢的時間隔(這里是200ms)
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: eno3					// Slave 接口,也就是受bond管控的接口
MII Status: up							// 接口狀態: up(MII是Media Independent Interface簡稱, 接口的意思)
Speed: 1000 Mbps                         // 端口的速率是1000 Mpbs
Duplex: full							// 全雙工
Link Failure Count: 0					// 鏈接失敗次數: 0
Permanent HW addr: 74:46:a0:f4:9f:c2     // 永久的MAC地址
Slave queue ID: 0

Slave Interface: eno4
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 74:46:a0:f4:9f:c3
Slave queue ID: 0
[root@ReHat7.6 ~]# ip a
1: eno3: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond0 state UP group default qlen 1000
    link/ether 74:46:a0:f4:9f:c2 brd ff:ff:ff:ff:ff:ff
2: eno4: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond0 state UP group default qlen 1000
    link/ether 74:46:a0:f4:9f:c2 brd ff:ff:ff:ff:ff:ff
3: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 74:46:a0:f4:9f:c2 brd ff:ff:ff:ff:ff:ff
    inet 10.211.100.10/24 brd 10.211.139.255 scope global bond0
       valid_lft forever preferred_lft forever

四、Bonding命令行管理工具 ifenslave

 ifslave 可以綁定、分離和切換活動網卡,同樣ifslave的使用需要內核支持bonding。

 modprobe bonding      // 加載內核模塊  
 ifenslave bond0 eth0 eth1      // 綁定網卡
 ifconfig bond0 192.168.0.1 netmask 255.255.0.0    // 配置IP
 ifenslave -c bond0 eth1      // 切換活動網卡到eth1
 ifenslave -d bond0 eth1     // 從bond0中移除eth1

 高可用測試中(插拔網線)發現:在mode=6模式下丟包1個, 恢復網絡時( 網絡插回去 ) 丟包在5-6個左右,說明高可用功能正常但恢復的時候丟包會比較多
測試mode=1模式下丟包1個,恢復網絡時( 網線插回去 ) 基本上沒有丟包,說明高可用功能和恢復的時候都正常
mode6這種負載模式除了故障恢復的時候有丟包之外其它都挺好的,如果能夠忽略這點的話可以這種模式;而mode1故障的切換和恢復都很快,基本沒丟包和延時。但端口利用率比較低,因為這種主備的模式只有一張網卡在工作。

參考:
http://blog.chinaunix.net/uid-31410005-id-5818605.html
https://www.cnblogs.com/dkblog/p/3613407.html
https://www.cnblogs.com/huangweimin/articles/6527058.html
https://www.cnblogs.com/dkblog/p/3613407.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM