5.5 配置资源约束

配置所有资源只是任务的一部分。即使群集了解所有需要的资源,它仍然不能正确处理它们。例如,尝试在 drbd 的从属节点上装入文件系统是没有意义的(实际上,这将由于 drbd 而失败)。要通知群集这些事项,需要定义约束。

在 High Availability 中,提供了三种类型的约束:

5.5.1 位置约束

每个资源可多次添加此类约束。将对指定资源评估所有 rsc_location 约束。以下列出一个简单示例,该示例将在名称为 earth 的节点上运行 ID 为 fs1-loc 的资源的可能性增加到 100:

crm(live)configure# location fs1-loc fs1 100: earth

5.5.2 组合约束

colocation 命令用于定义哪些资源应在相同主机上运行,哪些资源应在不同主机上运行。通常情况下使用以下顺序:

crm(live)configure# order rsc1 rsc2
crm(live)configure# colocation rsc2 rsc1

只能设置 +INFINITY 或 -INFINITY 的分数来定义必须始终或决不能在同一节点上运行的资源。例如,要始终在同一个主机上运行 ID 为 filesystem_resourcenfs_group 的两个资源,可使用以下约束:

crm(live)configure# colocation nfs_on_filesystem inf: nfs_group filesystem_resource

对于主从属配置,除在本地运行资源以外,还有必要了解当前节点是否为主节点。这可以通过附加 to_rolefrom_role 属性来检查。

5.5.3 排序约束

有时提供启动资源的顺序是必要的。例如,在设备可用于系统之前,您不能装入文件系统。使用排序约束可在另一个资源满足某个特殊条件之前或之后启动或停止某项服务,如已启动、已停止或已升级到主资源。可使用 crm 壳层中的以下命令来配置排序约束:

crm(live)configure# order nfs_after_filesystem mandatory: group_nfs filesystem_resource

5.5.4 示例配置约束

如果没有附加约束,本章使用的示例将不能按预期工作。其中最基本的就是让所有资源在同一台计算机上作为 drbd 资源的主资源运行。另一个关键点就是在任何其他资源启动之前,drbd 资源必须是主资源。在 drbd 不是主资源时尝试装入 drbd 设备只能失败。必须满足的约束如下所示:

  • 文件系统必须始终与 drbd 资源的主资源位于相同的节点上。

    crm(live)configure# colocation filesystem_on_master inf: \
        filesystem_resource drbd_resource:Master
  • NFS 服务器及 IP 地址必须与文件系统位于相同的节点上。

    crm(live)configure# colocation nfs_with_fs inf: \
       nfs_group filesystem_resource
  • NFS 服务器及 IP 地址在装入文件系统后启动:

    crm(live)configure# order nfs_second mandatory: \
       filesystem_resource nfs_group
  • 必须在 drbd 资源升级为节点上的主资源之后将文件系统装入此节点上。

    crm(live)configure# order drbd_first inf: \
        drbd_resource:promote filesystem_resource