Linux下多网卡冗余的实现

发表于:2017-12-14 10:27

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:helonlihsmcn    来源:Linux社区

  一、简介
  所谓多网卡冗余就是通过工具把多张网卡绑定成一个IP地址(bond0属于虚拟网卡)使用。这项技术在大中小企业都无比受用。如下图:
  多网卡的绑定的优点:
  1、扩大服务器的网络带宽
  2、可以有效均衡负载和提高容错能力,避免单点失效
  3、一旦发生故障,无缝切换网卡。
  二、实现环境
  虚拟机环境下加上本地的和添加的一共3张网卡分别是:eth0、eth1、eth2
  IP:192.168.0.153/24
  (同样物理机的不过是物理添加网卡,或者是多网卡服务器,一样可以作绑定)
  三、搭建
  首先大家可以看到主机上面的几张网卡,列出来
[root@linuxidc ~]# ifconfig -a
eth0      Link encap:Ethernet  HWaddr 00:0C:29:1D:7A:25
inet addr:192.168.0.153  Bcast:192.168.3.255  Mask:255.255.252.0
inet6 addr: fe80::20c:29ff:fe1d:7a25/64 Scope:Link
UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:315026 errors:0 dropped:0 overruns:0 frame:0
TX packets:160536 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:313603361 (299.0 MiB)  TX bytes:12994253 (12.3 MiB)
eth1      Link encap:Ethernet  HWaddr 00:0C:29:1D:7A:2F
BROADCAST MULTICAST  MTU:1500  Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
eth2      Link encap:Ethernet  HWaddr 00:0C:29:1D:7A:39
BROADCAST MULTICAST  MTU:1500  Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
lo        Link encap:Local Loopback
inet addr:127.0.0.1  Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING  MTU:16436  Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
[root@linuxidc ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 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
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 00:0c:29:1d:7a:25 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.153/22 brd 192.168.3.255 scope global eth0
inet6 fe80::20c:29ff:fe1d:7a25/64 scope link
valid_lft forever preferred_lft forever
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
link/ether 00:0c:29:1d:7a:2f brd ff:ff:ff:ff:ff:ff
4: eth2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN qlen 1000
link/ether 00:0c:29:1d:7a:39 brd ff:ff:ff:ff:ff:ff
  下面我们把eth0-2都绑成bond0的虚拟网卡,先去修改eth0-2的网卡配置信息
[root@linuxidc network-scripts]# cd /etc/sysconfig/network-scripts
eth0-2:
[root@linuxidc network-scripts]# cat ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
[root@linuxidc network-scripts]# cat ifcfg-eth1
DEVICE=eth1
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
[root@linuxidc network-scripts]# cat ifcfg-eth2
DEVICE=eth2
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
bond0:
[root@linuxidc network-scripts]# cat ifcfg-bond0
DEVICE=bond0
ONBOOT=yes
BOOTPROTO=none
IPADDR=192.168.0.153
NETMASK=255.255.255.0
GATEWAY=192.168.0.254
DNS1=8.8.8.8
# DEVICE=物理设备名
IPADDR=IP地址
NETMASK=掩码值
NETWORK=网络地址
BROADCAST=广播地址
GATEWAY=网关地址
ONBOOT=[yes|no](引导时是否激活设备)
USERCTL=[yes|no](非root用户是否可以控制该设备)
BOOTPROTO=[none|static|bootp|dhcp](引导时不使用协议|静态分配|BOOTP协议|DHCP协议)
HWADDR = 你的MAC地址
  有的参数并非必需。
  还有其实参数,比如PEERDNS=[yes|no],如果是通过DHCP获取IP,是否要将DNS写入/etc/resolv.conf,应该会覆盖原来的内容!
  【注意1】
  Max_bonds=2  多个bonding的情况下需要这个参数等于2代表有两个bond0  比如:4个网卡,两两绑定
  如果系统存在多块网卡,eth0,eth1,eth2,eth3,我们现在希望两两做备份,这样在系统就可以配置多个bonding了,需要在加载bonding的时候加载一个参数,max_bonds,比如:
  modprobe bonding max_bonds=2
  我们可以加入
  alias bond0 bonding
  options bonding mod=blance-rr miimon=100 max_bonds=2
  alias bond1 bonding
  options bonding mod=active-backup miimon=100 primary=eth2 max_bonds=2
  多个bonding,最好加上这个参数,否则可能在网络重启后会提示找不到BOND1之类的消息!
  【注意2】
  如果网卡参数里不写MASTER=bond0和SLAVE=yes,就要执行
  在/etc/rc.d/rc.local 加入如下一行(启动时执行此行命令)
  ifenslave bond0 eth0 eth1
  如果写了的话,这一步就可有可无了!我这里都写了!
  所以网卡的配置信息完毕,下面配置bond0模式绑定:
  [root@linuxidc network-scripts]# vim /etc/modprobe.d/bonding.conf
  #增加这两条信息,相关的网卡驱动
  alias bond0 bonding
  options bond0 miimon=120 mode=1
  【bonding.conf配置文件解析以及绑定的模式】
  modprobe.conf配置文件中的解释:
  miimon是用来进行链路检测的。比如miimon=100,那么系统每隔100毫秒就检测一次链路的 链接状态,如果一条线路不通就转入另外一天链路
  mode的值表示bonding的工作模式,一个有0、1、2、3、4、5、6七种模式,常用的有0、1两种,可以根据工作模式适当的选择:
  0、(balance-rr)Round-robin policy:(平衡轮循环策略):传输数据包的顺序是一次传输,知道最后一个传输完毕,此模式提供负载均衡和容错能力(这个好像要交换机支持,不知道什么意思), 在这种情况下,带宽理论上是双倍的,断开一个网卡只是带宽减少了
  1、(active-backup)Active-backup policy:(主-备策略):只有一个设备处于活动的状态。一个如果宕掉了则立马有备份转移到另外一个主设备。mac地址是外部可见的。这个模式提供了容错能力,在这种情况下,ETH1作为备份,是NO ARP状态的,可以使用ifconfig查看到,只有ETH0断开,它才会接管
  2、(blance-xor)XOR policy:(广播策略):将所有数据包传输给所有接口。此模式提供了容错能力
  3、(blance-xor)XOR policy:(平衡策略):传输根据源地址布尔值选择传输设备。此模式提供负载平衡和容错能力
  4、(802.3 ad)IEEE 802.3ad Dynamic link aggregation:(IEEE 802.3ad动态链接聚合):创建共享相同的速度和双工设置的聚合组
  5、(balance-tlb)Adaptive transmit load balancing:(适配器传输负载均衡):没有特殊策略,第一个设备传不通就用另一个设备接管第一个设备正在处理的mac地址,帮助第一个进行传输
  6、(balance-alb)Adaptive load balancing:(适配器传输负载均衡):大致意思是包括mod5,bonding驱动程序截获ARP在本地系统发送的请求,用其中之一的硬件地址覆盖从属设备的原地址。就像是服务器上不同的人使用不同的硬件地址一样(这个好像不用交换机支持)
  最后执行命令生效或者重启:
modprobe bonding
[root@linuxidc network-scripts]# service network restart
正在关闭接口 bond0:                                       [确定]
关闭环回接口:                                             [确定]
弹出环回接口:                                             [确定]
弹出界面 bond0: Determining if ip address 192.168.0.153 is already in use for device bond0...
[确定]
[root@linuxidc network-scripts]# ifconfig -a
bond0     Link encap:Ethernet  HWaddr 00:0C:29:1D:7A:25
inet addr:192.168.0.153  Bcast:192.168.0.255  Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe1d:7a25/64 Scope:Link
UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1
RX packets:554253 errors:0 dropped:0 overruns:0 frame:0
TX packets:309064 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:632576726 (603.2 MiB)  TX bytes:26435542 (25.2 MiB)
eth0      Link encap:Ethernet  HWaddr 00:0C:29:1D:7A:25
UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
RX packets:554254 errors:0 dropped:0 overruns:0 frame:0
TX packets:309065 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:632576786 (603.2 MiB)  TX bytes:26435776 (25.2 MiB)
eth1      Link encap:Ethernet  HWaddr 00:0C:29:1D:7A:25
UP BROADCAST SLAVE MULTICAST  MTU:1500  Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
eth2      Link encap:Ethernet  HWaddr 00:0C:29:1D:7A:25
UP BROADCAST SLAVE MULTICAST  MTU:1500  Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
lo        Link encap:Local Loopback
inet addr:127.0.0.1  Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING  MTU:16436  Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
[root@linuxidc network-scripts]# lsmod | grep bonding
bonding               128245  0
8021q                  25349  1 bonding
ipv6                  317340  282 bonding,ip6t_REJECT,nf_conntrack_ipv6,nf_defrag_ipv6
  说明网卡冗余已经起效了。
  最后再把这个配置做到rc.local下,开机启动:
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
ifensalve bond0 eth0 eth1 eth2  #添加
  四、总结
  如果是在物理机上面做测试是非常方便的,比如绑定4个网卡eth0-3
  那么4跟网线都接上了,然后ping着网关。你只要不是4跟网线都拔完,随机的拔掉3根都不会影响它的连通性。
  这就是冗余容错的效果,1根网线100M的话。插上4根就是400M的出口流量了。

上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号