跳到内容跳到页面导航:上一页 [access key p]/下一页 [access key n]
documentation.suse.com / SUSE Linux Enterprise High Availability 文档 / 管理指南 / 配置和管理 / 配置资源约束
适用范围 SUSE Linux Enterprise High Availability 15 SP6

7 配置资源约束

配置好所有资源只是完成了该任务的一部分。即便群集知道所有需要的资源,也可能无法正确处理这些资源。使用资源约束可指定能在哪些群集节点上运行资源、以何顺序加载资源,以及特定资源依赖于其他哪些资源。

7.1 约束类型

提供三种不同的约束:

资源位置

位置约束定义资源可以、不可以或首选在哪些节点上运行。

资源共置

共置约束告知群集哪些资源可以或不可以在同一个节点上运行。

资源顺序

顺序约束定义操作的顺序。

重要
重要:约束与特定资源类型的限制
  • 不要为资源组的成员创建共置约束,而是应该创建指向整个资源组的共置约束。其他所有类型的约束可安全地用于资源组的成员。

  • 不要对包含克隆资源或者应用了可升级克隆资源的资源使用任何约束。约束必须应用于克隆资源或可升级克隆资源,而不能应用于子资源。

7.2 分数和 infinity

定义约束时,还需要指定分数。各种分数是群集工作方式的重要组成部分。事实上,从迁移资源到决定要将已降级群集中的哪个资源停止,所有这些操作都是通过操控分数来实现。分数按每个资源来计算,资源分数为负的任何节点都无法运行该资源。计算资源的分数后,群集会选择分数最高的节点。

INFINITY 目前定义为 1,000,000。提高或降低分数需遵循以下三个基本规则:

  • 任何值 + 无穷大 = 无穷大

  • 任何值 - 无穷大 = -无穷大

  • 无穷大 - 无穷大 = -无穷大

定义资源约束时,需为每个约束指定一个分数。分数表示您指派给此资源约束的值。分数较高的约束先应用,分数较低的约束后应用。通过为给定资源创建不同分数的其他位置约束,可以指定资源要故障转移至的目标节点的顺序。

7.3 资源模板和约束

如果定义了资源模板(请参见第 6.8 节 “创建资源模板”),则可在以下类型的约束中引用该模板:

  • 顺序约束

  • 共置约束

  • rsc_ticket 约束(用于 Geo 群集)

但是,共置约束不得包含多个对模板的引用。资源集不得包含对模板的引用。

在约束中引用的资源模板代表派生自该模板的所有原始资源。这意味着,约束将应用于引用资源模板的所有原始资源。在约束中引用资源模板是资源集的备用方式,它可以显著简化群集配置。有关资源集的细节,请参见第 7.7 节 “使用资源集定义约束”

7.4 添加位置约束

位置约束决定资源可在哪个节点上运行、优先在哪个节点上运行,或者不能在哪个节点上运行。将与某个数据库相关的所有资源存放在同一个节点上,就是位置约束的一个示例。每个资源可多次添加此类约束。对于给定资源,将评估所有 location 约束。

可以使用 Hawk2 或 crmsh 来添加位置约束。

7.4.1 使用 Hawk2 添加位置约束

过程 7.1︰ 添加位置约束
  1. 登录 Hawk2:

    https://HAWKSERVER:7630/
  2. 从左侧导航栏中,选择配置 › 添加约束 › 位置

  3. 输入唯一的约束 ID

  4. 资源列表中,选择要为其定义约束的一个或多个资源。

  5. 输入一个分数。分数表示您指派给此资源约束的值。正值表示资源可以在下一步中指定的节点上运行。负值表示它不应在该节点上运行。分数较高的约束先应用,分数较低的约束后应用。

    也可以通过下拉框设置某些常用值:

    • 要强制资源在该节点上运行,请单击箭头图标并选择 Always。如此会将分数设置为 INFINITY

    • 如果要禁止资源在该节点上运行,请单击箭头图标并选择 Never。如此会将分数设置为 -INFINITY,表示资源不得在该节点上运行。

    • 要将分数设置为 0,请单击箭头图标并选择 Advisory。这样便会禁用约束。如果您要设置资源发现,但又不想约束资源,便可使用此方法。

  6. 选择一个节点

  7. 单击创建以完成配置。如果操作成功,屏幕顶部会显示一条消息。

