我在两个 keepalived 服务器下有几个 Web 服务器,为了检查真实 Web 服务器的运行状况,我使用了以下 keepalived 配置片段
TCP_CHECK # 健康检查器:HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK { connect_timeout 3 # 连接超时时间,秒 nb_get_retry 3 # 重试次数 重试前延迟 3 连接端口 80 }
但是除了 apache 之外,我还需要检查 mongos 是否在该服务器上运行,如果其中一个应用程序不正常,我需要从真实服务器列表中拉出该服务器?那么如何在 keepalived 的配置中添加逻辑表达式。
答案1
使用 MISC_CHECK:
MISC_CHECK {
misc_path "/etc/keepalived/servicecheck.sh"
}
/etc/keepalived/servicecheck.sh 是一个 shell 脚本,可以为您完成所有有用的检查:
#!/bin/sh
# Check if mongo is running
mongo --eval "db.stats()"
RESULT=$? # returns 0 if mongo eval succeeds
if [ $RESULT -ne 0 ]; then
echo "mongodb not running"
exit 1
else
echo "mongodb running!"
fi
# Check if apache is running
ps auxw | grep apache2 | grep -v grep > /dev/null
if [ $? != 0 ]
then
exit 1
fi
这只是一个例子。您可以在脚本中构建任意数量的逻辑。任何返回状态 1 都会导致 keepalived 使服务器停止服务。