使用bind绑定多个网卡
由于服务器上对于可用性的要求都比较高,对于各项功能都会有有冗余设计,比如,磁盘、电源、网卡、甚至服务器本身等等,今天尝试做一下网卡绑定实现网卡的冗余。
网卡绑定的实现表面上看起来有些像是硬盘实现逻辑卷,都是通过创建一个逻辑设备来实现的。实现网卡的绑定其实还挺简单的,相比逻辑卷更容易理解。
首先,我们在/etc/sysconfig/network-scripts/目录下创建一个文件,文件名通常会叫ifcfg-bondxx,除了ifcfg-后面的内容其实都是可以自己定义的,但通常都会写成bind之类的,文件的内容其实和普通网卡配置文件的内容是一样的,就像这样
DEVICE=bond1
BOOTPROTO=static
IPADDR=172.20.16.121
GATEWAY=172.20.0.1
PREFIX=16
BONDING_OPTS="miimon=100 mode=1"
第一行的DEVICE是你给这个逻辑设备指定的名字,这个名字得和文件名的后半部分一样。
第二行是指定IP的获取方式,你也可以写dhcp让他自动获取,如果是自动获取,那么IPADDR、GATEWAY和PREFIX都不需要再填
最后一行是比较重要的,必须得填,这个是绑定网卡的选项,mode代表绑定网卡的工作模式,miimon是一个时间间隔,代表备份网卡每隔多久查询一次工作网卡的工作情况。单位是ms
以上只是第一步,逻辑网卡已经创建好了,下面就要指定那些网卡属于这个逻辑网卡了。也很简单,只要把你想加入这个逻辑网卡的物理网卡的配置文件稍微修改一下就可以了。就像这样
TYPE="Ethernet"
BOOTPROTO=static
NAME=eth1
MASTER=bond1
SLAVE=yes
USERCTL=no
DEVICE=eth1
ONBOOT=yes
IPADDR=192.168.20.110
GATEWAY=192.168.0.1
PREFIX=16
其实后面的三行是无效的,不过我懒得删掉了,比较重要的是MASTER=bond1,SLAVE=yes,这两行指定了该网卡是属于逻辑网卡bond1的从属设备,DEVICE也是必须的,它指明了这个配置文件是给哪个网卡用的,其他的没有也可以,不过建议写上ONBOOT=yes
现在我们添加了第一个网卡到逻辑网卡,添加第二块的方法和第一个是一样的。换个文件而已。不在说。
然后我们就可以重启我们的网络服务了,在CentOS7中是用systemctl restart network之后就可以看看成果了。如果没有问题的话在执行ifconfig之后会看到下面的内容:
[root@cent7 network-scripts]# ifconfig
bond1: flags=5187<UP,BROADCAST,RUNNING,MASTER,MULTICAST> mtu 1500
inet 172.20.16.121 netmask 255.255.0.0 broadcast 172.20.255.255
inet6 fe80::250:56ff:fe3b:6a38 prefixlen 64 scopeid 0x20<link>
ether 00:50:56:3b:6a:38 txqueuelen 1000 (Ethernet)
RX packets 212 bytes 21252 (20.7 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 13 bytes 1000 (1000.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
……
eth1: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST> mtu 1500
ether 00:50:56:3b:6a:38 txqueuelen 1000 (Ethernet)
RX packets 1224 bytes 176616 (172.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 265 bytes 73426 (71.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth2: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST> mtu 1500
ether 00:50:56:3b:6a:38 txqueuelen 1000 (Ethernet)
RX packets 286 bytes 35478 (34.6 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 62 bytes 5878 (5.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
最明显的就是多了一个叫bond1的网卡,而且是有IP的,eth1和2有同样的mac地址,并且都没有IP,我们可以通过查看 /proc/net/bonding/bond1 这个文件中的内容来看bond1的工作情况,如果你乐意还可以手工下线一个网卡看看这个绑定的设备的工作情况。
还记得bond1配置文件中的BONDING_OPTS="miimon=100 mode=1"这一行吗 ,其实这个mode是有好几种的,不过我们常用的并不多,比如mode0是轮巡代表数据包会从头到尾经过每一个网卡,这种模式提供了负载均衡的能力和一定的容错性,还有mode3,这种模式数据包会独立通过每一个网卡,每个网卡也会给一个响应,具体体现就是数据的每一个请求都会得到多个回应。如果你想知道更多,下面有一个官方的文档。
https://www.kernel.org/doc/Documentation/networking/bonding.txt
使用team绑定多个网卡