Hawk2 - 位置约束
图 7.1︰ Hawk2 - 位置约束

7.4.2 使用 crmsh 添加位置约束

location 命令定义资源可以、不可以或首选在哪些节点上运行。

下面是个简单的示例,它将首选在名为 fs1 的节点上运行资源 alice 的值设置为 100:

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

另一个示例是使用 ping 的位置:

crm(live)configure# primitive ping ping \
    params name=ping dampen=5s multiplier=100 host_list="r1 r2"
crm(live)configure# clone cl-ping ping meta interleave=true
crm(live)configure# location loc-node_pref internal_www \
    rule 50: #uname eq alice \
    rule ping: defined ping

参数 host_list 是要 ping 和计数的主机的空格分隔列表。位置约束的另一个用例是将基元资源分组为资源集。例如,如果多个资源依赖于 ping 属性来进行网络连接,则此功能会十分有用。以前,需要在配置中复制 -inf/ping 规则数次,因此不必要地增加了复杂性。

下面的示例会创建引用虚拟 IP 地址 loc-alicevip1 的资源集 vip2

crm(live)configure# primitive vip1 IPaddr2 params ip=192.168.1.5
crm(live)configure# primitive vip2 IPaddr2 params ip=192.168.1.6
crm(live)configure# location loc-alice { vip1 vip2 } inf: alice

在某些情况下,为 location 命令使用资源模式会有效且方便得多。资源模式是用两个斜杠括起的正则表达式。例如,可以使用以下命令全部匹配上述虚拟 IP 地址:

crm(live)configure# location loc-alice /vip.*/ inf: alice

7.5 添加共置约束

共置约束告知群集哪些资源可以或不可以在同一个节点上运行。由于共置约束定义了资源之间的依赖性,因此您至少需要两个资源才能创建共置约束。

可以使用 Hawk2 或 crmsh 来添加共置约束。

7.5.1 使用 Hawk2 添加共置约束

过程 7.2︰ 添加共置约束
  1. 登录 Hawk2:

    https://HAWKSERVER:7630/
  2. 从左侧导航栏中,选择配置 › 添加约束 › 共置

  3. 输入唯一的约束 ID

  4. 输入一个分数。分数决定资源之间的位置关系。正值表示多个资源应在同一个节点上运行。负值表示多个资源不应在同一个节点上运行。系统会结合该分数与其他因素来决定将资源放置在何处。

    也可以通过下拉框设置某些常用值:

    • 要强制资源在同一个节点上运行,请单击箭头图标并选择 Always。如此会将分数设置为 INFINITY

    • 如果要禁止资源在同一个节点上运行,请单击箭头图标并选择 Never。如此会将分数设置为 -INFINITY,表示资源不得在同一个节点上运行。

  5. 要为约束定义资源,请执行以下步骤:

    1. 资源类别的下拉框中,选择某个资源(或模板)。

      系统即会添加该资源,并且下面会出现一个新的空下拉框。

    2. 重复此步骤添加更多资源。

      由于最上面的资源依赖于下一个资源(下面的资源以此类推),群集首先会决定向哪个位置放置最后一个资源,然后根据该决定放置依赖它的资源,以此类推。如果无法满足约束,群集可能不允许运行依赖资源。

    3. 要交换共置约束中资源的顺序,请单击一个资源旁边的向上箭头图标,将其与上方的项目加以交换。

  6. 根据需要为每个资源指定其他参数(例如 StartedStoppedPromoteDemote)。单击资源旁边的空下拉框,然后选择所需的条目。

  7. 单击创建以完成配置。如果操作成功,屏幕顶部会显示一条消息。

Hawk2 - 共置约束
图 7.2︰ Hawk2 - 共置约束

7.5.2 使用 crmsh 添加共置约束

colocation 命令用于定义哪些资源应在相同主机上运行,哪些资源应在不同主机上运行。

