前言
负载均衡技术和高可用技术介绍
- 负载均衡技术
负载均衡技术的主要思想就是如何根据某种算法将网络的业务流量平均分配到不同的服务器和网络设备上去,以减轻单台服务器和网络设备的负担, 从而提高整个系统的效率。负载均衡既可以由有负载均衡功能的硬件实现,也可以通过一些专用的软件来实现,负载均衡是一种策略,它能让多台服务器或多条链路共同承担一些繁重的计算或者 I/O 任务,从而以较低的成本消除网络瓶颈,提高网络的灵活性和可靠性。 - 高可用技术
实现负载均衡首先是基于网络的高可用性提出来的,高可用技术是容错技术的一个分支。实现系统的高可用性最简单的一个办法就是冗余。完整的网络负载均衡和高可用性网络技术有两个方面构成,一是多服务器的绑定和负载均衡,二是一个服务器内部的多网卡绑定的负载均衡,这里主要讨论一个服务器内部的多网卡绑定时的负载均衡。
Bond的工作模式
Linux bonding驱动提供了一个把多个网络接口设备捆绑为单个的网络接口设置来使用,用于网络负载均衡及网络冗余。
bonding一共有7种工作模式(mode):
- bond=0,(balance-rr) Round-robin policy: (平衡轮询策略):传输数据包顺序是依次传输,直到最后一个传输完毕,此模式提供负载平衡和容错能力。
- bond=1,(active-backup) Active-backup policy:(活动备份策略):只有一个设备处于活动状态。一个宕掉另一个马上由备份转换为主设备。mac地址是外部可见得。此模式提供了容错能力。
- bond=2,(balance-xor) XOR policy:(平衡策略):传输根据[(源MAC地址xor目标MAC地址)mod设备数量]的布尔值选择传输设备。 此模式提供负载平衡和容错能力。
- bond=3,(broadcast) Broadcast policy:(广播策略):将所有数据包传输给所有设备。此模式提供了容错能力。
- bond=4,(802.3ad) IEEE 802.3ad Dynamic link aggregation. IEEE 802.3ad 动态链接聚合:创建共享相同的速度和双工设置的聚合组。此模式提供了容错能力。每个设备需要基于驱动的重新获取速度和全双工支持;如果使用交换机,交换机也需启用 802.3ad 模式。
- bond=5,(balance-tlb) Adaptive transmit load balancing(适配器传输负载均衡):通道绑定不需要专用的交换机支持。发出的流量根据当前负载分给每一个设备。由当前设备处理接收,如果接受的设 备传不通就用另一个设备接管当前设备正在处理的mac地址。
- bond=6,(balance-alb) Adaptive load balancing: (适配器负载均衡):包括mode5,由 ARP 协商完成接收的负载。bonding驱动程序截获 ARP在本地系统发送出的请求,用其中之一的硬件地址覆盖从属设备的原地址。就像是在服务器上不同的人使用不同的硬件地址一样。
操作环境与具体配置
博主使用的是CentOS 7.9,minimal安装即可,或者可以加以安装net-tools。
yum install net-tools -y //安装软件包,对本次操作无加成,可跳过
正片开始
首先检查服务器是否支持bondind模式
# modinfo bonding
接下来查看服务器网卡命名,在/etc/sysconfig/network-scripts下
cd /etc/sysconfig/network-script
ls
记住所需要配置的网卡名,网卡命名方式为ifcfg-enxxx,然后创建bonding文件
vi /etc/sysconfig/network-scripts/ifcfg-bond0
将bond配置贴入
DEVICE=bond0
TYPE=Bond
IPADDR=172.16.0.183 //这里的网关,ip地址,子网掩码都可以根据自己的内网修改
NETMASK=255.255.255.0 //
GATEWAY=172.16.0.1 //
DNS1=114.114.114.114
USERCTL=no
BOOTPROTO=none
ONBOOT=yes
BONDING_MASTER=yes
BONDING_OPTS="mode=1 miimon=100" //使用模式1
上面的BONDING_OPTS="mode=6 miimon=100" 表示这里配置的工作模式是mode6(adaptive load balancing), miimon表示监视网络链接的频度 (毫秒), 我们设置的是100毫秒, 根据你的需求也可以指定mode成其它的负载模式。
假定linux服务器的两张网卡为ifcfg-enp33和ifcfg-enp66,接下来备份网卡配置并修改这两张网卡的配置
cp /etc/sysconfig/network-scripts/ifcfg-enp33 /etc/sysconfig/network-scripts/ifcfg-enp33.bak
vi /etc/sysconfig/network-scripts/ifcfg-enp33
将下面配置导入
DEVICE=enp33
USERCTL=no
ONBOOT=yes
MASTER=bond0 # 需要和上面的ifcfg-bond0配置文件中的DEVICE的值对应
SLAVE=yes
BOOTPROTO=none
第二张网卡enp66
cp /etc/sysconfig/network-scripts/ifcfg-enp66 /etc/sysconfig/network-scripts/ifcfg-enp66.bak
vi /etc/sysconfig/network-scripts/ifcfg-enp66
将下面配置导入
DEVICE=enp66
USERCTL=no
ONBOOT=yes
MASTER=bond0 # 需要和上面的ifcfg-bond0配置文件中的DEVICE的值对应
SLAVE=yes
BOOTPROTO=none
由于使用的是bonding模式,在系统中是不需要通过NetworkManager服务去加载网卡,所以在这里将NetworkManager服务关闭并禁止
systemctl stop NetworkManager.service # 停止NetworkManager服务
systemctl disable NetworkManager.service # 禁止开机启动NetworkManager服务
这里博主并没有去了解清楚太多详细的东西,只是NetworkManager服务会影响bonding模式的启动
加载bonding模块
modprobe --first-time bonding
没有提示说明加载成功, 如果出现modprobe: ERROR: could not insert 'bonding': Module already in kernel说明你已经加载了这个模块, 就不用管了
你也可以使用lsmod | grep bonding查看模块是否被加载
lsmod | grep bonding
bonding 136705 0
重启网络服务
systemctl restart network //最后一步
此时可以查看系统网络信息
命令1 ip add
命令2 ifconfig //此命令需要安装net-tools,二者选一即可
测试
在模式1中测试,mode=1模式下丢包1个,恢复网络时( 网线插回去 ) 基本上没有丢包,说明高可用功能和恢复的时候都正常
因为只做了mode1,7种模式中有几种是需要与网络设备共同配置的,这里就不在演示了,本次bonding配置就到这里结束。