本文主要记录使用LVS搭建DR模式负载均衡的实验,第一部分高并发。只使用LVS命令方式手动搭建;第二部分高可用。使用keepalived来自动配置LVS,以及保证负载均衡器达到高可用(HA)。
第一部分、高并发
1、环境准备
准备三台虚拟机node1、node2、node3,本操作实验使用的系统为centos7系统,其中node1作为负载均衡服务器(Virtual Server,后文简称VS,其IP简称VIP),node2和node3做为服务端服务器(Real Server,后文简称为RS,其IP简称RIP),具体流程为客户端会发送请求到VS负载均衡器的VIP地址,然后VS会把对应的请求根据负载策略负载到RS端。
2、RS服务器配置
2.1、arp协议内核参数修改
该步骤为在RS端配置一个隐藏的VIP做准备。
1 | echo 1 > /proc/sys/net/ipv4/conf/ens33/arp_ignore #ens33为网卡名称 |
- arp_ignore
- 0:只要本地配置的有相应地址,就给予响应
- 1:仅在请求的目标(MAC)地址配置请求到达接口上的时候,才给予响应、
- arp_announce
- 0:将本地任何接口上的任何地址向外通告
- 1:试图仅向目标网络通告与其网络匹配的地址
- 2:仅向与本地接口上地址匹配的网络进行通告
2.2、隐藏VIP配置
1 | # IP配置到lo环回接口上,lo:2为lo网卡接口的子接口,数字随意。 |

2.3、安装测试服务器
本次测试安装的是apache服务器,其中有一个简单的页面,请求后显示当前RS服务器的IP地址,方便实验。也可以用其他的测试应用,比如nginx,springboot的一个简单等等。
1 | # 安装apache应用服务器 |

注意:使用apache服务器需要注意一个问题,在http1.1协议时,服务器默认开启了keepalive,环境搭建完成测试的时候会出现一个问题(本来配置了轮询策略,但是在请求VS后,RS很久才会切换到另外一台),需要在httpd配置文件中关闭keepalive(keepalive off)。
3、VS服务器配置
3.1、安装LVS管理模块ipvsadm
linux系统内核默认安装了LVS负载均衡模块,即ipvs,我们只需要按住交互的接口模块,即ipvsadm即可。
1 | yum install -y ipvsadm |
3.1、配置VIP
1 | ifconfig ens33:2 192.168.45.100/24 |

3.2、配置负载均衡规则
1 | # -A 配置VS服务,-t tcp协议,-s rr:负载调度策略轮询 |

到此LVS高可用配置完成,访问http://192.168.45.100,刷新即可看到实验结果:上面配置的为rr轮询负载调度策略,没请求一次显示出来的IP地址不一样。

第二部分、高可用
上面的VS配置存在一些弊端:
- VS单点故障。
- 配置在内存里面,关机后即消失。
- RS健康状态无法检查。
针对上面的一些弊端,现在引入keepalived工具,实现VS高可用,配置写在配置文件里面,keepalived会自动帮我们配置VS的配置,而且keepalived还可以监控RS的监控状态,及时把存在问题的RS从VS负载规则里面剔除。
1、环境准备
需要再准备一台虚拟机node4,用来做LVS的备机,即VS服务为主备模式。
2、安装keepalived
1 | yum install -y keepalived |
3、配置keepalived
配置文件/etc/keepalived/keep
- 主VS配置:只列出关键需要配置的部分
1 | ! Configuration File for keepalived |
注意:配置好后使用过程中遇到一个坑,手动配置的VIP在同一网段上的其他机器上可以ping通,但是keepalived配置的就是ping不通,可能的原因是keepalived开启了vrrp_strict,开启后表示严格执行vrrp协议,不支持节点单播。如果配置中有这项配置,则需要把这项配置删除可顺利配置成功。
- 备VS配置
唯一区别为state BACKUP
4、启动keepalived
1 | service keepalived start |
至此,配置完成,可以顺利实现LVS高并发、高可用,但是keepalived不是高可用,后续继续研究。