可以设置 +inf 或 -inf 的分数,用来定义必须始终或禁止在同一节点上运行的资源。您还可以使用非无限分数。在这种情况下,共置将称为建议,群集可决定不遵循它们,从而在出现冲突时不停止其他资源。

例如,如果希望 resource1resource2 资源始终在同一个主机上运行,请使用以下约束:

crm(live)configure# colocation coloc-2resource inf: resource1 resource2

对于主从配置,除了在本地运行资源以外,还需要了解当前节点是否为主节点。

7.6 添加顺序约束

使用顺序约束可在另一个资源满足特定条件(例如已启动、已停止或已升级为主资源)之前或之后,立即启动或停止某项服务。例如,在设备可用于系统之前,您不能挂载文件系统。由于顺序约束定义了资源之间的依赖性,因此您至少需要两个资源才能创建顺序约束。

可以使用 Hawk2 或 crmsh 来添加顺序约束。

7.6.1 使用 Hawk2 添加顺序约束

过程 7.3︰ 添加顺序约束
  1. 登录 Hawk2:

    https://HAWKSERVER:7630/
  2. 在左侧导航栏中,选择配置 › 添加约束 › 顺序

  3. 输入唯一的约束 ID

  4. 输入一个分数。如果分数大于零,则顺序约束为强制性的,否则为选择性的。

    也可以通过下拉框设置某些常用值:

    • 要将顺序约束设为强制规则,请单击箭头图标并选择 Mandatory

    • 如果只想将顺序约束设为一项建议,请单击箭头图标并选择 Optional

    • Serialize:要确保不会同时对资源执行两个停止/启动操作,请单击箭头图标并选择 Serialize。如此可确保一个资源完成启动操作后,另一个资源方可启动。典型的使用案例是启动期间在主机上产生高负载的资源。

  5. 对于顺序约束,通常可将选项对称保持为启用状态。这指定了资源以相反顺序停止。

  6. 要为约束定义资源,请执行以下步骤:

    1. 资源类别的下拉框中,选择某个资源(或模板)。

      系统即会添加该资源,并且下面会出现一个新的空下拉框。

    2. 重复此步骤添加更多资源。

      最上面的资源最先启动,然后是第二个资源,以此类推。通常资源会以相反的顺序停止。

    3. 要交换顺序约束中资源的顺序,请单击一个资源旁边的向上箭头图标,将其与上方的项目加以交换。

  7. 根据需要为每个资源指定其他参数(例如 StartedStoppedPromoteDemote)。单击资源旁边的空下拉框,然后选择所需的条目。

  8. 确认更改以完成配置。如果操作成功,屏幕顶部会显示一条消息。

Hawk2 - 顺序约束
图 7.3︰ Hawk2 - 顺序约束

7.6.2 使用 crmsh 添加顺序约束

order 命令定义操作顺序。

例如,如果希望 resource1 始终在 resource2 前面启动,请使用以下约束:

crm(live)configure# order res1_before_res2 Mandatory: resource1 resource2

7.7 使用资源集定义约束

资源集是可用来定义位置、共置或顺序约束的另一种方式,使用此方式,原始资源会全部划分到一个集合中。以前,为了实现此目的,用户可以定义一个资源组(不一定总能准确表达设计意图),也可以将每种关系定义为单个约束。随着资源和组合数目的增加,后面这种做法会导致约束过度膨胀。通过资源集进行配置不一定会降低复杂程度,但更易于理解和维护。

可以使用 Hawk2 或 crmsh 来配置资源集。

7.7.1 使用 Hawk2 通过资源集定义约束

