keepalived配置注意事项
程序员文章站
2022-07-14 20:33:07
...
1.keepalived+lvs_DR,虚拟IP的端口要和real Server的端口保持一致。要不然可能会报错。
2.keepalived+lvs_DR,keepalived的主机不需要开启路由转发的功能也可以正常工作。
3.重载keepalived的配置用命令
kill -HUP $(cat /var/run/keepalived.pid)
systemctl stop keepalived.service干不掉keepalived服务,vip也不会漂移的原因
当我们stop掉keepalived服务的时候,发现VIP并没有漂移走,服务也没停掉
ps aux | grep keep 查看keepalived的进程还在
于是我们查看keepalived的service文件
vim /usr/lib/systemd/system/keepalived.service
KillMode=process的大致意思是当停止keepalived的时候只停掉主进程,而主进程产生的子进程是不会被干掉的,SSH服务就是这个模式。
killmode的默认值是control-group,意思时所有进程都会被干掉,我这里选择把这项注释掉,使用默认参数。
即:注释掉killMode这一行
#KillMode=process
改了service文件需要使用systemctl daemon-reload来重读配置
然后就可以正常使用了。
废了这么多话,其实可以使用systemctl kill keepalived来停掉服务,嘿嘿
脑裂问题的解决(主备机器同时操作)
写一个while循环,每轮ping网关,累计连续失败的次数,当连续失败达到一定次数则运行service keepalived stop关闭keepalived服务。
如果发现又能够ping通网关,再重启keepalived服务。最后在脚本开头再加上脚本是否已经运行的判断逻辑,将该脚本加到crontab里面。
#修改周期性计划任务
crontab -e
#加入循环检测脑裂是否发生的脚本
*/3 * * * * /bin/bash 检测脚本的绝对路径
check_keep.sh脚本举例:
#!/bin/bash
#设置VIP
VIP=192.168.122.1
#检测服务是否存在
keep_num=`ps aux | grep keepalive | grep -v grep | wc -l`
#服务存在时,如果ping不通网关就关闭keepalived服务
if [ ${keep_num} -ge 2 ]
then
ping_num=0
for i in {1..10}
do
ping $VIP -c 3 &>/dev/null
num=`echo $?`
let ping_num=ping_num+num
sleep 5
done
if [ ${ping_num} -ge 5 ]
then
#关闭keepalived服务
echo '服务已关闭'
fi
#服务不存在时,如果可以ping通网关就开启keepalived服务
else
ping_num=0
for i in {1..10}
do
ping $VIP -c 3 &>/dev/null
num=`echo $?`
let ping_num=ping_num+num
sleep 5
done
if [ ${ping_num} -eq 0 ]
then
#开启keepalived服务
echo '开启服务'
fi
fi
上一篇: Go进阶之路——基础了解三