LVS-DR高可用-Keepalived
目录
Keepalved双机热备
核心概念
关键组件
工作流程
实例环境
配置keepalived
Web服务器配置
Keepalved双机热备
Keepalived双机热备是一种基于VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)实现的高可用性解决方案,广泛应用于Linux服务器集群中,确保关键服务的持续运行
核心概念
-
VRRP协议:
通过虚拟路由器(Virtual Router)实现冗余,同一组内的物理服务器共享一个虚拟IP(VIP)。主服务器(MASTER)负责处理流量,备份服务器(BACKUP)实时监控主服务器状态,若主服务器故障,备份服务器自动接管VIP,确保服务不中断。 -
角色分工:
- MASTER:当前提供服务的服务器,拥有最高优先级。
- BACKUP:备用服务器,监控MASTER状态,随时准备接管
关键组件
- 虚拟IP(VIP):
客户端通过VIP访问服务,实际请求由MASTER处理。MASTER故障时,VIP自动漂移至BACKUP,实现无缝切换。 - 优先级(Priority):
MASTER的优先级高于BACKUP(如100 vs 90),确保故障时优先级最高的BACKUP接管。 - 健康检查(Health Check):
Keepalived定期检测服务(如Nginx、MySQL)是否存活。若服务异常,自动降低服务器优先级,触发VIP切换。
工作流程
- 启动阶段:
- 所有服务器启动Keepalived服务,MASTER绑定VIP并开始处理流量。
- BACKUP进入监听状态,不处理流量。
- 正常运行:
- MASTER定期发送VRRP广播包,BACKUP接收并确认MASTER存活。
- 故障切换:
- 若MASTER宕机或服务异常,BACKUP检测到心跳超时,自动提升为MASTER并绑定VIP。
- 客户端无感知,服务持续可用。
- 故障恢复:
- 原MASTER恢复后,若优先级仍最高,可重新抢占VIP(需配置抢占模式)
实例环境
两台keepalived、两台web服务器、一台客户机
配置keepalived
01、02关闭防火墙
[root@localhost ~]# systemctl stop firewalld #关闭防火墙
[root@localhost ~]# setenforce 0 #关闭系统内核
01、02下载 keepalived
[root@localhost ~]# dnf -y install keepalived #下载keepalved
01、02修改配置文件
[root@localhost ~]# cd /etc/keepalived/
[root@localhost keepalived]# cp keepalived.conf.sample keepalived.conf
01配置文件
[root@localhost ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalivedglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}7
notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id LVS_01 #idvrrp_skip_check_adv_addr#vrrp_strict #严格模式vrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_instance VI_1 {state MASTER #先前定义的主interface ens33 #ens33virtual_router_id 51 #热备组 priority 100 #优先级advert_int 1authentication { #认证类型auth_type PASS #类型auth_pass 1111 #密码}virtual_ipaddress {192.168.10.100 #VIP漂移地址}
}virtual_server 192.168.10.100 80 { #虚拟服务器(虚拟VIP)delay_loop 6lb_algo rr #负载均衡调度算法lb_kind DR #工作模式#persistence_timeout 50 #网页超时时间protocol TCP #传输层协议real_server 192.168.10.103 80 { #真实服务器weight 1 #权重TCP_CHECK { #TCP健康检查connect_port 80 #检查端口connect_timeout 3 #连接超时时间 retry 3 #重试次数delay_before_retry 3 #重试间隔}}real_server 192.168.10.104 80 { #真实服务器weight 1 #权重TCP_CHECK { #TCP健康检查connect_port 80 #检查端口connect_timeout 3 #连接超时时间retry 3 #重试次数delay_before_retry 3 #重试间隔}}
}
02配置文件
[root@localhost ~]# vim /etc/keepalived/keepalived.conf
! Configuration File for keepalivedglobal_defs {notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id LVS_02 #idvrrp_skip_check_adv_addr#vrrp_strict #注释严格模式vrrp_garp_interval 0vrrp_gna_interval 0
}vrrp_instance VI_1 {state BACKUP #先前定义的主interface ens33 #网卡信息ens33virtual_router_id 51 #热备组priority 90 #优先级advert_int 1authentication { #认证类型auth_type PASS #类型auth_pass 1111 #密码}virtual_ipaddress {192.168.10.100 #VIP漂移地址}
}virtual_server 192.168.10.100 80 { #虚拟服务器(虚拟VIP)delay_loop 6lb_algo rr #负载均衡调度算法lb_kind NAT #工作模式#persistence_timeout 50 #网页超时时间protocol TCP #传输层协议real_server 192.168.10.103 80 { #真实服务器weight 1 #权重TCP_CHECK{ #TCP健康检查connect_port 80 #检查端口connect_timeout 3 #连接超时时间retry 3 #重试次数delay_before_retry 3 #重试间隔}}real_server 192.168.10.104 80 { #真实服务器weight 1 #权重TCP_CHECK{ #TCP健康检查connect_port 80 #检查端口connect_timeout 3 #连接超时时间retry 3 #重试次数delay_before_retry 3 #重试间隔}}
}
启动Keepalived
[root@localhost ~]# systemctl restart keepalived
Web服务器配置
03、04关闭防火墙
[root@localhost ~]# systemctl stop firewalld #关闭防火墙
[root@localhost ~]# setenforce 0 #关闭内核
下载httpd
[root@localhost ~]# dnf -y install httpd
配置网站内容
[root@localhost ~]# echo "33333333">/var/www/html/index.html #03网站内容
[root@localhost ~]# echo "444444444">/var/www/html/index.html #04网站内容
启动httpd
[root@localhost ~]# systemctl satart httpd
配置动态路由
[root@localhost ~]# ip addr add 192.168.10.100/32 dev lo label lo:0 #动态路由添加
(如果没有生效 nmcli c reload;nmcli c up lo 重载)
静态路由
[root@localhost ~]# route add -host 192.168.10.100 dev lo #静态
如果想要开机自启动 修改配置文件 /etc/rc.local
[root@localhost ~]# vim /etc/rc.local
route add -host 192.168.10.100 dev lo
修改sysctl.conf
[root@localhost ~]# vim /etc/sysctl.conf
#末尾添加
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.default.arp_ignore = 1
net.ipv4.conf.default.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
验证:
[root@localhost ~]# curl 192.168.10.100
44444444
[root@localhost ~]# curl 192.168.10.100
33333333
[root@localhost ~]# curl 192.168.10.100
44444444
[root@localhost ~]# curl 192.168.10.100
33333333
[root@localhost ~]# curl 192.168.10.100
44444444
[root@localhost ~]# curl 192.168.10.100
33333333
后续可以尝试将其中一个web关掉或者将调度器关掉
up主只测试了关掉其中一个web 至于调度器 关掉了一个 就访问不进去了 备用的调度器没有抢占又或者不是Master 导致一直访问不上 也有可能是 两台keepalived还没有检测出来对方是否已经挂了 时间太长 所以就没有再尝试了 感兴趣的小伙伴可以尝试一下 我的配置应该是没问题的 有问题及时评论 及时解决 互相学习 还有噢 此外 还可以多添加一台NFS服务器 之前的文章有关于这方面的操作 应该是LVS—DR中 只不过觉得没必要 所以就没在做了 ok就这样