Keepalived群集
1.Keepalived实现原理
Keepalived专为LVS和HA设计的一款健康检查工具
支持故障自动切换(Failover)
支持节点健康状态检查(Health Checking)
判断 LVS 负载调度器、节点服务器的可用性,当 master 主机出现故障及时切换到backup 节点保证业务正常,当 master故障主机恢复后将其重新加入群集并且业务重新切换回 master 节点。
(1)一个合格的群集应该具备的特点
1)负载均衡:用于提高群集的性能。 LVS、Nginx、HAProxy、SLB、F5。
2)健康检查(探针):针对于调度器和节点服务器。Keepalived、Heartbeat。
3)故障转移:通过VIP漂移实现主备切换。 VRRP、脚本。
(2)健康检查(探针)常用的工作方式
(1)发送心跳消息:vrrp报文、ping/pong
(2)TCP端口检查:向目标主机的 IP:PORT 发起TCP连接请求,如果TCP连接三次握手成功则认为健康检查正常,否则认为健康检查异常
(3)HTTP URL检查:向目标主机的URL路径(比如http://IP:PORT/URI路径)发起 HTTP GET 请求方法,如果响应消息的状态码为 2XX 或 3XX,则认为健康检查正常;如果响应消息的状态码为 4XX 或 5XX,则认为健康检查异常
(3)Keepalived工作原理
Keepalived 是基于 VRRP 协议实现的高可用方案。
默认情况下通过优先级决定主备服务器的角色(优先级最高的为主),主服务器(MASTER)会通过ip命令在本地生成VIP,接收并处理客户端发送的请求消息;同时主服务器还会定时发送VRRP报文给备服务器(BACKUP)告知主服务器的存活状态。当主服务器异常时,备服务器就会接管VIP(也是通过ip命令生成VIP),继续提供服务,保证服务的高可用。
(4)Keepalived的工作模式
抢占模式:MASTER节点从故障中恢复后,会将VIP从BACKUP节点中抢占过来。
非抢占模式:MASTER节点恢复后不抢占VIP。(主备节点的state都配置为BAKCUP,且都添加配置nopreempt)
优先启动的获取master权限
后启启动的获取backup权限备服务器
注意:这样配置后,我们要注意启动服务的顺序,优先启动的获取master权限,与优先级没有关系了。
(5)脑裂故障
现象:主服务器和备服务器都同时拥有相同的VIP
原因:因为主服务器和备服务器的通信中断,导致备服务器无法收到主服务器发送的VRRP报文,备服务器误认为主服务器已经故障了并通过ip命令生成VIP
解决:关闭主服务器或备服务器其中一个的keepalived服务
预防:
(1)如果是系统防火墙导致,则关闭防火墙或添加防火墙规则放通VRRP组播地址(224.0.0.18)的传输
(2)如果是主备服务器之间的通信链路中断导致,则可以在主备服务器之间添加双链路通信
(3)在主服务器使用脚本定时判断与备服务器通信链路是否中断,如果判断是主备服务器之间的链接中断则自行关闭主服务器上的keepalived服务
(4)利用第三方应用或监控系统检测是否发生了脑裂故障现象,如果确认发生了脑裂故障则通过第三方应用或监控系统来关闭主服务器或备服务器其中一个的keepalived服务
#主服务器脚本
#!/bin/bash
while true
do
ping -c4 -i 0.5 -W 2 备服务器IP
if 「 $? -ne 0 ]
then ssh 另一台主机IP ping -c 4 -i 0.5 -W2 -I 另一台主机IP 备服务器IP
if [ $? -eg 0 ]
then systemctl stop keepalived
fi
fi
sleep 20
done
(5)Keepalived通过什么判断哪台主机为主服务器,通过什么方式配置浮动IP?
Keepalived首先做初始化先检查state状态,master为主服务器,backup为备服务器。
然后再对比所有服务器的priority,谁的优先级高谁是最终的主服务器。
优先级高的服务器会通过ip命令为自己的电脑配置一个提前定义好的浮动IP地址。
2.Keepalived的部署
(1)准备环境
关闭防火墙
(2)配置keeplived(主、备DR 服务器上都要设置)
- 主服务器
- 被服务器
- 先开启主,再启动被
- 主服务器故障VIP漂移到被服务器上
- 主服务器恢复VIP自动从被服务器上漂移回来
3.LVS+Keepalived高可用集群部署
yum install -y ipvsadm
modprobe ip_vs #加载模块
lsmod | grep ip_vs
touch /etc/sysconfig/ipvsadm
systemctl start ipvsadm
systemctl enable ipvsadm
systemctl status ipvsadm
vim /etc/keepalived/keepalived.conf
systemctl start keepalived.service
ip a
ipvsadm -ln #规则已自动生成
4.Nginx+Keepalived高可用集群部署
systemctl disable --now firewalld
setenforce 0
vim /etc/selinux/config
disabled
20.0.0.100
20.0.0.110
rz -E上传nginx-1.26.1-2.el7.ngx.x86_64.rpm
yum localinstall -y nginx-1.26.1-2.el7.ngx.x86_64.rpm
nginx -V
vim /etc/nginx/nginx.conf
events {
worker_connections 1024;
}
stream {
upstream backends {
server 20.0.0.140:80;
server 20.0.0.150:80;
}
server {
listen 8080;
proxy_pass backends;
}
}
nginx -t
systemctl enable --now nginx
http://20.0.0.100:8080
http://20.0.0.110:8080/test.html
scp nginx.conf 20.0.0.110:`pwd`
-------------------------------------------
20.0.0.110
systemctl enable --now nginx
yum install -y keepalived
cd /etc/keepalived
touch check_nginx.sh
vim check_nginx.sh
#!/bin/bash
if !killall -0 nginx &> /dev/null
then
systemctl stop keepalived
fi
chmod +x check_nginx.sh
vim keepalived.conf
systemctl start keepalived
systemctl enable keepalived
ip a
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?