过程 7.4︰ 在约束中使用资源集
  1. 要在位置约束中使用资源集,请执行以下操作:

    1. 按照过程 7.1 “添加位置约束”中除步骤 4 之外的步骤操作。不要选择单个资源,而是在按住 CtrlShift 的同时单击鼠标选择多个资源。这样便会在位置约束中创建一个资源集。

    2. 要从位置约束中去除某个资源,请按住 Ctrl 并再次单击该资源,以将其取消选中。

  2. 要在共置或顺序约束中使用资源集,请执行以下操作:

    1. 过程 7.2 “添加共置约束”过程 7.3 “添加顺序约束”中所述操作,但为约束定义资源的步骤(步骤 5.a步骤 6.a)除外:

    2. 添加多个资源。

    3. 要创建资源集,请单击某个资源旁边的链形图标将其与上方的资源链接起来。资源集通过属于集合的资源周围的框架显现。

    4. 您可以在一个资源集中组合多个资源,或创建多个资源集。

      Hawk2 - 一个共置约束中的两个资源集
      图 7.4︰ Hawk2 - 一个共置约束中的两个资源集
    5. 要将某个资源与其上方的资源解除链接,请单击该资源旁边的剪刀图标。

  3. 确认更改以完成约束配置。

7.7.2 使用 crmsh 通过资源集定义约束

例 7.1︰ 用于位置约束的资源集

例如,您可以在 crmsh 中使用资源集 (loc-alice) 的以下配置在同一个节点 alice 上放置两个虚拟 IP(vip1vip2):

crm(live)configure# primitive vip1 IPaddr2 params ip=192.168.1.5
crm(live)configure# primitive vip2 IPaddr2 params ip=192.168.1.6
crm(live)configure# location loc-alice { vip1 vip2 } inf: alice

如果想要使用资源集来替换共置约束的配置,请考虑以下两个示例:

例 7.2︰ 共置资源链
<constraints>
    <rsc_colocation id="coloc-1" rsc="B" with-rsc="A" score="INFINITY"/>
    <rsc_colocation id="coloc-2" rsc="C" with-rsc="B" score="INFINITY"/>
    <rsc_colocation id="coloc-3" rsc="D" with-rsc="C" score="INFINITY"/>
</constraints>

由资源集表示的相同配置:

<constraints>
   <rsc_colocation id="coloc-1" score="INFINITY" >
    <resource_set id="colocated-set-example" sequential="true">
     <resource_ref id="A"/>
     <resource_ref id="B"/>
     <resource_ref id="C"/>
     <resource_ref id="D"/>
    </resource_set>
   </rsc_colocation>
</constraints>

如果您想使用资源集来替换顺序约束的配置,请考虑以下两个示例:

例 7.3︰ 有序资源链
<constraints>
    <rsc_order id="order-1" first="A" then="B" />
    <rsc_order id="order-2" first="B" then="C" />
    <rsc_order id="order-3" first="C" then="D" />
</constraints>

可以使用包含有序资源的资源集来实现相同的目的:

例 7.4︰ 以资源集表示的有序资源链
<constraints>
    <rsc_order id="order-1">
    <resource_set id="ordered-set-example" sequential="true">
    <resource_ref id="A"/>
    <resource_ref id="B"/>
    <resource_ref id="C"/>
    <resource_ref id="D"/>
    </resource_set>
    </rsc_order>
</constraints>

资源集可以是有序的 (sequential=true),也可以是无序的 (sequential=false)。此外,可以使用 require-all 属性在 ANDOR 逻辑之间切换。

7.7.3 共置无依赖项的资源集

有时,将一组资源放置在同一个节点上(定义共置约束)会很有用,但前提是这些资源之间不存在硬性依赖关系。例如,您想要在同一个节点上放置两个资源,但希望群集在其中一个资源发生故障时重启动另一个资源。

可以在 crm 外壳中使用 weak-bond 命令实现此目的:

# crm configure assist weak-bond resource1 resource2

weak-bond 命令会自动创建一个虚设资源和针对给定资源的共置约束。

7.8 指定资源故障转移节点

资源在出现故障时会自动重启动。如果无法在当前节点上重启动,或者资源已在当前节点上失败 N 次,将会尝试故障转移到其他节点。每次资源失败时,其失败计数都会增加。您可以定义资源在失败几次 (migration-threshold) 后会迁移到新节点。如果群集中存在两个以上的节点,则特定资源故障转移的节点由 High Availability 软件选择。

但可以通过为资源配置一个或多个位置约束和一个 migration-threshold 来指定此资源将故障转移到的节点。

