總共有7個配置文件,請參考5)
1)目前服務器有4張網卡
ifcfg-em1
ifcfg-em2
ifcfg-em3
ifcfg-em4
2)bond配置:
em1和em2網卡做bond4,配置橋接到cloudbr0
IP配置為:172.28.101.11/24 網關為172.28.101.1
em3和em4網卡做bond4,直接配置IP
IP配置為:10.194.19.165/24 網關為10.194.19.254
注意:
1、假如上面4中網卡已經有了橋接的網卡,要先把網卡down掉(ifconfig bri-interfaces down),然后使用命令brctl delbr <bridge name> #把橋接的網卡刪除
2、注意這個配置文件假如是dos格式的,會導致啟動失敗,記得要使用命令
dos2unix file 轉換下換行的字符
3)查看系統的橋接情況
[root@node-142 ~]# brctl show
bridge name bridge id STP enabled interfaces
cloudbr0 8000.b82a72d04c2a no bond0
virbr0 8000.5254006df229 yes virbr0-nic
4)最終IP顯示為
[root@node-142 ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: em1: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond0 state UP qlen 1000
link/ether b8:2a:72:d0:4c:2a brd ff:ff:ff:ff:ff:ff
3: em2: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond0 state UP qlen 1000
link/ether b8:2a:72:d0:4c:2a brd ff:ff:ff:ff:ff:ff
4: em3: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond1 state UP qlen 1000
link/ether b8:2a:72:d0:4c:2c brd ff:ff:ff:ff:ff:ff
5: em4: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc mq master bond1 state UP qlen 1000
link/ether b8:2a:72:d0:4c:2c brd ff:ff:ff:ff:ff:ff
7: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN
link/ether 52:54:00:6d:f2:29 brd ff:ff:ff:ff:ff:ff
inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
valid_lft forever preferred_lft forever
8: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN qlen 500
link/ether 52:54:00:6d:f2:29 brd ff:ff:ff:ff:ff:ff
9: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue master cloudbr0 state UP
link/ether b8:2a:72:d0:4c:2a brd ff:ff:ff:ff:ff:ff
inet6 fe80::ba2a:72ff:fed0:4c2a/64 scope link
valid_lft forever preferred_lft forever
10: bond1: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
link/ether b8:2a:72:d0:4c:2c brd ff:ff:ff:ff:ff:ff
inet 10.194.19.160/24 brd 10.194.19.255 scope global bond1
valid_lft forever preferred_lft forever
inet6 fe80::ba2a:72ff:fed0:4c2c/64 scope link
valid_lft forever preferred_lft forever
12: cloudbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
link/ether b8:2a:72:d0:4c:2a brd ff:ff:ff:ff:ff:ff
inet 172.28.101.11/24 brd 172.28.101.255 scope global cloudbr0
valid_lft forever preferred_lft forever
inet6 fe80::ba2a:72ff:fed0:4c2a/64 scope link
valid_lft forever preferred_lft forever
5)網卡配置文件
[root@mail bond]# cat ifcfg-em1
TYPE=Ethernet
BOOTPROTO=none
IPV6INIT=no
DEVICE=em1
ONBOOT=yes
NAME=bond0-slave
MASTER=bond0
SLAVE=yes
[root@mail bond]# cat ifcfg-em2
TYPE=Ethernet
BOOTPROTO=none
IPV6INIT=no
DEVICE=em2
ONBOOT=yes
NAME=bond0-slave
MASTER=bond0
SLAVE=yes
[root@mail bond]# cat ifcfg-em3
TYPE=Ethernet
BOOTPROTO=none
IPV6INIT=no
DEVICE=em3
ONBOOT=yes
NAME=bond1-slave
MASTER=bond1
SLAVE=yes
[root@mail bond]# cat ifcfg-em4
TYPE=Ethernet
BOOTPROTO=none
IPV6INIT=no
DEVICE=em4
ONBOOT=yes
NAME=bond1-slave
MASTER=bond1
SLAVE=yes
[root@mail bond]# cat ifcfg-bond0
DEVICE=bond0
NAME=bond0
TYPE=Bond
BONDING_MASTER=yes
ONBOOT=yes
BOOTPROTO=none
BONDING_OPTS="mode=4 miimon=100 xmit_hash_policy=1"
BRIDGE=cloudbr0
IPV6INIT=no
[root@mail bond]# cat ifcfg-bond1
DEVICE=bond1
NAME=bond1
TYPE=Bond
BONDING_MASTER=yes
ONBOOT=yes
BOOTPROTO=none
BONDING_OPTS="mode=4 miimon=100 xmit_hash_policy=1"
IPADDR=10.194.19.165
NETMASK=255.255.255.0
GATEWAY=10.194.19.254
IPV6INIT=no
[root@mail bond]# cat ifcfg-cloudbr0
DEVICE=cloudbr0
NAME=cloudbr0
TYPE=Bridge
IPADDR=172.28.101.11
GATEWAY=172.28.101.1
PREFIX=24
ONBOOT=yes
BOOTPROTO=none
IPV6INIT=no
6)簡單的介紹一下上面在加載bonding模塊的時候,options里的一些參數的含義:
miimon: 監視網絡鏈接的頻度,單位是毫秒,我們設置的是100毫秒。
mode: bond模式,主要有以下幾種,在一般的實際應用中,0和1用的比較多。
xmit_hash_policy:
xmit_hash_policy: 這個參數的重要性我認為僅次於mode參數,mode參數定義了分發模式 ,而這個參數定義了分發策略 ,文檔上說這個參數用於mode2和mode4,我覺得還可以定義更為復雜的策略呢。
1.layer2: 使用二層幀頭作為計算分發出口的參數,這導致通過同一個網關的數據流將完全從一個端口發送,為了更加細化分發策略,必須使用一些三層信息,然而卻增加了計算開銷,天啊,一切都要權衡!
2.layer2+3: 在1的基礎上增加了三層的ip報頭信息,計算量增加了,然而負載卻更加均衡了,一個個主機到主機的數據流形成並且同一個流被分發到同一個端口,根據這個思想,如果要使負載更加均衡,我們在繼續增加代價的前提下可以拿到4層的信息。
3.layer3+4: 這個還用多說嗎?可以形成一個個端口到端口的流,負載更加均衡。然而且慢! 事情還沒有結束,雖然策略上我們不想將同一個tcp流的傳輸處理並行化以避免re-order或者re-transmit,因為tcp本身就是一個串行協議,比如Intel的8257X系列網卡芯片都在盡量減少將一個tcp流的包分發到不同的cpu,同樣,端口聚合的環境下,同一個tcp流也應該使用本policy使用同一個端口發送,但是不要忘記,tcp要經過ip,而ip是可能要分段的,分了段的ip數據報中直到其被重組(到達對端或者到達一個使用nat的設備)都再也不能將之划為某個tcp流了。ip是一個完全無連接的協議,它只關心按照本地的mtu進行分段而不管別的,這就導致很多時候我們使用layer3+4策略不會得到完全滿意的結果。可是事情又不是那么嚴重,因為ip只是依照本地的mtu進行分段,而tcp是端到端的,它可以使用諸如mss以及mtu發現之類的機制配合滑動窗口機制最大限度減少ip分段,因此layer3+4策略,很OK!
事實上這個選項的配置是 xmit_hash_policy=layer3+4 (目前配置為1,應該是等價於layer3+4 ,目前未確定)
