它还解释了如何设置可以链接到资源分配的 ping。
虽然这可行,但如果我有多个 URL 或多个 ping 检查,我怎么知道哪一个失败了?
如果发生这种情况,似乎不会在任何地方记录。它只是发生了,起搏器会做出决定……
阅读此源代码:https://github.com/ClusterLabs/pacemaker/blob/master/extra/resources/ping
似乎需要启用调试环境变量。我宁愿不这样做,因为我必须为此重新启动 Pacemaker,从而搞乱分配,而且现在无论多少额外的日志都会占用磁盘空间。
如果 ping 失败,有没有办法只记录一行,只记录一行,而不影响其他内容?
答案1
事实证明,调试选项不仅仅是一个环境变量,它可以在 ping 资源本身上设置,如下所示:
pcs resource update ping debug=1
唯一的缺点是:日志没有/var/log/pacemaker.log
按预期出现在,而是出现在/var/log/syslog
。
答案2
查看资源代理 (RA) 的源,看起来通过设置来启用调试选项就是warn
您想要做的。
如果由于某种原因,该行为不是您想要的,那么更改函数1)
中的 case 语句ping_check()
(如下所示)(ping RA 中的第 305 行)可能就是您想要的:
ping_check() {
active=0
for host in $OCF_RESKEY_host_list; do
p_exe=ping
case $(uname) in
Linux) p_args="-n -q -W $OCF_RESKEY_timeout -c $OCF_RESKEY_attempts";;
Darwin) p_args="-n -q -t $OCF_RESKEY_timeout -c $OCF_RESKEY_attempts -o";;
FreeBSD) p_args="-n -q -t $OCF_RESKEY_timeout -c $OCF_RESKEY_attempts -o";;
*) ocf_log err "Unknown host type: $(uname)"; exit $OCF_ERR_INSTALLED;;
esac
case "$host" in
*:*) p_exe=ping6
esac
ping_output=$($p_exe $p_args $OCF_RESKEY_options $host 2>&1); rc=$?
case $rc in
0)
active=$(expr $active + 1)
if [ $OCF_RESKEY_debug -gt 1 ]; then
ping_conditional_log info "$ping_output"
fi
;;
1) ocf_log warn "$host is inactive: $ping_output";;
*) ocf_log err "Unexpected result for '$p_exe $p_args $OCF_RESKEY_options $host' $rc: $ping_output";;
esac
但这种变化看起来将遵循与设置 param 相同的逻辑debug=warn
。我还没有测试过,只是遵循 RA 中的逻辑。
此外,如果出于某种原因确实需要重新启动 Pacemaker,您可以随时在重新启动maintenance-mode=true
之前将集群放入。如果maintenance-mode=true
设置了,Pacemaker 即使在重新启动时也不会启动/停止/监控服务。只需记住maintenance-mode=false
在完成后进行设置即可。