網卡bond能夠把多張網卡綁定爲一個邏輯網卡,實現網卡的冗餘,帶寬擴容和負載均衡,會大幅度提高服務器的網絡吞吐(I/O)。linux
bond模式:vim
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發出,這個不均衡,只有冗餘機制...和交換機的聚合強制不協商方式配合。ide
5.Mode=4(802.3ad) 表示支持802.3ad協議,和交換機的聚合LACP方式配合(須要xmit_hash_policy)工具
6.Mode=5(balance-tlb) 是根據每一個slave的負載狀況選擇slave進行發送,接收時使用當前輪到的slaveoop
7.Mode=6(balance-alb) 在5的tlb基礎上增長了rlb。測試
5和6不須要交換機端的設置,網卡能自動聚合。4須要支持802.3ad。0,2和3理論上須要靜態聚合方式。但實測中0能夠經過mac地址欺騙的方式在交換機不設置的狀況下不太均衡地進行接收。rest
經常使用的有三種:
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
[root@linzhongniao ~]# cp /etc/sysconfig/network-scripts/ifcfg-eth0{,.ori} [root@linzhongniao ~]# cp /etc/sysconfig/network-scripts/ifcfg-eth1{,.ori}
主要配置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
配置虛擬網卡我用的自動獲取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
編輯加載bonding的專屬配置文件/etc/modprobe.d/bonding.conf,沒有就在建立一個。
[root@linzhongniao ~]# cat /etc/modprobe.d/bonding.conf alias bond0 bonding options bonding miimon=100 mode=1
[root@linzhongniao ~]# modprobe bonding
[root@linzhongniao ~]# lsmod|grep bonding bonding 133013 0
[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地址是同樣的實際上是不同的以下所示
啓動系統自動綁定,增長默認網關
[root@linzhongniao ~]# vim /etc/rc.d/rc.local #追加 route add default gw 192.168.1.1 《==根據需求配置
開機自動加載
[root@linzhongniao ~]# grep "modprobe" /etc/rc.local modprobe bonding miimon=100 mode=1
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
添加兩個網卡就不能在/etc/modprobe.d/bonding.conf裏面堆疊了。正確的作法是
alias bond0 bonding alias bond1 bonding options bonding max_bonds=2 miimon=200 mode=1
提示:配置好以後重啓系統生效
工做服務器能夠拔掉第一塊網卡的網線測試。虛擬機咱們能夠斷開第一塊網卡的鏈接,切記不是down掉第一塊網卡而是斷開第一塊網卡的網絡鏈接,在虛擬機的右下角斷開鏈接。