Centos网络管理-Bonding网络组和网桥

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Centos网络管理-Bonding网络组和网桥相关的知识,希望对你有一定的参考价值。

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网络组和网桥的主要内容,如果未能解决你的问题,请参考以下文章

linux网络管理-bonding

centos6.9实现网卡bonding

centos6.9实现网卡bonding

centos6.9实现网卡bonding

NIC Bonding on CentOS 7 with nmcli

NIC Bonding on CentOS 7 with nmtui