错误保持活动 - 故障状态

时间:2016-03-15 14:20:55

标签: shell high-availability keep-alive failover

我尝试使用keepalived来监控某些服务。 请参阅我的配置文件" keepalived.conf":

! Configuration File for keepalived
vrrp_script check_haproxy {
        script "/usr/local/bin/check_haproxy.sh"
        interval 2
        fail 2
        rise 2
}

vrrp_instance Vtest_2 {
        interface eno16777736

        track_interface {
                eno16777736
        }

        state BACKUP
        virtual_router_id 178
        priority 100
        nopreempt

        unicast_src_ip 172.28.7.132
        unicast_peer {
                172.28.7.133
        }

        virtual_ipaddress {
                195.221.2.14/32 dev eno16777736
        }

        track_script {
                check_haproxy
        }

        notify /usr/local/bin/keepalived.state.sh
}

在我的脚本中,我要比较pid文件的数量和服务的过程:

#!/bin/bash
# check if haproxy is running, return 1 if not.
# Used by keepalived to initiate a failover in case haproxy is down

process=""
HAPROXY_STATUS=""

if [ -f "/var/run/haproxy.pid" ]
then
        process=$(cat /var/run/haproxy.pid)
        HAPROXY_STATUS=$(ps -aux | grep -w "$process.*[h]aproxy")
fi

if [ "$HAPROXY_STATUS" ]
then
        exit 0
else
        exit 1
fi

我的问题是当我在命令时启动keepalived:

keepalived -f /etc/keepalived/keepalived.conf --dont-fork --log-console --log-detail    

Everythings工作商品keepalived故障转移工作正常。但是当我用systemd启动服务时:

systemctl start keepalived

我在" / var / log / messages"中有这些行。档案:

Mar 15 17:05:51 localhost systemd: Starting Session 10 of user root.
Mar 15 17:06:23 localhost systemd: Starting LVS and VRRP High Availability Monitor...
Mar 15 17:06:23 localhost Keepalived[34182]: Starting Keepalived v1.2.13 (11/20,2015)
Mar 15 17:06:23 localhost systemd: Started LVS and VRRP High Availability Monitor.
Mar 15 17:06:23 localhost Keepalived[34183]: Starting Healthcheck child process, pid=34184
Mar 15 17:06:23 localhost Keepalived[34183]: Starting VRRP child process, pid=34185
Mar 15 17:06:23 localhost Keepalived_vrrp[34185]: Netlink reflector reports IP 172.28.7.132 added
Mar 15 17:06:23 localhost Keepalived_vrrp[34185]: Netlink reflector reports IP fe80::20c:29ff:fe22:a18e added
Mar 15 17:06:23 localhost Keepalived_vrrp[34185]: Registering Kernel netlink reflector
Mar 15 17:06:23 localhost Keepalived_vrrp[34185]: Registering Kernel netlink command channel
Mar 15 17:06:23 localhost Keepalived_vrrp[34185]: Registering gratuitous ARP shared channel
Mar 15 17:06:23 localhost Keepalived_vrrp[34185]: Opening file '/etc/keepalived/keepalived.conf'.
Mar 15 17:06:23 localhost Keepalived_vrrp[34185]: Configuration is using : 64365 Bytes
Mar 15 17:06:23 localhost Keepalived_vrrp[34185]: Using LinkWatch kernel netlink reflector...
Mar 15 17:06:23 localhost Keepalived_vrrp[34185]: VRRP_Instance(Vtest_2) Entering BACKUP STATE
Mar 15 17:06:23 localhost Keepalived_vrrp[34185]: VRRP sockpool: [ifindex(2), proto(112), unicast(1), fd(10,11)]
Mar 15 17:06:23 localhost Keepalived_healthcheckers[34184]: Netlink reflector reports IP 172.28.7.132 added
Mar 15 17:06:23 localhost Keepalived_healthcheckers[34184]: Netlink reflector reports IP fe80::20c:29ff:fe22:a18e added
Mar 15 17:06:23 localhost Keepalived_healthcheckers[34184]: Registering Kernel netlink reflector
Mar 15 17:06:23 localhost Keepalived_healthcheckers[34184]: Registering Kernel netlink command channel
Mar 15 17:06:23 localhost Keepalived_healthcheckers[34184]: Opening file '/etc/keepalived/keepalived.conf'.
Mar 15 17:06:23 localhost Keepalived_healthcheckers[34184]: Configuration is using : 5344 Bytes
Mar 15 17:06:23 localhost Keepalived_healthcheckers[34184]: Using LinkWatch kernel netlink reflector...
Mar 15 17:06:26 localhost Keepalived_vrrp[34185]: VRRP_Instance(Vtest_2) Now in FAULT state

有人有想法吗?

2 个答案:

答案 0 :(得分:1)

我使用非常简单的配置来达到同样的目的。默认情况下,实用程序pidof必须位于大多数操作系统Linux上。试试这个例子:

vrrp_script check_haproxy
{
    script "pidof haproxy"
    interval 2
    weight 2
}

这是一个有效的解决方案伙伴。

答案 1 :(得分:0)

启动keepalived作为systemctl服务时,我的track_script运行时出现了类似的问题。

我发现将/usr/libexec/keepalived放入! Configuration File for keepalived global_defs { } vrrp_script odr_check { script "/usr/libexec/keepalived/health_check.sh" interval 2 weight 50 fall 1 rise 1 } vrrp_instance VI_1 { state BACKUP interface eno16777984 virtual_router_id 42 priority 90 track_script { odr_check } virtual_ipaddress { 192.168.110.84 } } 解决了这个问题。它可能与this issue有关。

{{1}}