linux中配置双网卡实现双网卡绑定,负载均衡

2021-12-23 18:13:09 浏览数 (1)

配置双网卡的目的:

1、实现冗余

2、负载均衡

linux 主机安装双网卡,共享一个IP地址,对外提供访问,实际 同样 连接两条物理线路到交换机

实现平时 双网卡同时工作,分流网络压力,同时提供冗余备份,监控,防止物理线路的单点故障。

用于关键性节点服务器,高网络IO服务器,网络共享存储服务器等。。。。。

Linux bonding 驱动模块 提供了一种方法,用以把多个网络接口(network interface)组合成一个 逻辑的 "bonded" 接口。

Bonded 接口的工作方式取决于驱动的模式:不同的模式提供了热备份或负载均衡等不同的服 务。

此外,驱动还会监控链路的可用性。大多数目前发布的Linux内核都以模块(module)方式带了bonding驱动,

ifenslave工具(主要配置工具)也都已经安装好。

• 轮询策略(round robin),mode=0,按照设备顺序依次传输数据包,提供负载均衡和容错能力

• 主备策略(active-backup),mode=1,只有主网卡处于工作状态,备网卡处于备用状态,主网卡坏掉后备网卡开始工作,提供容错能力

• 异或策略(load balancing (xor)),mode=2,根据源MAC地址和目的MAC地址进行异或计算的结果来选择传输设备,提供负载均衡和容错能力

• 广播策略(fault-tolerance (broadcast)),mode=3,将所有数据包传输给所有接口通过全部设备来传输所有数据,一个报文会复制两份通过bond下的两个网卡分别发送出去,提供高容错能力

• 动态链接聚合(lacp),mode=4,按照802.3ad协议的聚合自动配置来共享相同的传输速度,网卡带宽最高可以翻倍,链路聚合控制协议(LACP)自动通知交换机聚合哪些端口,需要交换机支持 802.3ad协议,提供容错能力

• 输出负载均衡模式(transmit load balancing),mode=5,输出负载均衡模式,只有输出实现负载均衡,输入数据时则只选定其中一块网卡接收,需要网卡和驱动支持ethtool命令

输入/输出负载均衡模式(adaptive load balancing),mode=6,输入和输出都实现负载均衡,需要网卡和驱动支持ethtool命令

CentOS双网卡绑定,实现负载均衡

bind0 IP 地址: 192.168.10.54

先关闭两张网卡

代码语言:javascript复制
[root@uplooking ~]# ifdown ens33
[root@uplooking ~]# ifdown ens38

新建网卡配置文件

代码语言:javascript复制
[root@uplooking /etc/sysconfig/network-scripts]#vim ifcfg-bond0

 ifcfg-bond0 配置文件 

TYPE=Ethernet
BOOTPROTO=static
NAME=bond0
DEVICE=bond0
IPADDR="192.168.10.54"
NETMASK=255.255.255.0
GATEWAY=192.168.10.2
ONBOOT=yes
BONDING_OPTS="miimon=100 mode=6"     ##bonding 参数直接在网卡配置文件中指派,并且开机可以自动生效
                                      ## mode=1   1为储备模式, 推荐为 6 ,不会浪费资源。

ifcfg-ens33 配置文件

代码语言:javascript复制
TYPE=Ethernet
BOOTPROTO=none
NAME=ens33
DEVICE=ens33
ONBOOT=yes
MASTER=bond0
SLAVE=yes

ifcfg-ens38 配置文件

代码语言:javascript复制
TYPE=Ethernet
BOOTPROTO=none
NAME=ens38
DEVICE=ens38
ONBOOT=yes
MASTER=bond0
SLAVE=yes

修改/etc/modprobe.d/dist.conf文件

在此文件中添加以下内容:

alias bond0 bonding,表示系统在启动时加载bonding模块,对外虚拟网络接口设备为 bond0

miimon=100,表示系统每100ms监测一次链路连接状态,如果有一条线路不通就转入另一条线

mode=1,表示绑定模式为1

primary=eth0,系统首先eth0作为bond0接口与外界信息的传输接口

修改配置文件/etc/rc.local

在此文件中添加以下内容:

modprobe bonding miimon=100 mode=1

重启网络

代码语言:javascript复制
 systemctl restart network

观察验证:

代码语言:javascript复制
[root@uplooking ~]# ifconfig

查看 bind0 的状态

代码语言:javascript复制
  ip addr 或者  ifconfig 

状态信息验证

代码语言:javascript复制
cat /proc/net/bonding/bond0 

文件可以显示 双网卡 配置信息。 ens 33 和 ens 38 的 启用状态。

通过查阅该文件,获取bond0 网卡的工作状态信息

通过断开不同网卡,观察改文件的信息变化。

代码语言:javascript复制
[root@server-18 ~]# watch -n 1 "cat /proc/net/bonding/bond0"



 Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)

Bonding Mode: adaptive load balancing
Primary Slave: None
Currently Active Slave: ens37
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: ens33
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 3
Permanent HW addr: 00:0c:29:e6:3b:9d
Slave queue ID: 0

Slave Interface: ens38
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 3
Permanent HW addr: 00:0c:29:e6:3b:a7   

验证负载均衡的效果:

http-02 ping 192.168.10.54

arp -a 查询 arp 表:发现 192.168.10.54 在 00:0C:29:58:4C:31 (ens33) 网卡上

http-03 ping 192.168.10.54

arp -a 查询 arp 表:发现 192.168.10.54 在 00:0C:29:58:4C:3B (ens33) 网卡上

取消 bond0 网卡的方法

​ 1、ifdown bond0 ##此时网络断开

​ 2、移除ifcfg-bond0 网卡的配置文件,建议不要直接删除,而是移到别的位置,备份起来、

​ root@server-18 /etc/sysconfig/network-scripts#mv ifcfg-bond0 /root

​ echo -bond0 > /sys/class/net/bonding_masters ## 移除系统中的 bonding状态。

​ 3、修改 ens33 ens38 网卡配置,解除 与 bond0 网卡的从属关系

​ BOOTPROTO=static

​ MASTER=bond0 去掉

​ SLAVE=yes 去掉

​ 加上自己网卡的原先配置。

​ 4、 systemctl restart network

​ 5、 ifconfig再次观察

下一篇: Linux对大容量磁盘分区→

0 人点赞