1. 程式人生 > >Centos網絡管理(五)-Bonding、網絡組和網橋

Centos網絡管理(五)-Bonding、網絡組和網橋

centos網絡管理(五) bonding、網絡組和網橋 centos 網絡組 centos 網橋 centos network team

Bonding

將多塊網卡綁定同一IP地址對外提供服務,可以實現高可用或者負載均衡。

直接給兩塊網卡設置同一IP地址是不可以的。通過bonding,虛擬一塊網卡對外提供連接,物理網卡的被修改為相同的MAC地址

? Mode 0 (balance-rr)

輪轉( Round-robin)策略:從頭到尾順序的在每一個slave接口上面發送數據包。本模式提供負載均衡和容錯的能力

? Mode 1 (active-backup)

活動-備份(主備)策略:只有一個slave被激活,當且僅當活動的slave接口失敗時才會激活其他slave。 為了避免交換機發生混

亂此時綁定的MAC地址只有一個外部端口上可見

? Mode 3 (broadcast)

廣播策略:在所有的slave接口上傳送所有的報文,提供容錯能力


active-backup、 balance-tlb 和 balance-alb 模式不需要交換機的任何特殊配置。其他綁定模式需要配置交換機以便整合鏈接。如: Cisco 交換機需要在模式 0、 2 和 3 中使用EtherChannel,但在模式4中需要 LACP和 EtherChannel

詳細幫助:

/usr/share/doc/kernel-docversion/Documentation/networking/bonding.txt

https://www.kernel.org/doc/Documentation/networking/bonding


Bonding配置

實驗環境:VMware Workstation Pro 14(試用版)

系統平臺:

CentOS release 6.9 (Final) 內核 2.6.32-696.el6.x86_64


虛擬2塊網卡

技術分享圖片技術分享圖片

生成bond0的網卡配置文件

miimon 是用來進行鏈路監測的。如果miimon=100,那麽系統每100ms 監測一次鏈路連接狀態,如果有一條線路不通就轉入另一條線路

#cat > /etc/sysconfig/network-scripts/ifcfg-bond0 <<EOF

DEVICE=bond0

BOOTPROTO=none

BONDING_OPTS='mode=0 miimon=100'

IPADDR=192.168.4.201

PREFIX=24

EOF


修改2塊物理網卡配置文件,添加紅色的2行

DEVICE=eth1

TYPE=Ethernet

ONBOOT=yes

BOOTPROTO=none

MASTER=bond0 此處值需要填寫加入哪個BONDING組

SLAVE=yes


重啟網絡服務

#service network restart

綁定組中的各個網卡的MAC地址將會與bond0的MAC一致

技術分享圖片技術分享圖片


查看Bonding狀態

#cat /proc/net/bonding/bond0

技術分享圖片技術分享圖片

技術分享圖片技術分享圖片


測試

關閉了其中一個網卡,發現,ping包並沒有中斷

215 packets transmitted, 215 received, 0% packet loss, time 214116ms

換成mode=3模式

64 bytes from 192.168.4.201: icmp_seq=1 ttl=64 time=4.34 ms

64 bytes from 192.168.4.201: icmp_seq=1 ttl=64 time=4.38 ms (DUP!)

64 bytes from 192.168.4.201: icmp_seq=2 ttl=64 time=0.264 ms

64 bytes from 192.168.4.201: icmp_seq=2 ttl=64 time=0.281 ms (DUP!)

64 bytes from 192.168.4.201: icmp_seq=3 ttl=64 time=0.301 ms

64 bytes from 192.168.4.201: icmp_seq=3 ttl=64 time=0.319 ms (DUP!)


刪除bond0

#ifconfig bond0 down

#ethtool -i bond0

#modprobe -r bonding

#service network restart



實驗環境:VMware Workstation Pro 14(試用版)

系統平臺:

CentOS Linux release 7.4.1708 (Core) 內核 3.10.0-693.el7.x86_64


計劃使用ens36和ens37來進行bongding設置

#nmcli device

DEVICE TYPE STATE CONNECTION

