将主节点降为从节点时获取运行特定资源的节点的IP地址

build立

我正在为具有2个节点(2个物理服务器)的Web应用程序设置HA群集:

  • node1(当前master节点)
  • node2(当前slave节点)

使用Corosync&Pacemaker我能够创build群集和一些资源代理,包括IP故障转移和Web服务器(apache)。

资源

  • Failover资源一次仅存在于一个节点上

使用python脚本对我的主机提供商进行API调用,以更新IP故障转移目标

  • WebServer资源在每个可用节点上都存在(作为克隆)

标准的OCF资源使用Apache的server-status处理程序

约束

  • 有一个约束,说FailoverWebServer必须同时在服务器上运行,以便将其视为可用。

问题

现在我想创build一个自定义资源代理(就像我为IP故障转移所做的那样),它将:

  • 将当前从节点的mysql实例切换到主节点
  • 将当前主节点的mysql实例切换到新主节点的从节点
  • Redis实例基本上是一样的

理想情况下,资源将仅在一个节点( 节点)上启动,并在所有其他节点( 节点)上停止。 因此,启动资源会将当前节点置于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服务。

TL; DR

在故障转移的情况下,我想:

  • 资源在节点2上成为master节点
  • 资源在节点1上成为slave节点

为了停止资源(即将其设置为从属模式),我需要知道正在运行资源的节点的IP地址(主机名将执行)。

有没有一种方法可以让我的dynamic参数Pacemaker将传递给我的资源代理? 或者,也许我可以直接从我的资源代理脚本检索群集信息,以知道哪个节点运行特定的资源?

在阅读您的评论之后,我不确定您是否仍然想要按照您之前计划的路线行事,但无论如何,这里是一个input:

使用crm_mon --group-by-node -1您可以获得群集当前状态的“一次性”视图,并按照您的节点进行分组。 -1参数使得这个非交互式,这意味着它只是显示数据,然后退出。

编辑:也许使用crm_mon -1使您的具体情况下的parsing更容易。)

你可以parsing这个输出,并采取相应的行动。

(个人说明:我也会去看你在评论中描述的路线,毕竟这是两个守护进程,所以两个资源似乎是合理的,而且已经有资源代理存在了,祝你好运!