设置
我正在使用 Corosync/Pacemaker 管理集群中的两台物理服务器为 Web 应用程序设置 HA 集群。
后发现自己走错了方向,我决定使用 heartbeat 捆绑的 MySQL 资源代理来管理整个集群中的 MySQL 实例。
目前,有一个有效的主/从配置node1
(当前掌握) 至node2
(当前奴隶)。现在我想让 Pacemaker 管理我的 MySQL 实例,以便它可以提升/降级主服务器或从服务器。
根据这个(旧)维基页面,我应该可以通过这样做来实现设置:
primitive p_mysql ocf:heartbeat:mysql \
params binary="/usr/sbin/mysqld" \
op start timeout="120" \
op stop timeout="120" \
op promote timeout="120" \
op demote timeout="120" \
op monitor role="Master" timeout="30" interval="10" \
op monitor role="Slave" timeout="30" interval="20"
ms ms_mysql p_mysql \
meta clone-max=3
如您所见,我确实稍微更改了第二个op monitor
参数的间隔,因为我知道 Pacemaker 通过资源名称(此处为p_mysql
)、操作名称和间隔来识别操作。间隔是区分从属节点上的监视操作与主节点上的监视操作的唯一方法。
问题
将更改提交到CID
并打开交互式后crm_mon
,我可以看到 Pacemaker 无法在每个节点上启动资源。请参阅所附的屏幕截图:
抱歉,由于我的声誉还不够,所以无法上传超过 2 个链接……评论中的截图
它一遍又一遍循环,尝试将当前主服务器设置为从服务器,将当前从服务器设置为从服务器,然后设置为主服务器...它显然在循环,无法正确实例化 MySQL 实例。
作为参考,我的crm configure show
:
node 1: primary
node 2: secondary
primitive Failover ocf:onlinenet:failover \
params api_token=108efe5ee771368557869c7a837361a7c786f210 failover_ip=212.129.48.135
primitive WebServer apache \
params configfile="/etc/apache2/apache2.conf" statusurl="http://127.0.0.1/server-status" \
op monitor interval=40s \
op start timeout=40s interval=0 \
op stop timeout=60s interval=0
primitive p_mysql mysql \
params binary="/usr/sbin/mysqld" \
op start timeout=120 interval=0 \
op stop timeout=120 interval=0 \
op promote timeout=120 interval=0 \
op demote timeout=120 interval=0 \
op monitor role=Master timeout=30 interval=10 \
op monitor role=Slave timeout=30 interval=20
ms ms_mysql p_mysql \
meta clone-max=3
clone WebServer-clone WebServer
colocation Failover-WebServer inf: Failover WebServer-clone
property cib-bootstrap-options: \
dc-version=1.1.12-561c4cf \
cluster-infrastructure=corosync \
cluster-name=ascluster \
stonith-enabled=false \
no-quorum-policy=ignore
答案1
解决方案
感谢与我一起调查的人,我找到了解决问题的方法,现在我有一个可行的设置。如果你有足够的勇气,你可以阅读原始问题的评论,但这里是帮助我解决问题的步骤的摘要。
阅读源代码
设置 HA 资源时要做的第一件事听起来很典型,但是阅读手册。不,认真地学习你计划使用的软件是如何工作的。在那个特定情况下,我的第一个错误是没有仔细阅读和理解资源代理 (RA) 的工作原理。由于我使用的是mysql
提供的 RA Heartbeat
,因此 RA 源脚本可在ClusterLabs 的资源代理 GitHub 存储库。
不要忘记阅读所包含文件的源代码!
确保您的软件是最新的
在我的具体案例中,并没有明确指出这是一个问题,但作为@gf_&@remote mind建议,拥有与您的软件版本兼容的 RA 版本总是一件好事。
填写该死的参数
HA 中的第一条规则是:不要依赖默认值。
事实并非如此,有时你可以这样做,但说实话,如果我向 RA 提供了所有可选参数,我就能解决我的问题更快。
这实际上是阅读源代码部分很重要,因为它能让你真正理解为什么需要参数。但是,由于这些参数通常只是简要描述,你可能需要进一步了解meta-data
并找到参数的使用位置。就我而言,这个东西没有起作用,原因如下:
- 我没有提供套接字路径,并且默认的因为该脚本与我的系统(Debian 8)的默认脚本不匹配。
- 我没有提供
test_user
,test_passwd
: 这些存在于meta-data
但我认为我不需要这个。在我决定看看它的用途后,我发现这些参数用于执行一个简单的select count(*)
在数据库上。由于默认设置为使用root
无密码用户,因此在我的情况下它不起作用(因为在我的数据库上,root
需要密码才能连接数据库)。此特定步骤阻止 RA 检查当前节点是否是从属节点。 - 其他一些参数也缺失了,我发现后才知道我需要它们该死的默认设置被隐藏了。
最后的话
再次感谢@gf_感谢您花时间与我一起调查并提供线索来调试我的设置。
良好的 HA 设置并不容易实现(尤其是从头开始时),但如果配置良好,则可以非常强大并提供安心。
注意:不保证安心;)