Keepalived如何实现检查与通知脚本,提升IP高可用性

开发工具 潘老师 1周前 (04-14) 24 ℃ (0) 扫码查看

Keepalived作为VRRP(虚拟路由器冗余协议)在Linux系统中的实现方案,发挥着关键作用。它不仅能让IP具备高可用性,生成虚拟IP(VIP),还借助“Linux虚拟服务器”(IPVS)实现负载均衡。今天,咱们就深入了解一下Keepalived中鲜少被提及的检查脚本和通知脚本。

一、VRRP工作原理

VRRP协议的核心是保障参与节点中有一个为主节点。在这个体系里,备份节点会持续监听来自优先级较高节点发送的多播数据包。正常情况下,备份节点要是在超过广播计时器三倍时长的时间内,都接收不到VRRP播发,它就会“挺身而出”,转变为主状态,并把配置好的IP地址分配给自己。

要是存在多个优先级相同的备份节点,这时IP地址最高的备份节点会在选举中胜出,成为新的主节点。不过,VRRP存在一个小问题,就是没有屏蔽机制。如果两个参与节点相互之间无法感知对方,它们就都可能认为自己是主节点,进而携带相同的IP地址,这可能会导致网络冲突。

正是在探寻如何判断哪个节点该保持主状态、哪个该放弃时,“检查脚本”(Check Script)机制进入了我们的视野。它就像是一个智能“小助手”,能帮助我们更好地管理VRRP节点状态。

二、Check Script详解

检查脚本可以用各种编程语言编写,它会按照设定的时间间隔定期执行。这个脚本的返回值意义重大:返回0意味着一切正常;返回1或者其他非0值,则表示出现了问题。

下面是检查脚本在Keepalived中的定义示例:

vrrp_script chk_myscript {
    script "/usr/local/bin/mycheckscript.sh"
    interval 2 # 每2秒检查一次
    fall 2 # 连续2次失败才判定为异常
    rise 2 # 连续2次成功才判定为恢复正常
}

从这个示例能看出,我们可以灵活设定检查间隔时间,还能规定脚本在执行相关动作前,需要达到的成功或失败次数。

这个脚本的检查范围很广,比如可以检查守护程序X是否在正常运行,远程开关Y上的接口X有没有打开,8.8.8.8这个IP地址能不能ping通,以及运行应用程序的磁盘空间是否充足等。

定义好检查脚本后,就能在vrrp_instance中使用它:

vrrp_instance MyVRRPInstance {
    state MASTER
    interface eth0
    virtual_router_id 5
    priority 200
    advert_int 1
    virtual_ipaddress {
        192.168.1.1/32 dev eth0
    }
    track_script {
        chk_myscript
    }
}

一旦track_script连续2次返回非0代码,VRRP实例就会做出一系列动作:将状态变更为FAULT,从eth0接口删除192.168.1.1这个IP地址,同时停止发送多播VRRP数据包。这一系列操作能及时应对异常情况,保障网络的稳定性。

三、Notify Script解析

通知脚本的功能更为丰富,它可不只是简单地添加或删除IP地址,还能根据VRRP的状态变化,执行更多操作,比如启动或停止守护进程。

在Keepalived配置中,通知脚本的定义如下:

vrrp_instance MyVRRPInstance {
    [...]
    notify /usr/local/bin/keepalivednotify.sh
}

每次VRRP状态发生改变,通知脚本都会被调用,并接收几个参数:$1的值为“GROUP”或“INSTANCE” ;$2是组名或实例名;$3则代表转换的目标状态,取值为“MASTER”“BACKUP”“FAULT”。

下面是一个示例脚本:

#!/bin/bash

TYPE=$1
NAME=$2
STATE=$3

case $STATE in
        "MASTER") /etc/init.d/apache2 start
                  exit 0
                  ;;
        "BACKUP") /etc/init.d/apache2 stop
                  exit 0
                  ;;
        "FAULT")  /etc/init.d/apache2 stop
                  exit 0
                  ;;
        *)        echo "unknown state"
                  exit 1
                  ;;
esac

在这个脚本里,根据不同的$STATE值,执行不同的操作。当状态为“MASTER”时,启动apache2服务;状态为“BACKUP”或“FAULT”时,停止apache2服务。如果遇到未知状态,则输出提示信息并返回错误代码。

实际应用场景中,像构建高可用性IPsec网关(启动和停止IPsec进程)时,通知脚本就派上了大用场。通过深入了解Keepalived的检查脚本和通知脚本,我们可以更好地利用Keepalived提升网络中IP的高可用性,大家可以试试。


版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/tool/17192.html
喜欢 (0)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】