keepalived通过vvrp脚本实现haproxy的高可用

keepalived通过vvrp脚本实现haproxy的高可用

vvrp_scripts介绍

​ keepalived原生支持lvs的高可用,通过对lvs服务的监测结果的分析,实现vip的漂移与否,检测结果正常则vip保持,检测结果异常则进行vip的漂移,从而保持vip的高可用;

针对非lvs服务,如haproxy,nginx,也可以通过vvrp_scripts结合自定义检测脚本实现haproxy或nginx服务的持续监测,并根据监测结果,选择重启服务尝试、优先级调整、或vip漂移等操作;

执行逻辑

  1. 先自定义服务的监测脚本,如killall -0 haproxy 探测haproxy服务的正常运行与否;
  2. 在vvrp_script 配置段引用,上步定义的脚本,(也可以将监测命令写在这里,命令较短时)
  3. 在在track_script 配置段,引用vvrp_script的命令,进而引用了探测脚本
  4. 根据探测脚本的返回值,0或非0,可以做如下操作:
    1. 尝试重启服务,(可以定义在监测脚本中)
    2. vip漂移,(尝试重启服务一定次数,仍失败,可以停止keepalived,让vip漂移)
    3. 优先级调整,(在vvrp_script中定义,可以减少优先级,进而达到vip漂移)

配置

1、自定义监控脚本

2、定义vvrp_script,其中引用自定义监控脚本

3、在需要监控的vvrp_instance中,引用定义的vvrp_script即可;

# 定义vvrp_script,其中引用自定义监控脚本
# 此处,没有单独定义脚本,再引用,而是将脚本直接放在其中,监测脚本为一条命令,判断haproxy进程是否存在且正常
vvrp_script chk_haproxy {
        script "killall -0 haproxy"

		interval 2
        weight -30
        rise 2
        fall 2
# 每2s用定义的脚本探测一下,连续失败2次为失败,失败时,权重减少30,状态转为backup;
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.80.200/24 dev eth0 label eth0:1
    }


        notify_master "/etc/keepalived/notify.sh master"
        notify_backup "/etc/keepalived/notify.sh backup"
        notify_fault "/etc/keepalived/notify.sh fault"



track_script {
        chk_haproxy
}
# 在vvrp实例中引用,vvrp_script,

}

     

脚本方式,当haproxy进程异常时,尝试重启,2次重启失败,就停止keepalived,使得vip进行漂移;

[root@host2 ~]# cat /etc/keepalived/haproxy.sh 
#!/bin/bash

if ! killall -0 haproxy &>/dev/null;then
    serivce haproxy restart
    sleep 1
    if ! killall -0 haproxy &>/dev/null;then
        service keepalived stop
    fi
fi

vvrp_script chk_haproxy {
        script "/etc/keepalived/haproxy.sh"
        interval 2
        weight -30

}

updatedupdated2020-10-212020-10-21
加载评论