欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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
相关标签: 小技巧