13.8. 使用资源限制配置高可用性集群
在配置集群时,您可以指定集群资源的行为与应用程序要求保持一致。您可以通过配置资源限制来控制集群资源的行为。
您可以定义以下资源限制类别:
- 位置限制,决定资源可在哪些节点上运行。有关位置限制的详情,请参阅 确定资源可在哪些节点上运行。
- 排序约束,决定了资源运行的顺序。有关排序约束的详情,请参考 确定集群资源运行的顺序。
- 共处约束,指定一个资源的位置取决于另一个资源的位置。有关托管约束的详情,请参考 托管集群资源。
- ticket 约束,用来指示依赖于特定 Booth ticket 的资源。有关 Booth ticket 约束的详情,请参考 多站点 Pacemaker 集群。
以下示例流程使用 ha_cluster
RHEL 系统角色来创建高可用性集群,其中包含资源位置约束、资源 colocation 约束、资源顺序限制和资源票据限制。
警告
ha_cluster
RHEL 系统角色替换指定节点上的任何现有集群配置。playbook 中指定的任何设置都将丢失。
先决条件
- 您已准备好控制节点和受管节点。
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户具有
sudo
权限。 - 作为集群成员运行的系统必须拥有对 RHEL 和 RHEL 高可用性附加组件的有效订阅。
- 清单文件指定集群节点,如 为 ha_cluster RHEL 系统角色指定清单 中所述。有关创建清单文件的常规信息,请参阅在 RHEL 8 上准备控制节点。
步骤
将您的敏感变量存储在加密文件中:
创建密码库:
$ ansible-vault create vault.yml New Vault password: <vault_password> Confirm New Vault password: <vault_password>
在
ansible-vault create
命令打开编辑器后,以 <key> : < value> 格式输入
敏感数据:cluster_password: <cluster_password>
- 保存更改,并关闭编辑器。Ansible 加密 vault 中的数据。
创建包含以下内容的 playbook 文件,如
~/playbook.yml
:--- - name: Create a high availability cluster hosts: node1 node2 vars_files: - vault.yml tasks: - name: Create cluster with resource constraints ansible.builtin.include_role: name: rhel-system-roles.ha_cluster vars: ha_cluster_cluster_name: my-new-cluster ha_cluster_hacluster_password: "{{ cluster_password }}" ha_cluster_manage_firewall: true ha_cluster_manage_selinux: true # In order to use constraints, we need resources # the constraints will apply to. ha_cluster_resource_primitives: - id: xvm-fencing agent: 'stonith:fence_xvm' instance_attrs: - attrs: - name: pcmk_host_list value: node1 node2 - id: dummy-1 agent: 'ocf:pacemaker:Dummy' - id: dummy-2 agent: 'ocf:pacemaker:Dummy' - id: dummy-3 agent: 'ocf:pacemaker:Dummy' - id: dummy-4 agent: 'ocf:pacemaker:Dummy' - id: dummy-5 agent: 'ocf:pacemaker:Dummy' - id: dummy-6 agent: 'ocf:pacemaker:Dummy' # location constraints ha_cluster_constraints_location: # resource ID and node name - resource: id: dummy-1 node: node1 options: - name: score value: 20 # resource pattern and node name - resource: pattern: dummy-\d+ node: node1 options: - name: score value: 10 # resource ID and rule - resource: id: dummy-2 rule: '#uname eq node2 and date in_range 2022-01-01 to 2022-02-28' # resource pattern and rule - resource: pattern: dummy-\d+ rule: node-type eq weekend and date-spec weekdays=6-7 # colocation constraints ha_cluster_constraints_colocation: # simple constraint - resource_leader: id: dummy-3 resource_follower: id: dummy-4 options: - name: score value: -5 # set constraint - resource_sets: - resource_ids: - dummy-1 - dummy-2 - resource_ids: - dummy-5 - dummy-6 options: - name: sequential value: "false" options: - name: score value: 20 # order constraints ha_cluster_constraints_order: # simple constraint - resource_first: id: dummy-1 resource_then: id: dummy-6 options: - name: symmetrical value: "false" # set constraint - resource_sets: - resource_ids: - dummy-1 - dummy-2 options: - name: require-all value: "false" - name: sequential value: "false" - resource_ids: - dummy-3 - resource_ids: - dummy-4 - dummy-5 options: - name: sequential value: "false" # ticket constraints ha_cluster_constraints_ticket: # simple constraint - resource: id: dummy-1 ticket: ticket1 options: - name: loss-policy value: stop # set constraint - resource_sets: - resource_ids: - dummy-3 - dummy-4 - dummy-5 ticket: ticket2 options: - name: loss-policy value: fence
示例 playbook 中指定的设置包括:
ha_cluster_cluster_name: <cluster_name>
- 您要创建的集群名称。
ha_cluster_hacluster_password: < password>
-
hacluster
用户的密码。hacluster
用户对集群具有完全访问权限。 ha_cluster_manage_firewall: true
-
确定
ha_cluster
RHEL 系统角色是否管理防火墙的变量。 ha_cluster_manage_selinux: true
-
确定
ha_cluster
RHEL 系统角色是否使用selinux
RHEL 系统角色管理防火墙高可用性服务的端口的变量。 ha_cluster_resource_primitives: < cluster_resources>
- 由 ha_cluster RHEL 系统角色配置的 Pacemaker 资源的资源定义列表,包括隔离
ha_cluster_constraints_location: < location_constraints>
- 定义资源位置限制的变量。
ha_cluster_constraints_colocation: < colocation_constraints>
- 定义资源 colocation 约束的变量。
ha_cluster_constraints_order: < order_constraints>
- 定义资源顺序约束的变量。
ha_cluster_constraints_ticket: < ticket_constraints>
- 定义 Booth ticket 约束的变量。
验证 playbook 语法:
$ ansible-playbook --syntax-check --ask-vault-pass ~/playbook.yml
请注意,这个命令只验证语法,不会防止错误但有效的配置。
运行 playbook:
$ ansible-playbook --ask-vault-pass ~/playbook.yml
其他资源
-
/usr/share/ansible/roles/rhel-system-roles.ha_cluster/README.md
文件 -
/usr/share/doc/rhel-system-roles/ha_cluster/
directory