可以使用 Hawk2 或 crmsh 来指定资源故障转移节点。

例 7.5︰ 迁移阈值 - 处理流程

例如,假设您已经为 rsc1 资源配制了一个首选在 alice 节点上运行的位置约束。如果资源在该节点上失败,系统会检查 migration-threshold 并与失败计数进行比较。如果 failcount >= migration-threshold,会将资源迁移到仅次于首选节点的节点。

达到阈值后,节点便无法运行失败的资源,除非资源的失败计数重置。这可以由群集管理员手动执行或通过设置资源的 failure-timeout 选项执行。

例如,采用 migration-threshold=2failure-timeout=60s 设置会使资源在失败两次后迁移到新节点。允许该资源在一分钟后移回(具体取决于粘性和约束分数)。

迁移阈值概念有两个异常,发生在资源启动失败或停止失败时:

  • 启动失败会将失败计数设置为 INFINITY,因此一旦发生,资源便会立即迁移。

  • 停止失败会导致屏蔽(stonith-enabled 设置为 true 时,这是默认设置)。

    如果未定义 STONITH 资源(或 stonith-enabled 设置为 false),资源不会迁移。

7.8.1 使用 Hawk2 指定资源故障转移节点

过程 7.5︰ 指定故障转移节点
  1. 登录 Hawk2:

    https://HAWKSERVER:7630/
  2. 过程 7.1 “添加位置约束”中所述,为资源配置位置约束。

  3. 过程 8.1: 修改资源或组中的步骤 5 所述为资源添加 migration-threshold 元属性,并输入 migration-threshold 的值。值应是小于 INFINITY 的正数。

  4. 要让资源的失败计数自动失效,请按过程 6.2: 使用 Hawk2 添加原始资源中的步骤 5 所述为资源添加 failure-timeout 元属性,并输入 failure-timeout

    Hawk2 的Edit Primitive屏幕,显示在何处添加和编辑元属性 migration-threshold 和 failure-timeout。
    图 7.5︰ Hawk2:用于资源故障转移的元属性
  5. 要指定具有资源首选项的故障转移节点,请创建其他位置约束。

如果不想让资源的失败计数自动失效,您也可以随时手动清理资源的失败计数。有关细节,请参见第 8.5.1 节 “使用 Hawk2 清理群集资源”

7.8.2 使用 crmsh 指定资源故障转移节点

要确定资源故障转移,可使用元属性 migration-threshold.如果在所有节点上的失败计数都超过 migration-threshold,资源会一直处于停止状态。例如:

crm(live)configure# location rsc1-alice rsc1 100: alice

通常,rsc1 首选在 alice 上运行。如果资源在该节点上失败,系统会检查 migration-threshold 并与失败计数进行比较。如果 failcount >= migration-threshold,资源会迁移到仅次于首选节点的节点。

根据 start-failure-is-fatal 选项,启动失败会将失败计数设置为 inf。停止故障可导致屏蔽。如果未定义 STONITH,资源不会迁移。

7.9 指定资源故障回复节点(资源粘性)

当原始节点恢复上线并位于群集中时,资源可能会故障回复到该节点。为防止资源故障回复到之前运行它的节点,或者要指定让该资源故障回复到其他节点,请更改其资源粘性值。可以在创建资源时或之后指定资源粘性。

指定资源粘性值时请考虑以下含义:

值为 0

资源会放置在系统中最适合的位置。这意味着当性能较好或负载更低的节点变得可用时才会转移资源。该选项的作用几乎等同于自动故障回复,只是资源转移到的节点可能并非资源原先处于活动状态的节点。这是 Pacemaker 的默认行为。

值大于 0

资源偏向于留在当前位置,但可能会在有更合适的节点时移动。值越高表示资源越愿意留在当前位置。

值小于 0

资源更愿意移离当前位置。绝对值越高表示资源越愿意离开当前位置。

值为 INFINITY

资源始终留在当前位置,除非因节点不再适合运行资源(节点关机、节点待机、达到 migration-threshold 或配置更改)而强制关闭资源。此选项的作用几乎等同于禁用自动故障回复。