ens33 ethernet connected ens33

ens36 ethernet connected ens36

ens37 ethernet connected ens37


添加bonding接口

註意黑色標註的地方,ifname並不指定具體的物理網卡,而是指定bondding組名

#nmcli connection add con-name bond1 type bond ifname bond1 mode active-backup ipv4.method auto ipv6.method ignore


添加從屬接口

#nmcli connection add type bond-slave ifname ens36 master bond1

#nmcli connection add type bond-slave ifname ens37 master bond1

如果沒有指定從屬接口con-name提供連接名,則該名稱是接口名稱加類型構成

技術分享圖片技術分享圖片

會自動生成配置文件,這個比Centos 6方便

技術分享圖片

啟動BONDDING

要啟動綁定,則必須首先啟動從屬接口

#nmcli connection up bond-slave-ens36

#nmcli connection up bond-slave-ens37


啟動綁定

#nmcli connection up bond1(一般情況下,啟動了從屬接口,就會自動啟動了)

技術分享圖片技術分享圖片

技術分享圖片

技術分享圖片

測試:

關閉了ens36網卡

#nmcli device disconnect ens36

ens37立即接替故障接口ens36進行工作了

技術分享圖片技術分享圖片


刪除bond1

#nmcli connection down bond1

#nmcli connection delete bond1 bond-slave-ens36 bond-slave-ens37

恢復正常

技術分享圖片

技術分享圖片

網絡組Network Teaming

網絡組:是將多個網卡聚合在一起方法,從而實現冗錯和提高吞吐量

? 網絡組不同於舊版中bonding技術,提供更好的性能和擴展性

? 網絡組由內核驅動和teamd守護進程實現.

? 多種方式runner

broadcast【mode 3】

特點:

這種模式的特點是一個報文會復制兩份往bond下的兩個接口分別發送出去,當有對端交換機失效,我們感覺不到任何downtime,但此法過於浪費資源;不過這種模式有很好的容錯機制。此模式適用於金融行業,因為他們需要高可靠性的網絡,不允許出現任何問題

適用於拓撲,兩個接口分別接入兩臺交換機,並且屬於不同的vlan,當一邊的網絡出現故障不會影響服務器另一邊接入的網絡正常工作。而且故障過程是0丟包


roundrobin 【mode 0】

特點:

(1)所有鏈路處於負載均衡狀態,輪詢方式往每條鏈路發送報文,基於per packet方式發送。服務上ping 一個相同地址:1.1.1.1 雙網卡的兩個網卡都有流量發出。負載到兩條鏈路上,說明是基於per packet方式 ,進行輪詢發送。

(2)這模式的特點增加了帶寬,同時支持容錯能力,當有鏈路出問題,會把流量切換到正常的鏈路上。

交換機端需要配置聚合口


activebackup【mode 1】

特點:

一個端口處於主狀態 ,一個處於從狀態,所有流量都在主鏈路上處理,從鏈路不會有任何流量。當主端口down掉時,從端口接手主狀態。

不需要交換機端支持


loadbalance【mode 2】

特點:

該模式將限定流量,以保證到達特定對端的流量總是從同一個接口上發出。既然目的地是通過MAC地址來決定的,因此該模式在“本地”網絡配置下可以工作得很好。如果所有流量是通過單個路由器(比如 “網關”型網絡配置,只有一個網關時,源和目標mac都固定了,那麽這個算法算出的線路就一直是同一條,那麽這種模式就沒有多少意義了。),那該模式就不是最好的選擇。和balance-rr一樣,交換機端口需要能配置為“port channel”。這模式是通過源和目標mac做hash因子來做xor算法來選路的。

交換機端需要配置聚合口


lacp (implements the 802.3ad Link Aggregation ControlProtocol)【mode 4】

