我正在使用Corosync / Pacemaker受pipe群集中的两台物理服务器为Web应用程序设置HA群集。
在发现我的方向错误之后 ,我决定使用心跳捆绑的MySQL资源代理来pipe理群集中的MySQL实例。
目前,从node1 (当前主机 )到node2 (当前从机 )有一个工作主/从configuration。 现在我想让Pacemakerpipe理我的MySQL实例,以便它可以提升/降级主控或从属。
根据这个(旧的)wiki页面 ,我应该能够通过这样做来实现设置:
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
感谢与我调查的人,我能find解决我的问题,我现在有一个工作设置。 如果你觉得足够勇敢,你可以阅读关于原始问题的评论,但这里是帮助我解决问题的步骤的总结。
设置HA资源时首先要做的事情听起来很典型,但RTFM 。 不要太认真,了解你计划使用的软件是如何工作的。 在这种特殊情况下,我的第一个错误就是没有仔细阅读和理解资源代理(RA)是如何工作的。 由于我使用的是由Heartbeat提供的mysql RA,所以RA源脚本在ClusterLabs的资源代理GitHub仓库上可用 。
不要忘记阅读包含文件的来源!
在我的特殊情况下,没有清楚地将其标识为问题,但是正如@gf_ & @remote提示的那样,使用您的软件版本的RA版本总是一件好事。
HA中的第一条规则:不要依赖默认值。
事实并非如此,有时候你可以,但说实话,如果我已经为RA提供了每个可选的参数,那么我就可以更快地解决我的问题。
这实际上是阅读源代码部分的重要部分,因为它可以让你真正理解为什么需要参数。 但是,由于它们通常只是简单地描述,所以您可能需要比meta-data更进一步,并找出使用的参数在哪里。 在我的情况下,这件事情不起作用的原因有几个:
test_user , test_passwd :这些都在meta-data但我认为我不需要这个。 在我决定查看它的用途后,我发现这些参数被用来在数据库上执行一个简单的select count(*) 。 而且由于缺省设置为使用root用户而不需要密码,所以在我的情况下它不起作用(因为在我的数据库中, root需要密码来连接数据库)。 如果当前节点是从属节点,这个特定步骤阻止RA执行检查。 再一次,非常感谢@gf_花时间跟我一起调查,并提供线索以debugging我的设置。
好的HA设置不是那么容易实现的(尤其是从头开始的时候),但是如果configuration好的话可以非常强大并且让人安心。
注意:安心不保证;)