值为 -INFINITY

资源总是从当前位置移走。

7.9.1 使用 Hawk2 指定资源故障回复节点

过程 7.6︰ 指定资源粘性
  1. 登录 Hawk2:

    https://HAWKSERVER:7630/
  2. resource-stickiness过程 8.1: 修改资源或组 所述,为资源添加 步骤 5 元属性。

  3. resource-stickiness 指定介于 -INFINITYINFINITY 之间的值。

    Hawk2 的Edit Primitive屏幕,显示在何处添加和编辑元属性 resource-stickiness。
    图 7.6︰ Hawk2:用于资源故障回复的元属性

7.10 根据资源负载影响放置资源

并非所有资源都相等。某些资源(如 Xen guest)需要托管它们的节点满足其容量要求。如果所放置资源的总需求超过了提供的容量,则资源性能将降低(或甚至失败)。

有鉴于此,SUSE Linux Enterprise High Availability 允许您指定以下参数:

  1. 特定节点提供的容量。

  2. 特定资源需要的容量。

  3. 资源放置整体策略。

可以使用 Hawk2 或 crmsh 来配置这些设置:

如果节点有充足的可用容量来满足资源要求,则此节点将被视为此资源的有效节点。要手动配置资源要求和节点提供的容量,请使用利用率属性。可根据个人喜好命名利用率属性,并根据配置需要定义多个名称/值对。但是,属性值必须是整数。

如果具有利用率属性的多个资源组合在一起或具有共置约束,SUSE Linux Enterprise High Availability 会将该情况纳入考量。如有可能,会将资源放置到可以满足所有容量要求的节点上。

注意
注意:组的利用率属性

无法直接为资源组设置利用率属性。但是,为了简化组的配置,可以使用组中所有资源所需的总容量添加利用率属性。

SUSE Linux Enterprise High Availability 还提供了用于自动检测和配置节点容量和资源要求的方法:

NodeUtilization 资源代理可检查节点的 CPU 和 RAM 容量。要配置自动检测,请创建类别、提供方和类型如下的克隆资源:ocf:pacemaker:NodeUtilization。每个节点上应都有一个克隆实例在运行。实例启动后,利用率部分将添加到节点的 CIB 配置中。有关详细信息,请参见crm ra info NodeUtilization

为了自动检测资源的最低要求(与 RAM 和 CPU 相关),我们改进了 Xen 资源代理。Xen 资源启动后,该代理会反映 RAM 和 CPU 使用情况。利用率属性会自动添加到资源配置中。

注意
注意:适用于 Xen 和 libvirt 的不同资源代理

ocf:heartbeat:Xen 资源代理不应与 libvirt 搭配使用,因为 libvirt 需要能够修改计算机说明文件。

对于 libvirt,请使用 ocf:heartbeat:VirtualDomain 资源代理。

除了检测最低要求外,您还可以通过 VirtualDomain 资源代理监控当前的利用率。它检测虚拟机的 CPU 和 RAM 使用情况。要使用此功能,请配置类别、提供方和类型如下的资源:ocf:heartbeat:VirtualDomain。可以使用以下实例属性:

  • autoset_utilization_cpu

  • autoset_utilization_hv_memory(用于 Xen)或 autoset_utilization_host_memory(用于 KVM)

这些属性默认设为 true。这将在每个监控周期中更新 CIB 中的利用率值。有关详细信息,请参见crm ra info VirtualDomain

注意
注意:hv_memoryhost_memory

NodeUtilizationVirtualDomain 资源代理中,hv_memoryhost_memory 默认都设为 true。但 Xen 只需要 hv_memory,KVM 只需要 host_memory。为了避免引起混淆,我们建议禁用不需要的属性。例如:

例 7.6︰ 在禁用 hv_memory 的情况下为 KVM 创建资源代理
# crm configure primitive p_nu NodeUtilization \
      params utilization_hv_memory=false \
      op monitor timeout=20s interval=60
# crm configure primitive p_vm VirtualDomain \
      params autoset_utilization_hv_memory=false \
      op monitor timeout=30s interval=10s
