设置

设置

设置

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

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

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

资源

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

使用 Python 脚本向我的托管服务提供商发出 API 调用,以更新 IP 故障转移目标

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

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

约束

  • 有一个限制,规定必须在服务器上同时运行才能将其视为可用FailoverWebServer

问题

现在我想创建一个自定义资源代理(就像我为 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,以便从服务器相应地配置 MySQL 和 Redis 服务。

总结

如果发生故障转移,我想要:

  • 资源开始于node2成为master节点
  • 资源停止于node1成为slave节点

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

有没有办法让我获得一个动态参数,以便 Pacemaker 将其传递给我的资源代理?或者,我可以直接从资源代理脚本中检索集群信息,以了解哪个节点正在运行特定资源?

答案1

读了您的评论后,我不确定您是否还想走最初计划的路线,但无论如何,这里有一个输入:

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

编辑:也许使用可以crm_mon -1使您的具体情况的解析变得更容易。)

您可以解析此输出并采取相应措施。

(个人说明:我也会按照您在评论中描述的路线走。毕竟,这是两个守护进程,所以两个资源似乎是合理的。此外,要使用的资源代理已经存在。祝你好运!)

相关内容