Linux 双网卡绑定高可用说明

  1. 目标

为了提供网络的高可用性,我们可能需要将多块网卡绑定成一块虚拟网卡对外提供服务,这样即使其中的一块物理网卡出现故障,也不会导致连接中断。多网卡绑定这个词在不同的平台有不同叫法,在Linux下叫bonding,IBM称为etherchanel,broadcom叫team,但是名字怎么变,效果都是将两块或更多的网卡当做一块网卡使用,在增加带宽的同时也可以提高冗余性。比如我们在RHEL6下可以将eth0和eth1绑定成虚拟网卡bond0。

网卡配置文件说明:

# cat /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0                     # 设备名

BOOTPROTO=none                #设置为none禁止DHCP,设置为static启用静态IP地址,设置为dhcp开启DHCP服务 

IPADDR=192.168.0.21              # IP地址

NETMASK=255.255.255.0          #子网掩码

HWADDR=00:0C:29:CE:D9:79      # 网卡MAC地址

ONBOOT=yes                    # 是否开机启动

GATEWAY=192.168.0.1            #网关

TYPE=Ethernet                    #网络类型为:Ethernet  默认 以太网

# USERCTL=no                        #是否允许非root用户控制该设备,设置为no,只能用root用户更改 yes --非root用户可以控制该设备。

# IPV6INIT=no                               #禁止IPV6

# PEERDNS=yes                          #自动DNS

  1. 操作步骤
  1. 添加虚拟网卡

添加虚拟网卡bond0

vi /etc/sysconfig/network-scripts/ifcfg-bond0

DEVICE=bond0

BOOTPROTO=static

ONBOOT=yes

IPADDR=192.168.10.200

NETMASK=255.255.255.0

GATEWAY=192.168.10.1

  1. 配置本地网卡信息

1、配置eth0网卡信息

vi /etc/sysconfig/network-scripts/ifcfg-eth0

 DEVICE="eth0"

 TYPE=Ethernet

 BOOTPROTO=static

 ONBOOT="yes"

 MASTER=bond0

 SLAVE=yes 

 

2、配置eth1网卡信息

vi /etc/sysconfig/network-scripts/ifcfg-eth1

DEVICE="eth1"

TYPE=Ethernet

BOOTPROTO=static

ONBOOT="yes"

MASTER=bond0

SLAVE=yes  

  1. 模块加载

1、vi /etc/modprobe.d/dist.conf

alias bond0 bonding                #添加 bond0 的驱动模块                                                            

options bond0 miimon=100 mode=0   #每100毫秒监控。                                                              

[root@mq02 ~]# modprobe  bonding               #加载模块                                      

[root@mq02 ~]# lsmod  |grep bonding            #显示模块信息                                                

   bonding               127060  0

   8021q                  25058  1 bonding

   ipv6                  322541  147 bonding

miimon是指多久时间要检查网络一次,单位是ms(毫秒)这边的100,是100ms,即是0.1秒

mode共有七种(0~6),这里解释两个常用的选项。

mode=0:表示load balancing (round-robin)为负载均衡方式,两块网卡都工作。

mode=1:表示fault-tolerance (active-backup) 自动主备模式,其中一块网卡在工作(若eth0断掉),则自动切换到另一个块网卡(eth1做备份)。

  1. 重启网络服务,使配置生效

[root@mq02 ~]# service network restart

Android 双网卡 绑定网卡_Ethernet

[root@mq02 ~]# cat /proc/net/bonding/bond0  可以看到当前网卡处于负载均衡模式

Android 双网卡 绑定网卡_Android 双网卡 绑定网卡_02

  1. 测试

1、当网卡处于负载均衡模式时,停掉其中一块网卡eth1时,网络还能继续通信。

[root@mq02 ~]# ifdown eth1

Android 双网卡 绑定网卡_root用户_03

可以看到网络还可以继续ping通。

Android 双网卡 绑定网卡_Ethernet_04

2、当网卡处于fault-tolerance (active-backup) 自动主备模式时,即mode=1时,停掉其中一块网卡时,不会出现网络中断,系统会按照/etc/rc.d/rc.local里指定网卡的顺序工作,机器仍能对外服务,起到了失效保护的功能。

[root@mq02 ~]# vi /etc/rc.d/rc.local

ifenslave bond0 eth0 eth1

[root@mq02 ~]# vi /etc/host.conf

order hosts,bind   #指定网卡的顺序

下面可以看到网卡处于fault-tolerance (active-backup) 自动主备模式,当前Active的网卡为eth0。

Android 双网卡 绑定网卡_Ethernet_05

 

停掉网卡eth0时,网卡切换到eth1,当前Active的网卡为eth1。

Android 双网卡 绑定网卡_Ethernet_06

继续把eth0 up起来,可以看到下面eth0的状态是up的。

[root@mq02 ~]# ifup eth0

Android 双网卡 绑定网卡_root用户_07