LVS-DR + Keepalived 搭建负载均衡
接上一篇:LVS-DR实验记录
前言:LVS前面说了,这里只简单说一下Keepalived吧
简介:Keepalived是集群管理中保证集群高可用的一个服务软件,用来防止单点故障。主要用于提高基于TCP/IP(如HTTP、HTTPS等)服务的可用性。它通常与LVS(Linux Virtual Server)一起使用,但也可以独立用于其他类型的TCP/UDP服务。
Keepalived主要功能:
高可用性:通过虚拟路由冗余协议(VRRP)实现高可用性。VRRP是一种遵循标准的协议,用于实现网络路径的故障转移。
负载均衡:与LVS集成,提供基于IP包的负载均衡。
健康检查:对应用程序或服务进行健康检查,以监测服务状态,并根据结果进行故障转移。
一,实验背景
1.1,使用了4台VMware虚拟机分别作为:LVS-DR1/2、RS1/2;而Client端我尝试用物理机。具体IP划分如下:
Client:物理机(VMnet8)192.168.229.1
VIP(lo:0):192.168.229.200
LVS1(ens33):192.168.229.133
LVS2(ens33):192.168.229.135
RS1-WEB1:192.168.229.142
RS2-WEB2:192.168.229.143
PS:注意要关闭防火墙和SELinux
1.2,在2台LVS-DR上启用路由转发、4台虚拟机上都添加VIP
[root@lvs-dr ~]#sysctl net.ipv4.ip_forward #查看是否开启路由转发
[root@lvs-dr ~]#net.ipv4.ip_forward = 0 #“0”代表没有开启
[root@lvs-dr ~]#vim /etc/sysctl.conf #开启转发功能
[root@lvs-dr ~]#net.ipv4.ip_forward = 1 #添加进去
[root@lvs-dr ~]#sysctl -p #使生效,"1"代表开启成功
ifconfig lo:0 192.168.229.200/32 #添加VIP到环回口lo:0(在lvs-dr,web1/2上都要配置相同VIP)
二,配置LVS-DR(略,见上一篇)
三,RS-WEB服务器配置(略,见上一篇)
四,安装配置Keepalived
安装Keepalived
yum install -y keepalived
#配置keepalived.conf,以下是LVS1的配置(LVS1设为master)
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived
global_defs {
router_id LVS1 #两边不一样。
}
vrrp_instance VI_1 {
state MASTER #另外一台机器是BACKUP
interface ens33 #心跳网卡
virtual_router_id 100 #虚拟路由编号,主备要一致
priority 150 #优先级
advert_int 1 #检查间隔,单位秒
authentication {
auth_type PASS
auth_pass 12345
}
virtual_ipaddress {
192.168.229.200
}
}
virtual_server 192.168.229.200 80 { #LVS 配置,VIP
delay_loop 3 #服务论询的时间间隔,#每隔3秒检查一次real_server状态
lb_algo rr #LVS 调度算法
lb_kind DR #LVS 集群模式
protocol TCP #用TCP检查
real_server 192.168.229.142 80 {
weight 1 #权重,默认为1
TCP_CHECK {
connect_timeout 3 #健康检查方式,连接超时时间
nb_get_retry 3 #重连次数
}
}
real_server 192.168.229.143 80 {
weight 1
TCP_CHECK {
connect_timeout 3
nb_get_retry 3
}
}
}
LVS2的配置只需要修改以下几点:
#router_id
router_id LVS2
#state 角色
state BACKUP
#priority 优先级
priority 100
最后启用Keepalived
systemctl start keepalived.service
systemctl enable keepalived.service
查看master选举是否成功
五,高可用性测试
所有设备都完好的状态:
在客户端使用命令行测试
C:\Users\Win10>curl 192.168.229.200
This is RS2-Web2
C:\Users\Win10>curl 192.168.229.200
This is RS1-Web1
C:\Users\Win10>curl 192.168.229.200
This is RS2-Web2
C:\Users\Win10>curl 192.168.229.200
This is RS1-Web1
查看LVS统计值
[root@lvs-dr1 ~]# ipvsadm -L -c
IPVS connection entries
pro expire state source virtual destination
TCP 00:05 FIN_WAIT 192.168.229.1:16176 lvs-dr1:http 192.168.229.142:http
TCP 00:03 FIN_WAIT 192.168.229.1:16173 lvs-dr1:http 192.168.229.143:http
TCP 00:06 FIN_WAIT 192.168.229.1:16178 lvs-dr1:http 192.168.229.142:http
TCP 00:06 FIN_WAIT 192.168.229.1:16177 lvs-dr1:http 192.168.229.143:http
可以看到master(LVS1)以及后面的web1/2都正常,下面我们把LVS1的keepalived服务stop,看看LVS2能不能切换为master并接管LVS-DR的服务
[root@lvs-dr1 ~]# systemctl stop keepalived.service
在LVS2上查看日志
再次在客户端访问web,查看LVS2的负载均衡功能是否正常
可以看到LVS2已经成功接管,后面关掉WEB1的httpd服务,查看是否所有请求都给到WEB2
[root@web1 ~]# systemctl stop httpd.service
#在Win10客户机上测试
C:\Users\win10>curl 192.168.229.200
This is RS2-Web2
C:\Users\win10>curl 192.168.229.200
This is RS2-Web2
C:\Users\win10>curl 192.168.229.200
This is RS2-Web2
C:\Users\win10>curl 192.168.229.200
This is RS2-Web2
通过日志可以看到keepalived检测到WEB1故障
可以看到客户端所有的请求也都给了WEB2。
六,还原
最后把所有都恢复(开启LVS1的keepalived服务、开启web1的httpd服务),查看是否能恢复初始状态(keepalived master=LVS1,客户端访问VIP会看到轮询效果)
[root@lvs-dr1 ~]# systemctl start keepalived.service
[root@web1 ~]# systemctl start httpd.service
在客户端访问VIP测试
C:\Users\win10>curl 192.168.229.200
This is RS1-Web2
C:\Users\win10>curl 192.168.229.200
This is RS2-Web1
C:\Users\win10>curl 192.168.229.200
This is RS1-Web2
C:\Users\win10>curl 192.168.229.200
This is RS2-Web1
评论
发表评论