1. 程式人生 > >linux多網卡綁定聚合-bond技術

linux多網卡綁定聚合-bond技術

需要 追加 format 增加 net linu acp 現在 綁定

網卡bond可以把多張網卡綁定為一個邏輯網卡,實現網卡的冗余,帶寬擴容和負載均衡,會大幅度提升服務器的網絡吞吐(I/O)。

bond模式:

1.Mode=0(balance-rr) 表示負載分擔round-robin,和交換機的聚合強制不協商的方式配合。

2.Mode=1(active-backup) 表示主備模式,只有一塊網卡是active,另外一塊是備的standby,這時如果交換機配的是捆綁,將不能正常工作,因為交換機往兩塊網卡發包,有一半包是丟棄的。

3.Mode=2(balance-xor) 表示XOR Hash負載分擔,和交換機的聚合強制不協商方式配合。(需要xmit_hash_policy)

4.Mode=3(broadcast) 表示所有包從所有interface發出,這個不均衡,只有冗余機制...和交換機的聚合強制不協商方式配合。

5.Mode=4(802.3ad) 表示支持802.3ad協議,和交換機的聚合LACP方式配合(需要xmit_hash_policy)

6.Mode=5(balance-tlb) 是根據每個slave的負載情況選擇slave進行發送,接收時使用當前輪到的slave

7.Mode=6(balance-alb) 在5的tlb基礎上增加了rlb。

5和6不需要交換機端的設置,網卡能自動聚合。4需要支持802.3ad。0,2和3理論上需要靜態聚合方式。但實測中0可以通過mac地址欺騙的方式在交換機不設置的情況下不太均衡地進行接收。

常用的有三種:

mode=0:平衡負載模式,有自動備援,但需要”Switch”支援及設定。

mode=1:自動備援模式,其中一條線若斷線,其他線路將會自動備援。

mode=6:平衡負載模式,有自動備援,不必”Switch”支援及設定。

mode有七種工作狀態可以用modeinfo bonding查看。需要說明的是如果想做成mode 0的負載均衡,僅僅設置這裏options bond0 miimon=100 mode=0是不夠的,與網卡相連的交換機必須做特殊配置(這兩個端口應該采取聚合方式),因為做bonding的這兩塊網卡是使用同一個MAC地址.從 原理分析一下(bond運行在mode 0下):

mode 0下bond所綁定的網卡的IP都被修改成相同的mac地址,如果這些網卡都被接在同一個交換機,那麽交換機的arp表裏這個mac地址對應的端口就有多個,那麽交換機接受到發往這個mac地址的包應該往哪個端口轉發呢?正常情況下mac地址是全球唯一的,一個mac地址對應多個端口肯定使交換機迷惑 了。所以 mode0下的bond如果連接到交換機,交換機這幾個端口應該采取聚合方式(cisco稱 為 ethernetchannel,foundry稱為portgroup),因為交換機做了聚合後,聚合下的幾個端口也被捆綁成一個mac地址.我們 的解 決辦法是,兩個網卡接入不同的交換機即可。

mode6模式下無需配置交換機,因為做bonding的這兩塊網卡是使用不同的MAC地址。

實驗準備:

通過網口綁定(bond)技術,可以實現網口冗余,負載均衡。

bond模式:mode 1

2個物理網口分別是:eth0、eth1

綁定虛擬端口是;bond0

服務器ip:192.168.1.225

1.備份eth0和eth1的網卡配置文件

[root@linzhongniao ~]# cp /etc/sysconfig/network-scripts/ifcfg-eth0{,.ori}
[root@linzhongniao ~]# cp /etc/sysconfig/network-scripts/ifcfg-eth1{,.ori}

2.編輯eth0和eth1網卡的配置文件

主要配置DEVICE,USERCTL,ONBOOT,MASTER,SLAVE,BOOTPROTO其他的不用配置,eth1網卡的配置文件和eth0一樣就是把DEVICE的值改成eth1。

