第 7 章 资源约束
您可以通过配置该资源的约束来决定集群中资源的行为。您可以配置以下约束类别:
位置
限制 - 位置约束决定资源可在哪个节点上运行。位置限制在 第 7.1 节 “位置限制” 中描述。顺序
约束 - 顺序约束决定资源运行的顺序。在 第 7.2 节 “顺序限制” 中描述了顺序限制。共存
约束 - 共同位置约束(colocation constraint)决定资源相对于其他资源的位置。在 第 7.3 节 “资源共存” 中描述了 colocation 约束。
简而言之,配置一组限制会将一组资源放在一起,并确保资源按顺序启动并按相反顺序停止,Pacemaker 支持资源组的概念。有关资源组的详情请参考 第 6.5 节 “资源组”。
7.1. 位置限制
位置限制决定资源可在哪些节点上运行。您可以配置位置限制,以确定资源是否首选或避免指定节点。
7.1.1. 基本位置限制
您可以配置基本位置约束,以指定资源首选项或避免节点,使用可选
分数
值来指示约束的首选程度。
以下命令为资源创建一个位置约束,以偏好指定节点。请注意,可以使用单个命令为多个节点在特定资源上创建限制。
pcs constraint location rsc prefers node[=score] [node[=score]] ...
以下命令为资源创建一个位置约束,以避免指定节。
pcs constraint location rsc avoids node[=score] [node[=score]] ...
表 7.1 “简单位置限制选项” 以最简单的形式总结了配置位置限制的选项的含义。
项 | 描述 |
---|---|
rsc
|
资源名称
|
node
|
节点的名称
|
分数
|
动态整数值,用于指示资源应首选的资源还是避免节点。
INFINITY 是资源位置约束的默认 分 数值。
pcs contraint 位置 器 命令 中的 分数 值为 INFINITY 表示该节点首选该节点(如果节点可用),但不会阻止资源在指定节点不可用时在另一节点上运行。
pcs contraint 位置 器c 中的 该资源永远不会在该节点上运行,即使没有其它节点可用。这等同于设置分数为 -INFINITY 的 pcs constraint location add 命令。
|
以下命令创建了位置约束,以指定资源
Web 服务器首选
节点 node1
。
# pcs constraint location Webserver prefers node1
从 Red Hat Enterprise Linux 7.4 开始,pcs 支持命令行中的位置限制中的正则表达式。这些限制适用于基于正则表达式匹配资源名称的多个资源。这可让您使用单一命令行配置多个位置限制。
以下命令创建一个位置约束,将资源
dummy0 指定为 dummy
9
首选 node1
。
# pcs constraint location 'regexp%dummy[0-9]' prefers node1
因为 Pacemaker 使用 POSIX 扩展正则表达式,如 http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap09.html#tag_09_04 所述,您可以使用以下命令指定相同的约束。
# pcs constraint location 'regexp%dummy[[:digit:]]' prefers node1
7.1.2. 高级位置限制
在节点上配置位置限制时,您可以使用 pcs constraint location 命令的
resource-discovery
选项指示 Pacemaker 是否应该为指定资源在该节点上执行资源发现。将资源发现限制到物理上能够运行的节点子集可能会在有大量节点时显著提高性能。当使用 pacemaker_remote
将节点数扩展到数百个节点范围时,应考虑此选项。
以下命令显示为 pcs constraint location 命令指定
resource-discovery
选项的格式。请注意,id 是约束 id。在 表 7.1 “简单位置限制选项” 中总结了rsc、 node 和分数的含义。在这个命令中,正分数值对应一个基本位置约束 ,它配置为首选节点,而分数的负数值对应配置资源以避免节点的基本位置约束。与基本位置限制一样,您也可以使用这些限制的资源使用正则表达式。
pcs constraint location add id rsc node score [resource-discovery=option]
表 7.2 “资源发现值” 总结了您可以为
resource-discovery
选项指定的值的含义。
值 | 描述 |
---|---|
always
|
始终为此节点上的指定资源执行资源发现。这是资源位置约束的默认
resource-discovery 值。
|
never
|
永不为这个节点上的指定资源执行资源发现。
|
专用
|
仅在此节点上对指定资源执行资源发现(及其他标记为
专用 的节点)。在不同节点间使用 专用 发现同一资源的多个位置限制可创建节点 资源发现的 子集。如果某个资源在一个或多个节点上标记为 独 占发现,则该资源仅被允许放置到节点的子集中。
|
请注意,将
resource-discovery
选项设置为 never
或 专用
选项可在这些位置中激活资源,而无需了解集群的知识。如果服务在集群控制之外启动(如 systemd
或管理员),则可能会导致资源在多个位置处于活跃状态。如果 部分
群集发生故障或遭遇脑裂,或者资源在该节点上活跃时更改了 resource-discovery
属性,则也会发生这种情况。因此,只有在有超过八个节点时才使用这个选项,并可以保证只能在特定位置运行该资源(例如,当所需的软件没有在其它任何位置安装时)。
7.1.3. 使用规则确定资源位置
对于更复杂的位置限制,您可以使用 Pacemaker 规则来确定资源的位置。有关 Pacemaker 规则以及您可以设置的属性的一般信息,请参阅 第 11 章 Pacemaker 规则。
使用以下命令配置使用规则的 Pacemaker 约束。如果省略
分数
,则默认为 INFINITY。如果省略 resource-discovery
,则默认为 always
。有关 resource-discovery
选项的详情请参考 第 7.1.2 节 “高级位置限制”。与基本位置限制一样,您也可以使用这些限制的资源使用正则表达式。
使用规则配置位置限制时,
分
数值可以是正数或负数,正值表示"prefers",负值表示"avoids"。
pcs constraint location rsc rule [resource-discovery=option] [role=master|slave] [score=score | score-attribute=attribute] expression
expression 选项可以是以下之一,其中 duration_options 和 date_spec_options 是:hours、monthdays、workerdays、yeardays、monthdays、month、weeks、weekyears、moon,如 表 11.5 “日期规格的属性” 所述。
defined|not_defined attribute
attribute lt|gt|lte|gte|eq|ne [string|integer|version] 值
日期 gt|lt date
至今为止 的日期
持续时间为 duration_options 的日期...
date-spec date_spec_options
expression and|or 表达式
(表达式)
下面的位置约束配置一个满足以下位置的表达式(如果现在是 2018 年)。
# pcs constraint location Webserver rule score=INFINITY date-spec years=2018
以下命令配置一个周一到周五从上午 9 点下午 5 点为 true 的表达式。请注意,小时值为 16 可以匹配到 16:59:59,因为小时数仍然匹配。
# pcs constraint location Webserver rule score=INFINITY date-spec hours="9-16" weekdays="1-5"
下面的命令配置一个表达式,当周五且为 13 号并为一个满月时,这个表达式为 true。
# pcs constraint location Webserver rule date-spec weekdays=5 monthdays=13 moon=4
7.1.4. 位置限制策略
使用 第 7.1.1 节 “基本位置限制”、第 7.1.2 节 “高级位置限制” 和 第 7.1.3 节 “使用规则确定资源位置” 中描述的任何位置限制,您可以配置常规策略来指定资源可在哪些节点上运行:
- Opt-In 集群 - 配置一个集群,默认情况下,任何资源都无法在任何位置运行,然后有选择地为特定资源启用允许的节点。配置 opt-in 集群的步骤请参考 第 7.1.4.1 节 “配置 "Opt-In" 集群”。
- Opt-Out 集群s - 配置一个集群,默认情况下,所有资源都可在任何位置运行,然后为不允许在特定节点上运行的资源创建位置限制。配置 opt-out 集群的步骤请参考 第 7.1.4.2 节 “配置 "Opt-Out" 集群”。这是默认的 Pacemaker 策略。
是否应选择将集群配置为 opt-in 或 opt-out 集群,取决于您的个人偏好和集群的构建。如果大多数资源可以在大多数节点上运行,那么如果没有选择的协议则可能会导致配置更简单。另一方面,如果大多数资源只能在一小部分节点中运行,那么选择的配置可能比较简单。
7.1.4.1. 配置 "Opt-In" 集群
要创建一个 opt-in 集群,将
symmetric-cluster
集群属性设置为 false
,以防止资源默认在任何位置运行。
# pcs property set symmetric-cluster=false
为单个资源启用节点。以下命令配置位置限制,以便资源
Web 服务器首选
节点 example-1
、资源 数据库
首选节点 example-2
,如果首选节点出现故障,这两个资源都可切换到节点 example-3
。当为 opt-in 集群配置位置限制时,设置零分数可允许资源在节点上运行,而不表示首选或避免该节点。
#pcs constraint location Webserver prefers example-1=200
#pcs constraint location Webserver prefers example-3=0
#pcs constraint location Database prefers example-2=200
#pcs constraint location Database prefers example-3=0
7.1.4.2. 配置 "Opt-Out" 集群
要创建一个 opt-out 集群,将
symmetric-cluster
集群属性设置为 true
,以允许资源默认随处运行。
# pcs property set symmetric-cluster=true
以下命令将生成一个与 第 7.1.4.1 节 “配置 "Opt-In" 集群” 中的示例对应的配置。如果首选节点失败,这两个资源都可切换到节点
example-3
,因为每个节点都有隐式分数 0。
#pcs constraint location Webserver prefers example-1=200
#pcs constraint location Webserver avoids example-2=INFINITY
#pcs constraint location Database avoids example-1=INFINITY
#pcs constraint location Database prefers example-2=200
请注意,不需要在这些命令中指定 INFINITY 分数,因为这是分数的默认值。
7.1.5. 配置资源以首选其当前节点
资源具有
资源粘性
值,您可以在创建资源时将其设置为 meta 属性,如 第 6.4 节 “资源元数据选项” 所述。resource-stickiness
值决定资源要保留在当前运行节点中的有多少。Pacemaker 与其他设置(如位置限制的分数)一起考虑资源 粘性
值,以确定是否将资源移至另一节点还是保留原位。
默认情况下,创建资源
粘性
值为 0。当 资源粘性
设置为 0 时,Pacemaker 的默认行为是移动资源,以便在集群节点中平均分配这些资源。这可能导致健康的资源变化频率超过您的要求。要防止这种行为,您可以将默认 资源粘性
值设置为 1。此默认值将应用到集群中的所有资源。这个小值可以被您创建的其他限制轻松覆盖,但可以防止 Pacemaker 在集群中无用地移动处于健康状态的资源。
以下命令将默认资源粘性值设置为 1。
# pcs resource defaults resource-stickiness=1
如果设置了
资源粘性
值,则没有资源移至新添加的节点。如果此时需要资源平衡,您可以临时将资源 粘性
值设置为 0。
请注意,如果位置约束分数高于资源粘性值,集群仍然可以将健康资源移至位置约束点的节点。
有关 Pacemaker 如何确定资源放置位置的更多信息,请参阅 第 9.6 节 “使用和放置策略”。