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
posted @   无敌小鲁班  阅读(17)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
点击右上角即可分享
微信分享提示