講點1
什麼是Bonding
Bonding就是將多塊網卡綁定同一IP地址對外提供服務,可以實現高可用或者負載均衡。當然,直接給兩塊網卡設置同一IP地址是不可能的。可以通過Centos系統自帶服務bonding功能來實現虛擬一塊網卡對外提供連接,物理網卡的被修改爲相同的MAC地址。
Bonding應用方向
網絡負載均衡
對於Bonding的網絡負載均衡是我們在文件服務器中常用到的,比如把三塊網卡,當做一塊來用,解決一個IP地址,流量過大,服務器網絡壓力過大的問題。對於文件服務器來說,比如NFS或SAMBA文件服務器,沒有任何一個管理員會把內部網的文件服務器的IP地址弄很多個來解決網絡負載的問題。如果在內網中,文件服務器爲了管理和應用上的方便,大多是用同一個IP地址。對於一個百M的本地網絡來說,文件服務器在多 個用戶同時使用的情況下,網絡壓力是極大的,特別是SAMABA和NFS服務器。爲了解決同一個IP地址,突破流量的限制,畢竟網線和網卡對數據的吞吐量是有限制的。如果在有限的資源的情況下,實現網絡負載均衡,最好的辦法就是Bonding。
網絡冗餘
對於服務器來說網絡設備的穩定也是比較重要的,特別是網卡。在生產型的系統中,網卡的可靠性就更爲重要了。在生產型的系統中,大多通過硬件設備的冗餘來提供服務器的可靠性和安全性,比如電源。Bonding 也能爲網卡提供冗餘的支持。把多塊網卡綁定到一個IP地址,當一塊網卡發生物理性損壞的情況下,另一塊網卡自動啓用,並提供正常的服務,即:默認情況下只有一塊網卡工作,其它網卡做備份。
Bonding的工作模式
Mode 0 (balance-rr)
輪轉(Round-robin)策略:從頭到尾順序的在每一個slave接口上發送數據包。本模式提供負載均衡和容錯的能力
Mode 1 (active-backup)
活動-備份(主備)策略:在綁定中,只有一個slave被激活。當且僅當活動的slave接口失敗時纔會激活其他slave。
爲了避免交換機發生混亂此時綁定的MAC地址只有一個外部端口上可見
Mode 2 (balance-xor)
平衡策略:基於指定的傳輸HASH策略傳輸數據包。缺省的策略是:(源MAC地址 XOR 目標MAC地址) % slave數量。其他的傳輸策略可以通過xmit_hash_policy選項指定,此模式提供負載平衡和容錯能力
Mode 3 (broadcast)
廣播策略:在所有的slave接口上傳送所有的報文。本模式提供容錯能力。
Mode 4 (802.3ad)
IEEE 802.3ad 動態鏈接聚合策略(IEEE 802.3ad Dynamic link aggregation)
特點:創建一個聚合組它們共享同樣的速率和雙工設定。根據802.3ad規範將多個slave工作在同一激活聚合體下。
外出流量的slave選舉是基於傳輸hash策略,該策略可以通過xmit_hash_policy選項從缺省的XOR策略改變到其他策略。需要注意的是,並不是所有的傳輸策略都是802.3ad適應的,尤其考慮到在802.3ad標準43.2.4章節提及的包亂序問題。不同的實現可能會有不同的適應性。
必要條件:
條件1:ethtool支持獲取每個slave的速率和雙工設定;
條件2:switch(交換機)支持IEEE 802.3ad Dynamic link aggregation;
條件3:大多數switch(交換機)需要經過特定配置才能支持802.3ad模式;
Mode 5 (balance-tlb)
適配器傳輸負載均衡策略(Adaptive transmit load balancing)
特點:不需要任何特別的switch(交換機)支持的通道bonding。在每個slave上根據當前的負載(根據速度計算)分配外出流量。如果正在接受數據的slave出故障了,另一個slave接管失敗的slave的MAC地址。
必要條件:ethtool支持獲取每個slave的速率;
Mode 6 (balance-alb)
適配器適應性負載均衡策略(Adaptive load balancing)
特點:
1、該模式包含了balance-tlb模式,同時加上針對IPV4流量的接收負載均衡(receive load balance, rlb),而且不需要任何switch(交換機)的支持。接收負載均衡是通過ARP協商實現的。bonding驅動截獲本機發送的ARP應答,並把源硬件地址改寫爲bond中某個slave的唯一硬件地址,從而使得不同的對端使用不同的硬件地址進行通信。
2、來自服務器端接收流量也會被均衡。當本機發送ARP請求時,bonding驅動把對端的IP信息從ARP包中複製並保存下來。當ARP應答從對端到達時,bonding驅動把它的硬件地址提取出來,併發起一個ARP應答給bond中的某個slave。
3、使用ARP協商進行負載均衡的一個問題是:每次廣播 ARP請求時都會使用bond的硬件地址,因此對端學習到這個硬件地址後,接收流量將會全部流向當前的slave。這個問題可以通過給所有的對端發送更新 (ARP應答)來解決,應答中包含他們獨一無二的硬件地址,從而導致流量重新分佈。當新的slave加入到bond中時,或者某個未激活的slave重新 激活時,接收流量也要重新分佈。接收的負載被順序地分佈(round robin)在bond中最高速的slave上。
4、當某個鏈路被重新接上或者一個新的slave加入到bond中,接收流量在所有當前激活的slave中全部重新分配,通過使用指定的MAC地址給每個client發起ARP應答。下面介紹的updelay參數必須被設置爲某個大於等於switch(交換機)轉發延時的值,從而保證發往對端的ARP應答不會被switch(交換機)所阻截。
必要條件:
1:ethtool支持獲取每個slave的速率;
2:底層驅動支持設置某個設備的硬件地址,從而使得總是有個slave(curr_active_slave)使用bond的硬件地址,同時保證每個 bond 中的slave都有一個唯一的硬件地址。如果curr_active_slave出故障,它的硬件地址將會被新選出來的 curr_active_slave所接管;
mod=6與mod=0的區別:
mod=6,先把eth0流量佔滿,再佔eth1,…,ethX。而mod=0的話,會發現2個口的流量都很穩定,基本一樣的帶寬。而mod=6會發現第一個口流量很高,第2個口只佔了小部分流量。
查看bond0狀態:
cat /proc/net/bonding/bond0
關於Bonding的詳細配置請參照
/usr/share/doc/kernel-doc-version/Documentation/networking/bonding.txt
配置及操作思路(先想好怎麼做,別盲目下手)
步驟1、新添加一塊網卡,總共兩塊網卡eth0、eth1
步驟2、在網卡配置文件目錄下新建ifcfg-bond0配置文件,修改裏面的內容爲
[root@6 ~]# vim /etc/sysconfig-network-scripts/ DEVICE=bond0 (可選) IPADDR=192.18.5.109 (可選) PREFIX=24(可選) BONDING_OPTS=“miimon=100 mode=1”(必填,實驗模式我們選擇mode=1)
步驟3、修改原網卡文件ifcfg-eth0和新建網卡配置文件eth1裏面的地址修改爲
DEVICE=eth0,eth1 MASTER=bond0 SLAVE=yes
步驟4、關閉NetworkManager服務並重啓network服務
service NetworkManager stop chkconfig NetworkManager off
步驟5、查看bond0狀態:cat /proc/net/bonding/bond
步驟6、實際測驗,把物理網卡模擬故障看配置文件和服務是否生效
步驟1
步驟2
步驟3
到這裏步驟基本算做完了,我們這裏選擇的Bonding的工作模式爲mode1.所以我們要實現的功能是負載和容錯。
其實很簡單;就是用Bonding功能虛擬出來一個網卡,當物理網卡eth0,eth1其中一個故障,由bond0來自動指派其中一塊網卡馬上頂上去,實現網絡不掉線,當然另外一塊網卡是故障的你要想辦法恢復就行。
步驟4
關閉chkconfig NetworkManager off 網絡後臺服務,因爲這個服務程序在Centos6裏很不穩定。給關了就行
然後如果以上配置修改完後用命令;service network restart 回車重啓下服務
步驟5
用cat /proc/net/bonding/bond0查看各個網卡的工作狀態。
步驟6
實際測驗,把物理網卡模擬故障看配置文件和服務是否生效
多網卡分組綁定
網卡的配置文件設置方法和上面選項‘配置及操作思路’相同;
指定目錄下/etc/modprobe.d/bonding.conf 配置文件正確設置方法:
第一種:你可以看到這種方式的話,多個bond口的模式就只能設成相同的了。
alias bond0 bonding alias bond1 bonding options bonding max_bonds=2 miimon=200 mode=1
第二種:這種方式,不同的bond口的mode可以設成不一樣。
alias bond0 bonding options bond0 miimon=100 mode=1 install bond1 /sbin/modprobe bonding -o bond1 miimon=200 mode=0
options 參數含義:
miimon:是用來進行鏈路監測的。如果miimon=100,那麼系統每100ms 監測一次鏈路連接狀態,如果有一條線路不通就轉入另一條線路; max_bonds:配置的bond口個數;
系統啓動自動綁定、增加默認網關
[root@node1 ~]# vim /etc/rc.d/rc.local #追加 ifenslave bond0 eth0 eth1 route add default gw 192.168.5.1
講點2
一塊網卡定義多個IP地址(用網卡別名實現)
vim/etc/sysconfig/network-scripts/
1、複製ifcfg-eth0(靜態地址)一份並命名爲ifcfg-eth0:1
2、vim編輯網卡別名文件ifcfg-eth0:1
3、把DEVICE=eth0:1,後面的地址由您指定
4、保存,重啓service NetworkManagerstart服務
5、ifconfig驗證改過後的網卡地址信息
6、關閉服務chkconfig NetworkManageroff,開機不啓動
步驟1,2,3
步驟4
步驟5
步驟6
注意:
如果有多個地址按照以上方法,需要多少個地址就複製多少份文件並在原網卡信息後面加冒號和數字
cp ifcfg-eth0 ifcfg-eth0:1,2,3,4……
爲每個設備別名生成獨立的接口配置文件
一塊網卡定義多個IP地址(一個接口是DHCP功能,另一個可以配置多個靜態IP地址)
參考/usr/share/doc/initscripts-*/sysconfig.txt
注意:要實現此功能一定把網卡別名設置爲靜態,原始網卡地址配置爲DHCP這樣才能聯網
vim/etc/sysconfig/network-scripts/
1、 修改網卡別名文件ifcfg-eth0:1,裏面的地址修改爲靜態
2、 修改原網卡文件ifcfg-eth0,裏面的地址修改爲動態
3、 關閉NetworkManager服務並重啓network服務
4、 用ifconfig命令驗證網卡配置信息
之前我們已經把NetworkManager服務給關閉了,所以這步省略,命令看上面。
講點3
Centos6.8修改網卡的配置文件信息
修改網卡的基本要求(會修改網卡配置文件)
第一步把對應的網卡名稱name改成你想修改的名字
[root@6 ~]# cd /etc/udev/rules.d/70-persistent-net.rules
保存重啓系統。這時是不生效的但是重啓系統後網卡名字已改變
第二部修改網卡的對應配置文件
[root@6 ~]# vim/etc/sysconfig-network-scripts/eth0
第三部如果修改完畢後,不起作用;執行service network restart
因爲害怕networkmanager服務有故障
Centos6.8的網卡配置文件說明(看圖就可以)
vim/etc/sysconfig-network-scripts/eth0
修改網卡的配置文件信息(手動配置靜態static地址)
[root@6 ~]# vim/etc/sysconfig-network-scripts/eth0
修改網卡的配置文件信息(改mac地址6.8)
[root@6 ~]# vim/etc/sysconfig-network-scripts/eth0
Centos6.8網卡配置文件丟失,手動更改方法(手動配置動態DHCP地址)
[root@6 ~]# vim/etc/sysconfig-network-scripts/eth0
驗證的結果
done!!!