Centos 7.2中双网卡绑定及相关问题踩坑记录

  • Post category:Linux

CentOS 7.2中双网卡绑定及相关问题踩坑记录

简介

在服务器网络部署过程中,双网卡绑定技术能够有效提高网络带宽、负载均衡和冗余备份能力。本篇攻略主要介绍在CentOS 7.2系统下,如何进行双网卡绑定,并记录在操作过程中遇到的问题及解决方案。

安装与配置CentOS7.2系统

安装完CentOS7.2操作系统后,需要对系统进行相关配置和升级。

配置网络

vi /etc/sysconfig/network-scripts/ifcfg- 中添加以下配置,使得网卡 eth0eth1 能够被启用。

# ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=none
DEVICE=eth0
ONBOOT=yes
NM_CONTROLLED=no

# ifcfg-eth1
TYPE=Ethernet
BOOTPROTO=none
DEVICE=eth1
ONBOOT=yes
NM_CONTROLLED=no

升级系统内核

为了支持网络绑定技术,需要升级系统内核版本到3.10.0-229或以上。运行以下命令进行内核升级:

yum -y update kernel

重启系统

请注意,系统内核升级后需要重启以使内核更新生效。

配置bond0

在完成系统配置后,需要进行网卡绑定配置。本篇攻略主要以 mode 1 方式进行绑定,即使用 balance-rr 算法进行负载均衡。

安装ifenslave

ifenslave是一个Linux内核模块,可以实现网卡绑定技术。运行以下命令进行安装:

yum -y install ethtool ifenslave

配置bond0

vi /etc/sysconfig/network-scripts/ifcfg-bond0 中添加以下配置,以添加bond0网卡:

DEVICE=bond0
ONBOOT=yes
BOOTPROTO=none
NM_CONTROLLED=no
BONDING_OPTS="mode=1 miimon=100"

请注意,该配置中 BONDING_OPTS 行中的 miimon 选项用于检测链路故障,其值单位为毫秒,本示例中的 100 表示每100毫秒检测一次。

配置eth0和eth1

vi /etc/sysconfig/network-scripts/ifcfg-eth0 中添加以下配置,使得 eth0 网卡能够连接到bond0:

DEVICE=eth0
ONBOOT=yes
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
NM_CONTROLLED=no

vi /etc/sysconfig/network-scripts/ifcfg-eth1 中添加以下配置,使得 eth1 网卡能够连接到bond0:

DEVICE=eth1
ONBOOT=yes
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
NM_CONTROLLED=no

重启网络服务

运行以下命令重启网络服务,使得配置生效。

systemctl restart network

检查绑定

运行以下命令检查是否成功绑定:

cat /proc/net/bonding/bond0

在正确配置后,应该会看到一段类似如下的输出:

Bonding Mode: load balancing (round-robin)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: eth0
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:45:d0:7e
Slave queue ID: 0

Slave Interface: eth1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:0c:29:45:d0:88
Slave queue ID: 0

如上述输出中展示的内容,即为成功绑定两块网卡的bond0状态展示。

实例

示例1: 实现负载均衡

以LVS为例,通过双网卡绑定的负载均衡技术来进行多台服务器的节点进行访问控制,以实现基于LVS的负载均衡。

#安装keepalived
yum install keepalived –y

#在/etc/sysconfig/keepalived文件增加以下配置
KEEPALIVED_OPTIONS="-D" 

#在/etc/keepalived/keepalived.conf文件增加以下配置
 #虚拟IP及状态监控配置;
 vrrp_instance VI_1 {  
    state MASTER #keepalived 的状态,双机热备部署时STATE 只能取值MASTER,BACKUP之一
    interface bond0  #关联的bond口,必须和/etc/sysconfig/network-scripts/ifcfg-bond0一致
    virtual_router_id 51 #就是个唯一值,同一个virtual_router_id 下,备用机和主机的优先级 priority 必须不同,以priority 不同作为主备的标识
    mcast_src_ip 192.168.2.29 # 即本机IP,这里虚拟的是192.168.2.31,所以要写31
    priority 200 #代表这个机器得到了直接访问VIP的权利,当然n台中优先级最高的那个保留权力,其它的打道回府了。取值范围0-255
    advert_int 5 #VRRP 报文发送间隔时间
    authentication { #验证的相关配置
        auth_type PASS
        auth_pass 123456
    }
    virtual_ipaddress { #虚拟VIP
        192.168.2.187        #LVS的虚拟IP
    }
    track_script { #状态检查脚本
        chk_http_port {
            script "/etc/keepalived/chk_http_port.sh"
            interval 1
            weight 10
        }
    }
}

#在增加自定义脚本,这里用网卡ping网关作为检测状态实时脚本,可根据双主机实时需求进行其他的状态检验方案
vi /etc/keepalived/chk_http_port.sh 

#!/bin/sh 
A=`ping -c 3 -I bond0 192.168.2.1|grep received|awk '{print $4}'` 
if [ $A == 0 ];then 
    ifconfig bond0 down 
    sleep 2 
    ifconfig bond0 up   # remove the bonding before up 
    echo "$(date "+%Y-%m-%d %H:%M:%S"):bond0 is down,ifconfig down and up bond0" >> /tmp/lvs.log 
    exit 1 
fi 
echo "$(date "+%Y-%m-%d %H:%M:%S"):bond0 is ok" >> /tmp/lvs.log
exit 0 

#启动keepalived服务
/usr/sbin/keepalived -f /etc/keepalived/keepalived.conf
systemctl start keepalived  #systemctl启动也可以

示例2: 实现容错备份

通过双网卡绑定技术,将eth0和eth1网口进行绑定,实现有效的容错备份。在eth0端口发生故障时,系统能够自动切换到eth1备份端口以维持系统正常访问。

# 在物理机器中查看 ethtool eth0和ethtool eth1 是否支持 bonding
ethtool eth0 | grep "Link detected:"
ethtool eth1 | grep "Link detected:"

# 安装 bonding 模块
yum install -y bonding

# 修改配置文件 /etc/modprobe.d/bonding.conf 
echo 'alias bond0 bonding
options bond0 mode=1 primary=eth0 miimon=100' > /etc/modprobe.d/bonding.conf

# 按照上面进行相关配置后,重启网络服务
systemctl restart network

至此,即可成功实现容错备份功能。

注意事项

在进行双网卡配置时,需要注意以下事项:

  • 在进行网卡绑定后,建议先关闭firewalld或iptables以便进行测试;

  • 在进行内核升级时,请谨慎操作,建议在备份后进行;

  • 在运行过程中,建议注重细节处理,特别是在脚本编写和相关命令操作中。