keepalived:第二个VRRP_Script似乎永远不会运行

我试图在3个mongodb盒子上实现keepalived,这个想法是,如果某个盒子上的mongod出现故障,或者由于某种原因我们需要将主节点移动到另一个系统,我们的应用程序就不需要重新configuration。

keepalived.conf非常简单,有两个VRRP_scripts,一个用来检查mongod是否正在运行,另一个是用来执行一个bash脚本,用来检查本地mongod实例是否是主节点。

keepalived.conf

!Configuration File for keepalived # Global definitions global_defs { notification_email { [email protected] } notification_email_from [email protected] smtp_server smtprelay.penton.com smtp_connect_timeout 30 } # Check to see if mongod is running vrrp_script chk_mongod { script "killall -0 mongod" # verify the pid exists interval 2 # check every 2 seconds # weight 2 # add 2 points if OK } # Check to see if this node is the primary vrrp_script chk_mongod_primary { script "/usr/local/bin/chk_mongo_primary.sh" interval 2 # weight 2 } # Virtual interface configuration vrrp_instance VI_1 { state MASTER interface eth0 #interface to monitor virtual_router_id 51 priority 101 # 101 on mater, 100 on backup virtual_ipaddress { 192.168.122.99 } track_script { chk_mongod chk_mongo_primary } } 

如果我在一个节点上closures了mongod服务,那么浮动的IP会转移到另一个框中,因为我期望在/ var / log / messages中看到像这样的输出

 Jul 17 16:23:34 mongodbtest01 Keepalived_vrrp[30304]: VRRP_Script(chk_mongod) failed Jul 17 16:23:35 mongodbtest01 Keepalived_vrrp[30304]: VRRP_Instance(VI_1) Entering FAULT STATE Jul 17 16:23:35 mongodbtest01 Keepalived_vrrp[30304]: VRRP_Instance(VI_1) removing protocol VIPs. Jul 17 16:23:35 mongodbtest01 Keepalived_vrrp[30304]: VRRP_Instance(VI_1) Now in FAULT state Jul 17 16:23:35 mongodbtest01 Keepalived_healthcheckers[30303]: Netlink reflector reports IP 192.168.122.99 removed 

如果我将mongod备份,则IP会移回到该框(因为它具有优先权)。

 Jul 17 16:27:42 mongodbtest01 Keepalived_vrrp[30304]: VRRP_Script(chk_mongod) succeeded Jul 17 16:27:43 mongodbtest01 Keepalived_vrrp[30304]: VRRP_Instance(VI_1) prio is higher than received advert Jul 17 16:27:43 mongodbtest01 Keepalived_vrrp[30304]: VRRP_Instance(VI_1) Transition to MASTER STATE Jul 17 16:27:44 mongodbtest01 Keepalived_vrrp[30304]: VRRP_Instance(VI_1) Entering MASTER STATE Jul 17 16:27:44 mongodbtest01 Keepalived_vrrp[30304]: VRRP_Instance(VI_1) setting protocol VIPs. Jul 17 16:27:44 mongodbtest01 Keepalived_vrrp[30304]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.122.99 

当mongod停机并恢复时,请注意每个日志输出中的VRRP_Script(chk_mongod)。 但是,如果我重新configuration副本集,使这个节点不再是主要的,我从来没有看到名为chk_mongod_primary的VRRP_Script运行成功或失败。 我已经从命令行testing了脚本,它每次都返回期望的结果,但似乎从来没有被collectd执行过。

这是/usr/local/bin/chk_mongo_primary.sh的样子:

 #!/bin/bash # Check to see if this node is master result=$(mongo --eval "printjson(db.isMaster().ismaster)" 2>&1) m_status=`echo $result | cut -d' ' -f 8` if [ "$m_status" == "true" ] ; then echo "I am primary" exit 0 else echo "I am secondary" exit 1 fi 

我已经尝试了各种各样的东西,看着其他的keepalivedconfiguration,看看我是否可以找出我要去哪里错了,但这让我难住。

任何人都可以提供我要去哪里的错误线索?

提前致谢。

这个问题已经解决了,问题是conf文件的track_script部分中的一个胖手指名字。 这是通过运行keepalived –dump-confparsingconfiguration文件并输出结果来解决的。 我尾随/ var / log / messages,并发现有关缺less跟踪脚本的错误。