网卡聚合bonding

《网卡聚合bonding》 bonding.jpg

1. 简介

网卡bond是通过把多张网卡绑定为一个逻辑网卡,实现本地网卡的冗余,带宽扩容和负载均衡,在应用部署中是一种常用的技术。网上有很多解释和说明,这里我从网上整理了一些简单的概念,可以了解一下。

1.1. 常用模式

常用的模式有:

mode=0:平衡负载模式,有自动备援,但需要”Switch”支援及设定。

mode=1:自动备援模式,其中一条线若断线,其他线路将会自动备援。

mode=4:如果交换机及网卡都确认支持802.3ab,则实现负载均衡时尽量使用mode 4以提高系统性能

mode=6:平衡负载模式,有自动备援,不必”Switch”支援及设定。

1.2. 模式选择

如果系统流量不超过单个网卡的带宽,请不要选择使用mode 1之外的模式,因为负载均衡需要对流量进行计算,这对系统性能会有所损耗。

建议mode 5、mode 6只在交换机不支持”ports group”的情况下选用。

如果交换机及网卡都确认支持802.3ab,则实现负载均衡时尽量使用mode 4以提高系统性能。

2. 配置

实际工作中使用mode4模式居多,这里我只讲解一下mode4的配置,其它模式的配置大同小异。

2.1. 参数说明

  1. xmit_hash_policy
    这个参数的重要性我认为仅次于mode参数,mode参数定义了分发模式 ,而这个参数定义了分发策略 ,文档上说这个参数用于mode2和mode4。

  2. layer2:使用二层帧头作为计算分发出口的参数,这导致通过同一个网关的数据流将完全从一个端口发送,为了更加细化分发策略,必须使用一些三层信息,然而却增加了计算开销。

  3. layer2+3:在1的基础上增加了三层的ip报头信息,计算量增加了,然而负载却更加均衡了,一个个主机到主机的数据流形成并且同一个流被分发到同一个端口,根据这个思想,如果要使负载更加均衡。

  4. layer3+4:可以形成一个个端口到端口的流,负载更加均衡。通过TCP及UDP端口及其IP地址进行HASH计算。

  5. miimon和arp: 使用miimon仅能检测链路层的状态,也就是链路层的端到端连接(即交换机某个口和与之直连的本地网卡口),然而交换机的上行口如果down掉了还是无法检测到,因此必然需要网络层的状态检测,最简单也是最直接的方式就是arp了,可以直接arp网关,如果定时器到期网关还没有回复arp reply,则认为链路不通了。

2.2. Centos的bonding配置

  • 配置文件有3个,内容分别如下:
[root@sys-idc-center01 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth2 
DEVICE=eth2
TYPE=Ethernet
ONBOOT=yes
HWADDR=00:E0:ED:7B:8B:04
BOOTPROTO=none
MASTER=bond1
SLAVE=yes
HOTPLUG=no
[root@sys-idc-center01 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth3
DEVICE=eth3
TYPE=Ethernet
ONBOOT=yes
HWADDR=00:E0:ED:7B:8B:05
BOOTPROTO=none
MASTER=bond1
SLAVE=yes
HOTPLUG=no
[root@sys-idc-center01 ~]# cat /etc/sysconfig/network-scripts/ifcfg-bond1 
DEVICE=bond1
TYPE=bond
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
BONDING_OPTS="mode=4 miimon=100 xmit_hash_policy=layer3+4"
IPADDR=192.168.212.1
NETMASK=255.255.255.192
GATEWAY=192.168.212.62
  • vlan配置
    如果需要配置vlan,那么PHYSDEV的网卡ip要去掉。
[root@sys-idc-center01 ~]# cat /etc/sysconfig/network-scripts/ifcfg-vlan20 
DEVICE=vlan20
ONBOOT=yes
BOOTPROTO=none
PHYSDEV=bond1
VLAN=yes
USERCTL=no
IPADDR=192.168.212.1
NETMASK=255.255.255.192
  • 路由配置
    Centos7的路由文件。
[root@sys-idc-center01 ~]# cat /etc/sysconfig/network-scripts/route-bond1 
10.0.0.0/8 via 192.168.212.62 dev bond1
172.16.0.0/12 via 192.168.212.62 dev bond1

Centos6的路由文件。

[root@sys-idc-center01 ~]# cat /etc/sysconfig/static-routes 
any net 10.0.0.0/8     gw 192.168.212.62
any net 172.16.0.0/12  gw 192.168.212.62

2.3. Ubuntu的bonding配置

  • 安装软件包
root@ubuntu224004:~# apt-get install ifenslave
root@ubuntu224004:~# apt-get install vlan
  • 配置文件
root@ubuntu224004:~# cat /etc/modules
lp
rtc
bonding

root@ubuntu224004:~# cat /etc/network/interfaces
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

#
auto p2p1
iface p2p1 inet manual
bond-master bond0

#
auto p2p2
iface p2p2 inet manual
bond-master bond0

# The primary network interface
auto bond0
iface bond0 inet static
hwaddress 00:E0:ED:7B:8B:04
bond-mode 4
bond-miimon 100
#bond-lacp-rate 1
bond-xmit_hash_policy layer3+4
bond-slaves p2p1 p2p2
address 192.168.212.1
netmask 255.255.255.192
gateway 192.168.212.62

  • 配置vlan

部分配置信息

root@ubuntu224004:~# cat /etc/network/interfaces
auto vlan20
iface vlan20 inet static
address 192.168.212.1
netmask 255.255.255.192
vlan-raw_device bond0
  • 配置路由

部分配置信息

root@ubuntu224004:~# cat /etc/network/interfaces
up route add -net 10.0.0.0 netmask 255.0.0.0 gw 192.168.212.62 bond0

2.4. Windows的bonding配置

有时间再更新

2.5. 手动配置

手动配置bonding和vlan的命令,参考如下。

[root@sys-idc-center01 ~]# modprobe bonding mode=4 miimon=100 xmit_hash_policy=layer3+4
[root@sys-idc-center01 ~]# ifconfig bond0 up
[root@sys-idc-center01 ~]# ifenslave bond0 eth0 eth1
[root@sys-idc-center01 ~]# vconfig add bond0 20
[root@sys-idc-center01 ~]# dhclient vlan20

剔除或添加端口。

[root@sys-idc-center01 ~]# ifenslave -d bond0 eth0
[root@sys-idc-center01 ~]# ifenslave bond0 eth0

查看bonding是否正确,在mode4里数值相同即正确。

[root@sys-idc-center01 ~]# cat /proc/net/bonding/bond1 |grep Agg
Aggregator selection policy (ad_select): stable
Active Aggregator Info:
    Aggregator ID: 1
Aggregator ID: 1
Aggregator ID: 1

3. 总结

bonding模式的选择要根据实际情况,这点很重要。有的公司不选择使用bonding,原因是在业务层已经做了相当好的冗余,并且这样也省去了不少成本。

    原文作者:小小运维
    原文地址: https://www.jianshu.com/p/1919bdb7e8c2
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