Linux keepalive

发布时间 2023-12-05 11:05:40作者: 苦逼yw

参考:https://zhuanlan.zhihu.com/p/566166393

1、关闭防火墙

 

2、安装keepalive

yum install -y keepalived

3、配置监测nginx是否存活

vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived
global_defs {
   router_id LVS_DEVEL
}
vrrp_script nginx_check {
  script "/tools/nginx_check.sh"
  interval 1
}
vrrp_instance VI_1 {
  state MASTER
  interface ens33
  virtual_router_id 52
  priority 100
  advert_int 1
  authentication {
    auth_type PASS
    auth_pass test
  }
  virtual_ipaddress {
    192.168.149.100
  }
  track_script {
    nginx_check
  }
  notify_master /tools/master.sh
  notify_backup /tools/backup.sh
  notify_fault /tools/fault.sh
  notify_stop /tools/stop.sh
}

配置解释


router_id  #指定节点路由ID,每个节点必须不一致,建议用自己的主机名,且实现相互的主机名A记录解析

vrrp_instance VI_1 #VRRP实例开始的标识 VI_1为实例名称 state #指定keepalived的角色,MASTER表示此主机是主服务器,BACKUP表示此主机是备服务器
interface #指定检测网络的网卡接口 virtual_router_id #虚拟路由标识,数字形式,同一个VRRP实例使用唯一的标识,即在同一个vrrp_instance下,master和backup必须一致 priority #节点优先级,数字越大表示节点的优先级越高,在一个VRRP实例下,MASTER的优先级必须要比BACKUP高,不然就会切换角色 advert_int #用于设定MASTER与BACKUP之间同步检查的时间间隔,单位为秒 auth_type PASS #预共享密钥认证,同一个虚拟路由器的keepalived节点必须一样 auth_pass #设置密钥 virtual_ipaddress #设置虚拟IP地址,可以设置多种形式:10.0.0.100不指定网卡,默认为eth0,注意:不指定/prefix,默认为/3210.0.0.101/24 dev eth1 指定VIP的网卡;10.0.0.102/24 dev eth2 label eth2:1 #指定VIP的网卡label nopreempt # 设置为非抢占模式,同一实例下主备设置必须一样 preemtp_delay # 设置抢占模式的延时时间,单位为秒

脚本相关配置

vrrp_script 
#自定义资源监控脚本,vrrp实例根据脚本返回值进行下一步操作,脚本可被多个实例调用。
#track_script:调用vrrp_script定义的脚本去监控资源,定义在实例之内,调用事先定义的vrrp_script。实现主备切换,保证服务高可用
#vrrp_script仅仅通过监控脚本返回的状态码来识别集群服务是否正常,如果返回状态码是0,那么就认为服务正常,反之亦然。


notify_master #当前节点成为主节点时触发的脚本


notify_backup #当前节点转为备节点时触发的脚本


notify_fault #当前节点转为“失败”状态时触发的脚本


notify_stop #当停止VRRP时触发的脚本

4、编写脚本

cd /tools
cat master.sh
ip=$(hostname -I | awk '{print $1}')
dt=$(date+'%Y%m%d %H:%M:%S')
echo"$0--${ip}--${dt}">> /tmp/kp.log


cat backup.sh
ip=$(hostname -I | awk '{print $1}')
dt=$(date+'%Y%m%d %H:%M:%S')
echo"$0--${ip}--${dt}">> /tmp/kp.log


cat fault.sh
ip=$(ip addr|grep inet| grep 192.168 |awk '{print $2}')
dt=$(date +'%Y%m%d %H:%M:%S')
echo"$0--${ip}--${dt}">> /tmp/kp.log


cat stop.sh
ip=$(ip addr|grep inet| grep 192.168| awk '{print $2}')
dt=$(date +'%Y%m%d %H:%M:%S')
echo"$0--${ip}--${dt}">> /tmp/kp.log
cat nginx_check.sh
#!/bin/bash
result=`pidof nginx`
if [ ! -z "${result}" ];
then
  exit 0
else
  exit 1
fi

5、授权脚本,启动服务

cd /tools/ && chmod +x *.sh
systemctl restart keepalived.service