思路:
平时做好了keepalived单主或者双住架构后,我们在测试的时候经常需要手动去停止keepalived服务或者网卡服务。假设线上nginx挂了,如何实现自动停止keepalived服务,实现VIP飘逸呢? 软件配置文件可以加入脚本功能来检测。
加入脚本检测nginx是否存活?
我们首先要知道可以通过向进程发送信号0,然后根据返回值来判断一个进程是否存在。比如进程名字为A,那么
killall -0 A
echo $?
结果为0就表示进程A存在(成功杀掉,但只是模拟信号,不影响服务的真正运行),否则表示不存在。
脚本内容为
#!/bin/bash
#check_nginx
killall -0 nginx
if [[ $? -ne 0 ]];then
systemctl stop keepalived
fi
配置文件中定义脚本位置并引入
! Configuration File for keepalived
global_defs {
notification_email {
tianye@lzad.cc
}
notification_email_from tianye@lzad.cc
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}
#脚本定义
vrrp_script chk_nginx {
script "/etc/keepalived/sh/check_nginx.sh" #脚本路径位置
interval 2 #检测间隔时间2S
weight 2 #权重
}
#VIP1 192.168.1.188
vrrp_instance VI_1 {
state MASTER
interface ens33
lvs_sync_daemon_inteface ens33
virtual_router_id 151
priority 100
advert_int 5
#nopreempt
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.188
}
#脚本引用
track_script {
chk_nginx
}
}
实现效果:当主机的nginx挂掉后,脚本检测到了,然后停止本机的keepalived服务,组播环境收不到master的信号,重新在backup选举,从而实现VIP漂移。实现高可用
网友评论