例 7.7︰ 在禁用 host_memory 的情况下为 Xen 创建资源代理
# crm configure primitive p_nu NodeUtilization \
      params utilization_host_memory=false \
      op monitor timeout=20s interval=60
# crm configure primitive p_vm VirtualDomain \
      params autoset_utilization_host_memory=false \
      op monitor timeout=30s interval=10s

无论是手动还是自动配置容量和要求,放置策略都必须使用 placement-strategy 属性(在全局群集选项中)指定。可用值如下:

default(默认值)

不考虑利用率值。根据位置得分分配资源。如果分数相等,资源将均匀分布在节点中。

utilization

在确定节点是否有足够的可用容量来满足资源要求时考虑利用率值。但仍会根据分配给节点的资源数执行负载平衡。

minimal

在确定节点是否有足够的可用容量来满足资源要求时考虑利用率值。尝试将资源集中到尽可能少的节点上(以节省其余节点上的能耗)。

balanced

在确定节点是否有足够的可用容量来满足资源要求时考虑利用率值。尝试均匀分布资源,从而优化资源性能。

注意
注意:配置资源优先级

可用的放置策略是最佳方法 - 它们不使用复杂的启发式解析程序即可始终实现最佳分配结果。确保正确设置资源优先级,以便首选调度最重要的资源。

7.10.1 使用 Hawk2 根据资源负载影响放置资源

利用率属性用于配置资源的要求及节点提供的容量。您需要先配置节点的容量,然后才能配置资源所需的容量。

过程 7.7︰ 配置节点提供的容量
  1. 登录 Hawk2:

    https://HAWKSERVER:7630/
  2. 从左侧导航栏中,选择监控 › 状态

  3. 节点选项卡上,选择要配置其容量的节点。

  4. 操作列中,单击向下箭头图标并选择编辑

    编辑节点屏幕即会打开。

  5. 利用率下,将利用率属性的名称输入到空下拉框中。

    该名称可以是任意名称(例如 RAM_in_GB)。

  6. 单击添加图标添加属性。

  7. 在属性旁边的空文本框中,输入一个属性值。该值必须是整数。

    Hawk2 的Edit Node屏幕,显示在何处添加和编辑利用率属性。
    图 7.7︰ Hawk2:编辑节点利用率属性
  8. 添加所需数量的利用率属性,并为其添加相应的值。

  9. 确认更改。如果操作成功,屏幕顶部会显示一条消息。

过程 7.8︰ 配置资源所需的容量

请在创建原始资源或编辑现有原始资源时配置特定资源需从节点中获取的容量。

您需要先按过程 7.7 中所述设置群集节点的利用率属性,之后才能将利用率属性添加到资源。

  1. 登录 Hawk2:

    https://HAWKSERVER:7630/
  2. 要为现有资源添加利用率属性,请转到管理 › 状态,然后按第 8.2.1 节 “使用 Hawk2 编辑资源和组”中所述打开资源配置对话框。

    如果要创建新资源,请转到配置 › 添加资源,然后按第 6.4.1 节 “使用 Hawk2 创建原始资源”中所述继续操作。

  3. 在资料配置对话框中,转到利用率类别。

  4. 从空下拉框中,选择您在过程 7.7 中已为节点配置的其中一个利用率属性。

  5. 在属性旁边的空文本框中,输入一个属性值。该值必须是整数。

  6. 添加所需数量的利用率属性,并为其添加相应的值。

  7. 确认更改。如果操作成功,屏幕顶部会显示一条消息。

配置节点提供的容量以及资源所需的容量之后,请在全局群集选项中设置布局策略。否则,容量配置将不起作用。可使用多个策略来调度负载:例如,可以将负载集中到尽可能少的节点上,或使其均匀分布在所有可用节点上。

过程 7.9︰ 设置放置策略
  1. 登录 Hawk2:

    https://HAWKSERVER:7630/
  2. 从左侧导航栏中,选择配置 › 群集配置以打开相应的屏幕。该屏幕会显示全局群集选项和资源,以及操作默认值。

  3. 从屏幕上部的空下拉框中选择 placement-strategy

    默认情况下,其值会设置为默认,这表示不考虑利用率属性和值。

  4. 根据要求,将放置策略设置为适当值。

  5. 确认更改。

