在配置keepalived+nginx环境时,遇到了一个极其caodan的问题,那就是keepalived不执行配置的监控脚本,在网上找了一圈,浪费了我好几个小时。 现在把解决方法记录在此,希望能帮到踩坑的你。

脚本调用不成功,日志一直提示: Keepalived_vrrp[13096]: Warning - script chk_nginx is not used

主配置文件:

! Configuration File for keepalived

global_defs {
     router_id keepalived_mjt
     script_user root
     enable_script_security
}

vrrp_script chk_nginx
{
    script /etc/keepalived/chk_ngx.sh
    interval 3
    weight -20
    fall 3
    rise 2
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 150
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.216.200
    }
    track_script{
        chk_nginx
    }
}

备配置文件:

! Configuration File for keepalived

global_defs {
   router_id keepalived_cxq
   script_user root
   enable_script_security

}

vrrp_script chk_nginx {
	script /etc/keepalived/chk_ngx.sh
	interval 3
	weight -20
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.216.200
    }
    track_script{
        chk_nginx
    }
}

监控脚本:

#!/bin/sh
counter=$(ps -C nginx --no-heading|wc -l)
echo "$counter"
if [ "${counter}" = "0" ]; then
      /usr/sbin/nginx -c /etc/nginx/nginx.conf
      sleep 2
      counter=$(ps -C nginx --no-heading|wc -l)
      if [ "${counter}" = "0" ]; then
          /etc/init.d/keepalived stop
      fi
fi

发现脚本没有执行时,进行以下检查: 1、检查配置文件中的脚本路径是否正确 2、检查脚本是否有可执行权限 3、手动测试脚本是否能正常执行

以上几个我检查过了没有任何问题,还注意到网上说脚本空格什么的,都检查了一遍,甚至手写了一遍脚本,还是提示脚本is not used。 最后在vrrp_instance VI_1模块中加上了

track_script{
        chk_nginx
    }

重启之后正常,成千上万个羊驼奔腾而过。。。。 track_script用于用于追踪脚本。