设置
我正在为具有 2 个节点(2 台物理服务器)的 Web 应用程序设置 HA 集群:
- node1(当前
master
节点) - node2(当前
slave
节点)
使用 Corosync 和 Pacemaker,我能够创建集群和一些资源代理,包括 IP 故障转移和 Web 服务器(apache)。
资源
Failover
资源一次仅存在于一个节点上
使用 Python 脚本向我的托管服务提供商发出 API 调用,以更新 IP 故障转移目标
WebServer
资源(作为克隆)存在于每个可用节点上
使用 Apache
server-status
处理程序的标准 OCF 资源
约束
- 有一个限制,规定必须在服务器上同时运行才能将其视为可用
Failover
。WebServer
问题
现在我想创建一个自定义资源代理(就像我为 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
使您的具体情况的解析变得更容易。)
您可以解析此输出并采取相应措施。
(个人说明:我也会按照您在评论中描述的路线走。毕竟,这是两个守护进程,所以两个资源似乎是合理的。此外,要使用的资源代理已经存在。祝你好运!)