特點:802.3ad模式是IEEE標準,因此所有實現了802.3ad的對端都可以很好的互操作。802.3ad 協議包括聚合的自動配置,因此只需要很少的對交換機的手動配置(要指出的是,只有某些設備才能使用802.3ad)。802.3ad標準也要求幀按順序(一定程度上)傳遞,因此通常單個連接不會看到包的亂序。802.3ad也有些缺點:標準要求所有設備在聚合操作時,要在同樣的速率和雙工模式,而且,和除了balance-rr模式外的其它bonding負載均衡模式一樣,任何連接都不能使用多於一個接口的帶寬。 此外,linux bonding的802.3ad實現通過對端來分發流量(通過MAC地址的XOR值),因此在“網關”型配置下,所有外出(Outgoing)流量將使用同一個設備。進入(Incoming)的流量也可能在同一個設備上終止,這依賴於對端802.3ad實現裏的均衡策略。在“本地”型配置下,路兩將通過 bond裏的設備進行分發。

應用拓撲同mode 0,和mode 2一樣,不過這種模式除了配置port channel之外還要在port channel聚合口下開啟LACP功能,成功協商後,兩端可以正常通信。否則不能使用。


實驗環境:VMware Workstation Pro 14(試用版)

系統平臺:

CentOS Linux release 7.4.1708 (Core) 內核 3.10.0-693.el7.x86_64


計劃使用ens36和ens37來進行網絡組設置

#nmcli device

DEVICE TYPE STATE CONNECTION

ens33 ethernet connected ens33

ens36 ethernet connected ens36

ens37 ethernet connected ens37


語法格式

創建網絡組接口

nmcli con add type team con-name 網絡組名 ifname 網絡組接口名 [config JSON]

JSON 指定runner方式

格式: '{"runner": {"name": "METHOD"}}'

METHOD 可以是broadcast, roundrobin,activebackup, loadbalance, lacp

例子:

#nmcli connection add con-name team0 ifname team0 type team config '{"runner":{"name":"activebackup"}}'


創建port接口

nmcli con add type team-slave con-name 網絡接口名 ifname 物理網卡 master 網絡組名

? 網絡接口名若不指定,默認為team-slave-物理網卡名

例子:

#nmcli connection add type team-slave ifname ens36 master team0


網絡組管理命令

teamdctl [options] teamdevname command [command args]

-h --help Show this help

-v --verbose Increase output verbosity

-o --oneline Force output to one line if possible

-D --force-dbus Force to use D-Bus interface

-Z --force-zmq=ADDRESS Force to use ZeroMQ interface [-Z[Address]]

-U --force-usock Force to use UNIX domain socket interface

Commands:

config dump 配置查看

config dump noports

config dump actual

state 狀態查看

state dump

state view

port add PORTDEV 添加一個定義好了配置文件的物理網卡至網絡組中

port remove PORTDEV 從網絡中刪除一個接口設備,不會刪除配置文件

port present PORTDEV

port config update PORTDEV PORTCONFIG

port config dump PORTDEV


創建網絡組

#nmcli connection add con-name team0 ifname team0 type team config '{"runner":{"name":"activebackup"}}'

自動生成的文件如下:

#cat ifcfg-team0

DEVICE=team0

TEAM_CONFIG="{\"runner\":{\"name\":\"activebackup\"}}"

BOOTPROTO=dhcp

NAME=team0

ONBOOT=yes

DEVICETYPE=Team


創建網絡接口

#nmcli connection add type team-slave ifname ens36 master team0

#nmcli connection add type team-slave ifname ens37 master team0

自動生成的文件如下

#cat ifcfg-team-slave-ens36

NAME=team-slave-ens36

UUID=804bda32-b350-4500-8b46-eec141a7d13d

DEVICE=ens36

ONBOOT=yes

TEAM_MASTER=team0

DEVICETYPE=TeamPort

技術分享圖片技術分享圖片


啟動網絡組

啟動網絡組接口不會自動啟動網絡組中的port接口

啟動網絡組接口中的port接口總會自動啟動網絡組接口

禁用網絡組接口會自動禁用網絡組中的port接口

沒有port接口的網絡組接口可以啟動靜態IP連接

啟用DHCP連接時,沒有port接口的網絡組會等待port接口的加入

