我正在为具有2个节点(2个物理服务器)的Web应用程序设置HA群集:
master节点) slave节点) 使用Corosync&Pacemaker我能够创build群集和一些资源代理,包括IP故障转移和Web服务器(apache)。
Failover资源一次仅存在于一个节点上 使用python脚本对我的主机提供商进行API调用,以更新IP故障转移目标
WebServer资源在每个可用节点上都存在(作为克隆) 标准的OCF资源使用Apache的
server-status处理程序
Failover和WebServer必须同时在服务器上运行,以便将其视为可用。 现在我想创build一个自定义资源代理(就像我为IP故障转移所做的那样),它将:
理想情况下,资源将仅在一个节点( 主节点)上启动,并在所有其他节点( 从节点)上停止。 因此,启动资源会将当前节点置于master模式,并停止将其置于slave模式。
我做了一个脚本,可以轻松实现所有这些操作。 这是如何工作的。
以主模式打开本地节点:
# /usr/local/bin/db_failover_switch.sh master
在从属模式下打开本地节点:
# /usr/local/bin/db_failover_switch.sh slave 123.45.67.89
大纲很简单明白。 我面临的问题是,我显然需要设置主IP以使从服务器相应地configurationMySQL和Redis服务。
在故障转移的情况下,我想:
master节点 slave节点 为了停止资源(即将其设置为从属模式),我需要知道正在运行资源的节点的IP地址(主机名将执行)。
有没有一种方法可以让我的dynamic参数Pacemaker将传递给我的资源代理? 或者,也许我可以直接从我的资源代理脚本检索群集信息,以知道哪个节点运行特定的资源?
在阅读您的评论之后,我不确定您是否仍然想要按照您之前计划的路线行事,但无论如何,这里是一个input:
使用crm_mon --group-by-node -1您可以获得群集当前状态的“一次性”视图,并按照您的节点进行分组。 -1参数使得这个非交互式,这意味着它只是显示数据,然后退出。
( 编辑:也许使用crm_mon -1使您的具体情况下的parsing更容易。)
你可以parsing这个输出,并采取相应的行动。
(个人说明:我也会去看你在评论中描述的路线,毕竟这是两个守护进程,所以两个资源似乎是合理的,而且已经有资源代理存在了,祝你好运!