[root@linzhongniao ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0 
ONBOOT=yes 
BOOTPROTO=none
USERCTL=no
MASTER=bond0
SLAVE=yes
TYPE=Ethernet
NM_CONTROLLED=yes
PEERDNS=yes
IPV6INIT=no

3.配置虛擬網卡bond0

配置虛擬網卡我用的自動獲取ip的方式,也可以靜態配置ip

dhcp自動獲取ip地址:

[root@linzhongniao ~]# cat /etc/sysconfig/network-scripts/ifcfg-bond0 
DEVICE=bond0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=dhcp
USERCTL=no
PEERDNS=yes
IPV6INIT=no

用靜態ip地址(本次實驗以這種方式為例):

[root@linzhongniao ~]# cat /etc/sysconfig/network-scripts/ifcfg-bond0 
DEVICE=bond0
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
DNS1=192.168.18.1
NM_CONTROLLED=yes
PEERDNS=yes
DNS2=114.114.114.114
TYPE=Ethernet
IPV6INIT=no
IPADDR=192.168.1.225
NETMASK=255.255.255.0
GATEWAY=192.168.1.1

4.修改modprobe相關的配置文件

編輯加載bonding的專屬配置文件/etc/modprobe.d/bonding.conf,沒有就在創建一個。

[root@linzhongniao ~]# cat /etc/modprobe.d/bonding.conf 
alias bond0 bonding
options bonding miimon=100 mode=1

5.加載模塊(重啟系統後就不用手動加載了)

[root@linzhongniao ~]# modprobe bonding

6.確認模塊是否加載成功

[root@linzhongniao ~]# lsmod|grep bonding
bonding   133013  0

7.重啟網絡確認一下情況

[root@linzhongniao ~]# /etc/init.d/network restart
Shutting down interface bond0: [  OK  ]
Shutting down loopback interface:  [  OK  ]
Bringing up loopback interface:[  OK  ]
Bringing up interface bond0:  
Determining IP information for bond0... done.
   [  OK  ]
[root@linzhongniao ~]# ifconfig|grep HWaddr
bond0 Link encap:Ethernet  HWaddr 00:0C:29:9C:41:1C  
eth0  Link encap:Ethernet  HWaddr 00:0C:29:9C:41:1C  
eth1  Link encap:Ethernet  HWaddr 00:0C:29:9C:41:1C

現在查看的mac地址是一樣的其實是不一樣的如下所示

技術分享圖片

8.增加默認網關

啟動系統自動綁定,增加默認網關

[root@linzhongniao ~]# vim /etc/rc.d/rc.local
#追加
route add default gw 192.168.1.1  《==根據需求配置

9.將modprobe相關文件寫入/etc/rc.local中

開機自動加載

[root@linzhongniao ~]# grep "modprobe" /etc/rc.local 
modprobe bonding miimon=100 mode=1

10.添加負載均衡工具ifenslave

ifenslave負載均衡工具可以將數據包有效的分配,通常結合交換機和路由使用。這時會新建一個bond0的虛擬設備,使用我們設置ip地址。這個時候eth0和eth1的工作模式混雜,什麽數據都接收,但是數據過來之後ifenslave的底層驅動來做負載均衡,決定哪些數據規組裏面的那個成員處理。

將負載均衡設置添加到/etc/rc.local中,開機自動加載

[root@linzhongniao ~]# cat /etc/rc.local 
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don‘t
# want to do the full Sys V style init stuff.

touch /var/lock/subsys/local
modprobe bonding miimon=10 mode=1
ifenslave bond0 eth0 eth1

11.添加兩個虛擬網卡的方法

添加兩個網卡就不能在/etc/modprobe.d/bonding.conf裏面堆疊了。正確的做法是

alias bond0 bonding
alias bond1 bonding
options bonding max_bonds=2 miimon=200 mode=1

提示:配置好之後重啟系統生效

12.測試

工作服務器可以拔掉第一塊網卡的網線測試。虛擬機我們可以斷開第一塊網卡的連接,切記不是down掉第一塊網卡而是斷開第一塊網卡的網絡連接,在虛擬機的右下角斷開連接。

linux多網卡綁定聚合-bond技術