所以上圖中的team0一直不會自動啟用的

#nmcli connection up team-slave-ens36

#nmcli connection up team-slave-ens36

查看狀態

技術分享圖片技術分享圖片

技術分享圖片技術分享圖片


測試什麽的都是正常。

現在再增加一塊物理網卡到此網絡組,必須使用命令生成配置文件

#nmcli connection add type team-slave ifname ens38 master team0

#nmcli connection up team-slave-ens38

只有有配置文件後,才可以使用此命令添加

#teamdctl team0 port add ens38

刪除指定的物理網卡

#teamdctl team0 port remove ens38


刪除網絡組

先down掉相應的網絡組,再刪除配置文件

#nmcli connection delete team0 team-slave-ens36 team-slave-ens37



橋接

橋接:把一臺機器上的若幹個網絡接口“連接”起來。其結果是,其中一個網口收到的報文會被復制給其他網口並發送出去。以使得網口之間的報文能夠互相轉發。網橋就是這樣一個設備,它有若幹個網口,並且這些網口是橋接起來的。與網橋相連的主機就能通過交換機的報文轉發而互相通信。

一般常用在KVM相關場景中。支持網卡別名。

主機A發送的報文被送到交換機S1的eth0口,由於eth0與eth1、 eth2橋接在一起,故而報文被復制到eth1和eth2,並且發送出去,然後被主機B和交換機S2接收到。而S2又會將報文轉發給主機C、D。

技術分享圖片技術分享圖片


實驗環境:VMware Workstation Pro 14(試用版)

系統平臺:

CentOS Linux release 7.4.1708 (Core) 內核 3.10.0-693.el7.x86_64


計劃使用ens36和ens37來進行網橋設置

#nmcli device

DEVICE TYPE STATE CONNECTION

ens33 ethernet connected ens33

ens36 ethernet connected ens36

ens37 ethernet connected ens37


創建網橋

#nmcli connection add type bridge con-name bridge0 ifname bridge0 ipv4.method manual ipv4.addresses 172.18.27.42/16

生成的配置文件如下:

#cat ifcfg-bridge0

DEVICE=bridge0

STP=yes

BRIDGING_OPTS=priority=32768

TYPE=Bridge

IPADDR=172.18.27.42

PREFIX=16

NAME=bridge0

ONBOOT=yes


創建網絡接口

#nmcli connection add type bridge-slave ifname ens36 master bridge0

#nmcli connection add type bridge-slave ifname ens37 master bridge0


生成的配置文件如下:

#cat ifcfg-bridge-slave-ens36

TYPE=Ethernet

NAME=bridge-slave-ens36

UUID=3433f060-8127-4cc6-9be6-23ab9716f785

DEVICE=ens36

ONBOOT=yes

BRIDGE=bridge0


啟動網橋組的網絡接口

#nmcli connection up bridge-slave-ens36

#nmcli connection up bridge-slave-ens37


查看狀態

#brctl show bridge0

bridge name bridge id STP enabled interfaces

bridge0 8000.000000000000 yes

最小化安裝系統的時候,需要安裝工具包bridge-utils.x86_64

#brctl

Usage: brctl [commands]

commands:

addbr <bridge> add bridge

delbr <bridge> delete bridge

addif <bridge> <device> add interface to bridge 沒有配置文件的話,重啟就無效

delif <bridge> <device> delete interface from bridge

show [ <bridge> ] show a list of bridges

showmacs <bridge> show a list of mac addrs

showstp <bridge> show bridge stp info

stp <bridge> {on|off} turn stp on/off

#bridge -s link

3: ens36 state UP : <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master bridge0 state forwarding priority 32 cost 100

4: ens37 state UP : <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 master bridge0 state blocking priority 32 cost 100

技術分享圖片技術分享圖片


刪除網絡組

#nmcli connection down bridge0

#nmcli connection delete bridge0

#nmcli connection delete bridge-slave-ens36

#nmcli connection delete bridge-slave-ens37


Centos網絡管理(五)-Bonding、網絡組和網橋