7.10.2 使用 crmsh 根据资源负载影响放置资源

要配置资源要求和节点提供的容量,请使用利用率属性。可根据个人喜好命名利用率属性,并根据配置需要定义多个名称/值对。在某些情况下,某些代理(例如 VirtualDomain)将自行更新利用率。

在下例中,我们假定您已有群集节点和资源的基本配置,现在想要配置特定节点提供的容量以及特定资源需要的容量。

过程 7.10︰ 使用 crm 添加或修改利用率属性
  1. root 用户身份登录,然后启动 crm 交互式外壳:

    # crm configure
  2. 要指定节点提供的容量,请使用以下命令并将占位符 NODE_1 替换为节点名称:

    crm(live)configure# node NODE_1 utilization hv_memory=16384 cpu=8

    通过设置这些值,NODE_1 将会向资源提供 16 GB 内存和 8 个 CPU 核心。

  3. 要指定资源需要的容量,请使用:

    crm(live)configure# primitive xen1 Xen ... \
          utilization hv_memory=4096 cpu=4

    如此,资源会占用 NODE_1 的 4096 个内存单元以及 4 个 CPU 单元。

  4. 使用 property 命令配置放置策略:

    crm(live)configure# property ...

    可用值如下:

    default(默认值)

    不考虑利用率值。根据位置得分分配资源。如果分数相等,资源将均匀分布在节点中。

    utilization

    在确定节点是否有足够的可用容量来满足资源要求时考虑利用率值。但仍会根据分配给节点的资源数执行负载平衡。

    minimal

    在确定节点是否有足够的可用容量来满足资源要求时考虑利用率值。尝试将资源集中到尽可能少的节点上(以节省其余节点上的能耗)。

    balanced

    在确定节点是否有足够的可用容量来满足资源要求时考虑利用率值。尝试均匀分布资源,从而优化资源性能。

    注意
    注意:配置资源优先级

    可用的放置策略是最佳方法 - 它们不使用复杂的启发式解析程序即可始终实现最佳分配结果。确保正确设置资源优先级,以便首选调度最重要的资源。

  5. 退出 crmsh 之前提交更改:

    crm(live)configure# commit

以下示例展示了含有四个虚拟机的三节点群集,其中的各个节点完全相同:

crm(live)configure# node alice utilization hv_memory="4000"
crm(live)configure# node bob utilization hv_memory="4000"
crm(live)configure# node charlie utilization hv_memory="4000"
crm(live)configure# primitive xenA Xen \
    utilization hv_memory="3500" meta priority="10" \
    params xmfile="/etc/xen/shared-vm/vm1"
crm(live)configure# primitive xenB Xen \
    utilization hv_memory="2000" meta priority="1" \
    params xmfile="/etc/xen/shared-vm/vm2"
crm(live)configure# primitive xenC Xen \
    utilization hv_memory="2000" meta priority="1" \
    params xmfile="/etc/xen/shared-vm/vm3"
crm(live)configure# primitive xenD Xen \
    utilization hv_memory="1000" meta priority="5" \
    params xmfile="/etc/xen/shared-vm/vm4"
crm(live)configure# property placement-strategy="minimal"

这三个节点都启动后,系统首先会将 xenA 放置到一个节点上,然后会放置 xenD。xenB 和 xenC 将分配在一起或者其中一个与 xenD 分配在一起。

如果一个节点出现故障,可用的总内存将不足以托管所有资源。将确保分配 xenA,xenD 同样如此。但是,xenB 和 xenC 只有其中之一仍可以放置,并且由于它们的优先级相同,结果尚不确定。要解决这种不确定性,需要为其中一个资源设置更高的优先级。

7.11 更多信息

有关配置约束的其他信息以及顺序和共置基本概念的详细背景信息,请参见 https://www.clusterlabs.org/pacemaker/doc/ 上的以下文档:

  • Pacemaker ExplainedResource Constraints 一章

  • Colocation Explained

  • Ordering Explained