我正在设置我的第一个 Pacemaker 集群,它有四个节点,我试图让它在特定的节点组上运行特定的资源。通常,我处理的资源需要恰好有一个在资源组中的某个地方运行。
我的集群中有不同的角色,例如:
- 索引(节点 1 至 4)
- 提交(节点 1 和 2)
- 存档(节点 3 和 4,理想情况下优先选择节点 3)
- 消耗(节点 3 和 4,理想情况下优先选择节点 4)
我定义的资源涉及三个浮动 IP(这些是提交角色)和两个 systemd 服务。(浮动 IP 是最重要的部分;其余卡住的软件自行进行集群。)
我正在尝试跟随https://www.unixarena.com/2015/12/rhel-7-pacemaker-cluster-resource-group-management.html/,但我不确定我对资源组所能做的事情的期望是否符合现实。
目前,pcs资源如下所示:
# pcs resource
Resource Group: submission
reception_ip_general (ocf::heartbeat:IPaddr2): Started node1
reception_ip_networking (ocf::heartbeat:IPaddr2): Started node1
reception_ip_esx (ocf::heartbeat:IPaddr2): Started node1
Resource Group: archive
archive-writer-avro (systemd:archiver@avro): Started node3
archive-writer-syslog (systemd:archiver@syslog): Started node3
目前还没有设置任何种类的约束,只是幸运的是资源已经落到了它们所在的位置(例如,我看到其中一个浮动 IP 位于 node4 上)
为了澄清我想要实现的目标:
- reception_ip_general 应该在 node1 xor node2 上运行
- reception_ip_networking 应该在 node1 xor node2 上运行
- reception_ip_esx 应在 node1 xor node2 上运行
- archive-writer-avro 应该在 node3 xor node4 上运行
- archive-writer-syslog 应该在 node3 xor node4 上运行
我认为我需要的是:
- 允许我定义一组节点“提交”
- 允许我将资源投入“提交”组
- 指定位置约束,使得节点 1 和节点 2 应该是托管“提交”组中事物的节点。
或者我应该考虑:
- 定义节点属性,使得每个节点都设置属性,例如 node1 可能具有属性 submission_role=1、index_role=1
- 指定位置约束,使得资源粘附到具有其匹配属性的节点。
我确信这一定相当简单,但到目前为止,我遇到的所有文档似乎都没有对此进行建模,而且我几乎确信资源组正在引导我走上歧途。
谢谢你的帮助,卡梅伦
更新
pcs 节点属性
我一直在研究节点属性,目前已获得以下信息:
# pcs node attribute
Node Attributes:
node1: indexing_role=1 submission_role=1
node2: indexing_role=1 submission_role=1
node3: archive_role=1 consumption_role=1 indexing_role=1
node4: archive_role=1 consumption_role=1 indexing_role=1
约束如下:
# pcs constraint location reception_ip_general rule score-attribute=submission_role defined submission_role
输出:
# pcs constraint
Location Constraints:
Resource: archive-writer-avro
Constraint: location-archive-writer-avro
Rule: score-attribute=archive_role
Expression: defined archive_role
Resource: archive-writer-syslog
Constraint: location-archive-writer-syslog
Rule: score-attribute=archive_role
Expression: defined archive_role
Resource: reception_ip_esx
Constraint: location-reception_ip_esx
Rule: score-attribute=submission_role
Expression: defined submission_role
Resource: reception_ip_general
Constraint: location-reception_ip_general
Rule: score-attribute=submission_role
Expression: defined submission_role
Resource: reception_ip_networking
Constraint: location-reception_ip_networking
Rule: score-attribute=submission_role
Expression: defined submission_role
Ordering Constraints:
Colocation Constraints:
Ticket Constraints:
节点属性获胜!
调整节点属性,以便我可以模拟节点 3/4 角色之间的偏好
# pcs node attribute
Node Attributes:
node1: indexing_role=1 submission_role=1
node2: indexing_role=1 submission_role=1
node3: archive_role=2 consumption_role=1 indexing_role=1
node4: archive_role=1 consumption_role=2 indexing_role=1
# pcs status
Cluster name: mycluster
Stack: unknown
Current DC: node1 (version unknown) - partition with quorum
Last updated: Wed Aug 15 12:19:45 2018
Last change: Wed Aug 15 12:18:20 2018 by root via crm_attribute on node1
4 nodes configured
5 resources configured
Online: [ node1 node2 node3 node4 ]
Full list of resources:
reception_ip_general (ocf::heartbeat:IPaddr2): Started node1
reception_ip_networking (ocf::heartbeat:IPaddr2): Started node2
reception_ip_esx (ocf::heartbeat:IPaddr2): Started node1
archive-writer-avro (systemd:archiver@avro): Started node3
archive-writer-syslog (systemd:archiver@syslog): Started node3
Daemon Status:
corosync: active/enabled
pacemaker: active/enabled
pcsd: active/enabled
将node3置于待机状态,然后移动到node4
# pcs node standby node3
# pcs resource
reception_ip_general (ocf::heartbeat:IPaddr2): Started node1
reception_ip_networking (ocf::heartbeat:IPaddr2): Started node2
reception_ip_esx (ocf::heartbeat:IPaddr2): Started node1
archive-writer-avro (systemd:archiver@avro): Started node4
archive-writer-syslog (systemd:archiver@syslog): Started node4
将 node3 退出待机状态,然后它返回到 node3
# pcs resource
reception_ip_general (ocf::heartbeat:IPaddr2): Started node1
reception_ip_networking (ocf::heartbeat:IPaddr2): Started node2
reception_ip_esx (ocf::heartbeat:IPaddr2): Started node1
archive-writer-avro (systemd:archiver@avro): Started node3
archive-writer-syslog (systemd:archiver@syslog): Started node3
太棒了,让我们试试提交层,它有相同的分数。当我们“pcs standby node1”时,我看到事情转移到节点2。当我“pcs unstandby node1”时,它停留在节点2上,当我“pcs standby node2”时,事情转移到节点1。
如果我备用节点 1 和节点 2,那么事物将移动到节点 3 和节点 4,然后当我取消备用它们时,将移动回节点 1/2。
答案1
好的,我自己解决了这个问题。
实现此目的的方法是使用节点属性:
为集群中的每个角色创建节点属性。命令如下:
pcs node attribute node1 submission_role=1 index_role=1
属性的值将用于得分。命令例如:
pcs node attribute node3 archive_role=2 consumption_role=1 index_role=1
pcs node attribute node4 archive_role=1 consumption_role=2 index_role=1
创建适用于已定义属性的主机的位置约束,并使用该属性的值作为分数。命令如下:
pcs constraint location archive-writer-avro rule score-attribute=archive_role defined archive_role
使用诸如
pcs node standby node1
、pcs node unstandby node1
和 之类的命令进行测试watch pcs resource
调整节点属性来改变权重(您应该能够使用负值来表示避免而不是优先)。
请注意,我使用的值可能不是最好的;也许 100 比 1 更好。
无论如何,感谢大家思考我的问题。
干杯,卡梅伦