Keepalived 服务使用和介绍

Keepalived 是基于VRRP协议的高可用方案,用来解决单点故障,两台机器,分主备,共用一个虚拟IP,主机发送特定消息到备机,当备机收不到消息,即主机宕机,备机会接管虚拟IP,从而实现高可用。
keepalived从三个层次检测服务器的状态:
Layer3通过ip层发送ping包检测是否ping通
Layer4通过tcp层检测端口是否存在
Layer7通过应用层检测用户设定的服务器程序运行是否正常
需要确保网卡开启multicast(组播)功能,不然可能出现下面问题
问题点--
当网络中不支持多播(例如某些云环境),或者出现网络分区的情况,keepalived BACKUP节点收不到MASTER的VRRP通告(备变成主),就会出现脑裂(split brain)现象,此时集群中会存在多个MASTER
节点

keepalived服务源码安装后可以添加到系统服务里
cp  xxx/keepalived-xxx/sysconfig/keepalived   /etc/sysconfig/
systemctl  daemon-reload    #刷新系统服务

keepalived配置文件检测服务运行状态,以nginx为例。需要先写监控nginx的脚本,之后配置文件中调用编写的脚本
#!/bin/bash
nginxNumber=`ps -ef | grep nginx |grep -v grep| wc -l`
If [ $nginxNumber -le 2 ]; then
   echo "$(date +"%Y-%m-%d %H:%M:%S") nginx is dead"  >> /etc/keepalived/nginx.log
   systemctl start nginx
   sleep 2
  if [ `ps -ef | grep nginx |grep -v grep| wc -l` -eq 0 ]; then
        systemctl stop keepalived
  fi
fi
vrrp_script check_nginx_alive {
    script "/etc/keepalived/check_nginx.sh"
    interval 2 # 每隔两秒运行上一行脚本
    #weight 10   # 条件成立,则升级权重+10
    weight -20   # 条件成立,则升级权重-20
}
# 工作模式,nopreempt表示工作在非抢占模式,默认是抢占模式 preempt  
nopreempt|preempt

track_script {
    check_nginx_alive   # 追踪 nginx 脚本
}

notify_master "xxx.sh"   节点变为master之后主动执行的脚本
notify_backup "xxx.sh"   节点变为backup之后主动执行的脚本

解决脑裂问题:
节点之间通过VRRP报文获得相互的优先级及状态信息,因此,可以通过在服务检查失败时,配置防火墙,禁止本机的VRRP报文发出即可。这样,BACKUP节点收不到MASTER节点的VRRP报文,认为MASTER节点不存在,同时MASTER节点能收到其他节点的VRRP报文,感知到新MASTER的产生,从而进入BACKUP状态。
iptables -A  OUTPUT -p vrrp -j DROP        新增防火墙策略
iptables -D  OUTPUT -p vrrp -j DROP        删除防火墙策略

 

posted @ 2023-10-11 15:33  菜菜陈  阅读(35)  评论(0编辑  收藏  举报