我按照以下指南在 Ubuntu 14.04 LTS 上设置了 Corosync/Pacemaker 集群 + HAproxy: http://www.sebastien-han.fr/blog/2012/04/15/active-passive-failover-cluster-on-a-mysql-galera-cluster-with-haproxy-lsb-agent/
我没有添加虚拟 IP 设置,只有两个节点,都安装了 Haproxy。我使用的是 lsb:haproxy,我的配置如下:
为了测试一切,我通过运行以下命令终止 haproxy 进程:sudo kill -9 [PID#]
然后我检查集群的状态并收到以下错误消息:“操作失败:权限不足”。我没有更改 haproxy 用户/组定义,并且我的 aisexec{} 对用户和组都使用 root 权限。
如果我希望 Corosync/Pacemaker 管理 Haproxy,我的权限应该是什么?
编辑:当我运行以下服务停止命令时,haproxy 会按预期重新启动。检查crm status
haproxy 守护程序是否正常运行
# sudo service haproxy stop
# sudo crm status
HaproxyHA (lsb:haproxy): Started node1
Failed Actions:
但是当我手动终止 pid 时,我仍然看到错误:
# sudo kill -9 $PID
HaproxyHA (lsb:haproxy): Started node1 (unmanaged) FAILED
Failed Actions:
在实施 Federico 提到的更改后,(/bin/kill $pid || return 7)
它并没有改变我的问题,我在日志中发现了这一点:
pengine: warning: unpack_rsc_op: Processing failed op stop for HaproxyHA on node1: not running (7)
答案1
如果你查看haproxy_stop
文件中的函数/etc/init.d/haproxy
:
haproxy_stop()
{
if [ ! -f $PIDFILE ] ; then
# This is a success according to LSB
return 0
fi
for pid in $(cat $PIDFILE) ; do
/bin/kill $pid || return 4
done
rm -f $PIDFILE
return 0
}
特别是这一行/bin/kill $pid || return 4
。这使得进程被终止时返回值为 4,根据规范,这是:用户权限不足. 这是不正确的。
如果在处理除状态之外的任何初始化脚本操作时出现错误,初始化脚本将打印错误消息并以非零状态代码退出:
1 generic or unspecified error (current practice) 2 invalid or excess argument(s) 3 unimplemented feature (for example, "reload") 4 user had insufficient privilege 5 program is not installed 6 program is not configured 7 program is not running 8-99 reserved for future LSB use 100-149 reserved for distribution use 150-199 reserved for application use 200-254 reserved
您可以尝试通过以下方式进行更改:
/bin/kill $pid || return 7
正确的方法是使用以下方法停止守护进程killproc(8)如果失败,则killproc
根据 LSB 设置返回值。
例如。
/sbin/killproc -p $PIDFILE $HAPROXY
$PIDFILE
当且仅当此 pid 属于 $HAPROXY 时,才 将信号 SIGTERM 发送到在 中找到的 pid 。如果名称$PIDFILE
不存在,killproc 会假定 $HAPROXY 的守护进程未运行。如果成功传递默认信号 SIGTERM 和 SIGKILL,则退出状态设置为 0,否则如果程序未运行,则设置为 7。如果没有指定信号并且没有程序用于终止,因为它已经终止,则退出状态也会成功。