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



评论

此博客中的热门博文

ELK日志平台——Elasticsearch 8.x安装部署

Linux终端中文字体显示乱码问题解决方法

部署ELK日志平台集群(Elasticsearch, Logstash, Kibana)实验记录