0%

LVS高并发负载均衡实验搭建

本文主要记录使用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
2
3
4
echo 1 > /proc/sys/net/ipv4/conf/ens33/arp_ignore  #ens33为网卡名称
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/ens33/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
  • arp_ignore
    • 0:只要本地配置的有相应地址,就给予响应
    • 1:仅在请求的目标(MAC)地址配置请求到达接口上的时候,才给予响应、
  • arp_announce
    • 0:将本地任何接口上的任何地址向外通告
    • 1:试图仅向目标网络通告与其网络匹配的地址
    • 2:仅向与本地接口上地址匹配的网络进行通告

2.2、隐藏VIP配置

1
2
# IP配置到lo环回接口上,lo:2为lo网卡接口的子接口,数字随意。
ifconfig lo:2 192.168.45.100 netmask 255.255.255.255

image-20210605224206880

2.3、安装测试服务器

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

1
2
3
4
5
6
# 安装apache应用服务器
yum install -y httpd
# 配置一个简单页面
echo "from 192.168.45.10" > /var/www/html/index.html
# 启动apache,启动后访问返回的内容如下面的截图中
service httpd start

image-20210605224352368

注意:使用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

image-20210605225207435

3.2、配置负载均衡规则

1
2
3
4
5
6
7
8
# -A 配置VS服务,-t tcp协议,-s rr:负载调度策略轮询
ipvsadm -A -t 192.168.45.100:80 -s rr
# 配置第一台RS服务:-a 配置RS服务 -r RS的IP地址 -g DR模式,-w 权重
ipvsadm -a -t 192.168.45.100:80 -r 192.168.45.10 -g -w 1
# 配置第二台RS服务
ipvsadm -a -t 192.168.45.100:80 -r 192.168.45.10 -g -w 1
# 显示配置好的规则
ipvsadm -ln

image-20210605225705035

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

image-20210605230052138

第二部分、高可用

上面的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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
! Configuration File for keepalived
vrrp_instance VI_1 {
# 主
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
# VIP配置
192.168.45.100/24 dev ens33 label ens33:8
}
}
# VS负载规则配置
virtual_server 192.168.45.100 80 {
delay_loop 6
# 轮询
lb_algo rr
# DR模式
lb_kind DR
persistence_timeout 0
protocol TCP
# RS服务器配置
real_server 192.168.45.10 80 {
weight 1
# RS服务健康检查配置
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.45.12 80 {
weight 1
HTTP_GET {
url {
path /
status_code 200
}
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}

注意:配置好后使用过程中遇到一个坑,手动配置的VIP在同一网段上的其他机器上可以ping通,但是keepalived配置的就是ping不通,可能的原因是keepalived开启了vrrp_strict,开启后表示严格执行vrrp协议,不支持节点单播。如果配置中有这项配置,则需要把这项配置删除可顺利配置成功。

  • 备VS配置

唯一区别为state BACKUP

4、启动keepalived

1
service keepalived start

至此,配置完成,可以顺利实现LVS高并发、高可用,但是keepalived不是高可用,后续继续研究。