为了获得最高可用性或最佳性能,有些服务组合需要在群集节点间进行特定的联机资源组分配。分配联机资源组时,为满足以下目的需要创建资源组之间的关联性:
在资源组首次联机时,强制进行必需的分配
在尝试故障转移或者切换资源组之后,保留必需的分配
本节提供的以下示例展示了如何使用资源组关联性在群集节点间分配联机资源组:
强制一个资源组与另一个资源组共存
指定一个资源组与另一个资源组的首选共存关系
平衡一组资源组的负载
指定某项关键服务有优先权
委托资源组的故障转移或切换
组合资源组之间的关联性以指定更复杂的行为
资源组之间的关联性会限制资源组可以在哪些节点上同时联机。在每个关联性中,一个资源组会声明对一个或多个目标资源组的关联性。要创建资源组之间的关联性,请按如下方式设置源资源组的 RG_affinities 属性:
-p RG_affinities=affinity-list
指定源资源组与一个或多个目标资源组之间关联性的逗号分隔列表。可以在该列表中指定一个或多个关联性。
按如下方式在列表中指定每个关联性:
operator target-rg
指定要创建的关联性的类型。有关更多信息,请参见表 7。
指定要创建的关联性的目标资源组。
|
其他资源组的当前状态可能会导致在任何节点上都不满足强关联性。在这种情况下,作为关联性源的资源组将保持脱机。如果其他资源组的状态发生变化,使强关联性可以得到满足,则作为关联性源的资源组将恢复联机。
某个资源组代表的某项服务对另一个资源组中的某项服务的依赖性是如此之强,以致于这两项服务必须在同一个节点上运行。例如,由多个相互依赖的服务守护进程组成的应用程序可能要求所有守护进程在同一节点上运行。
在这种情况下,应强制使依赖服务的资源组与所需的其他服务的资源组共存。要强制某个资源组与另一个资源组共存,请在该资源组上声明对另一个资源组的正向强关联性。
# clresourcegroup set|create -p RG_affinities=++target-rg source-rg
指定作为正向强关联性源的资源组。此资源组是要在其上声明对另一个资源组的正向强关联性的资源组。
指定作为正向强关联性目标的资源组。此资源组是要对其声明正向强关联性的资源组。
资源组会跟随与其有正向强关联性的目标资源组。如果目标资源组迁移到了其他节点,则源资源组会自动切换到与目标相同的节点。但是,会阻止声明了正向强关联性的资源组故障转移到关联性目标尚未运行的节点上。
例如,资源组 rg1 声明了对资源组 rg2 的正向强关联性。如果 rg2 故障转移到其他节点,则 rg1 也会故障转移到该节点。即使 rg1 中的所有资源都正常,也会发生这种故障转移。但是,如果 rg1 中的某个资源尝试将 rg1 故障转移到未运行 rg2 的节点,该尝试将被阻止。
在将正向强关联性的目标联机时,正向强关联性的源可能在所有节点上处于脱机状态。在这种情况下,正向强关联性的源会在与目标相同的节点上自动联机。
例如,资源组 rg1 声明了对资源组 rg2 的正向强关联性。两个资源组在所有节点上最初都处于脱机状态。如果管理员将 rg2 在某个节点上联机,则 rg1 也会在同一个节点上自动联机。
可以使用 clresourcegroup suspend 命令阻止资源组由于强关联性或群集重新配置而自动联机。
如果需要允许声明了正向强关联性的资源组进行故障转移,则必须委托故障转移。有关更多信息,请参见委托资源组的故障转移或切换。
示例 56 强制一个资源组与另一个资源组共存以下示例展示了修改资源组 rg1 以使其声明对资源组 rg2 的正向强关联性的命令。这种关联关系导致的结果是 rg1 仅在 rg2 运行的节点上联机。此示例假设两个资源组都存在。
# clresourcegroup set -p RG_affinities=++rg2 rg1
一个资源组代表的服务可能使用另一个资源组中的服务。因此,如果这些服务在相同的节点上运行,运行效率最高。例如,如果使用数据库的应用程序和数据库在同一个节点上运行,该应用程序的运行效率最高。但是,这些服务可以在不同的节点上运行,因为与效率降低相比,增加资源组故障转移的破坏性更大。
在这种情况下,应指定两个资源组应尽可能并存。要指定某个资源组与另一个资源组的首选共存关系,请在该资源组上声明对另一个资源组的正向弱关联性。
# clresourcegroup set|create -p RG_affinities=+target-rg source-rg
指定作为正向弱关联性源的资源组。此资源组是要在其上声明对另一个资源组的正向弱关联性的资源组。
指定作为正向弱关联性目标的资源组。此资源组是要对其声明正向弱关联性的资源组。
通过在一个资源组上声明对另一个资源组的正向弱关联性,可以提高这两个资源组在相同节点上运行的概率。正向弱关联性的源首先在正向弱关联性目标已经运行的节点上联机。但是,如果资源监视器导致关联性目标故障转移,正向弱关联性源不会故障转移。类似地,如果关联性目标切换,则正向弱关联性源不会切换。在这两种情况下,源会在其已经运行的节点上保持联机状态。
以下示例展示了修改资源组 rg1 以使其声明对资源组 rg2 的正向弱关联性的命令。这种关联关系导致的结果是 rg1 和 rg2 会首先在相同的节点上联机。但是,如果 rg2 中的某个资源导致 rg2 故障转移,则 rg1 将在资源组首次联机的节点上保持联机。此示例假设两个资源组都存在。
# clresourcegroup set -p RG_affinities=+rg2 rg1
一组资源组中的每个资源组可能会对群集施加同样的负载。在这种情况下,通过在群集节点间平均分配资源组,可以平衡群集的负载。
要在群集节点间平均分配一组资源组,请在每个资源组上声明对该组中其他资源组的负向弱关联性。
# clresourcegroup set|create -p RG_affinities=neg-affinity-list source-rg
指定作为负向弱关联性源的资源组。此资源组是要在其上声明对其他资源组的负向弱关联性的资源组。
指定源资源组与负向弱关联性目标资源组之间的负向弱关联性的逗号分隔列表。目标资源组是对其声明负向弱关联性的资源组。
通过在一个资源组上声明对其他资源组的负向弱关联性,可以确保资源组始终在群集中负载最轻的节点上联机。在该节点上运行的其他资源组最少。因此,会违反负向弱关联性的最小数量。
示例 58 在群集节点间平均分配一组资源组此示例展示了修改资源组 rg1、rg2、rg3 和 rg4 的命令,这些命令用以确保这些资源组在群集中的可用节点间平均分配。此示例假设资源组 rg1、rg2、rg3 和 rg4 存在。
# clresourcegroup set -p RG_affinities=-rg2,-rg3,-rg4 rg1 # clresourcegroup set -p RG_affinities=-rg1,-rg3,-rg4 rg2 # clresourcegroup set -p RG_affinities=-rg1,-rg2,-rg4 rg3 # clresourcegroup set -p RG_affinities=-rg1,-rg2,-rg3 rg4
群集可能配置为同时运行关键任务服务和非关键服务。例如,支持关键客户服务的数据库可能在与非关键研究任务相同的群集中运行。
要确保非关键服务不影响关键服务的性能,可指定关键服务有优先权。通过指定关键服务有优先权,可以防止非关键服务与关键服务在相同的节点上运行。
在所有节点都正常运行的情况下,关键服务在不同于非关键服务的节点上运行。但是,关键服务发生故障可能会导致该服务故障转移到非关键服务运行的节点。在这种情况下,非关键服务会立即脱机以确保节点的计算资源完全专用于关键任务服务。
要指定某个关键服务有优先权,可在每个非关键服务的资源组上声明对包含关键服务的资源组的负向强关联性。
# clresourcegroup set|create -p RG_affinities=--critical-rg noncritical-rg
指定包含非关键服务的资源组。此资源组是要在其上声明对另一个资源组的负向强关联性的资源组。
指定包含关键服务的资源组。此资源组是要对其声明负向强关联性的资源组。
资源组会避开与其有负向强关联性的目标资源组。
将负向强关联性目标脱机时,负向强关联性源可能会在所有节点上脱机。在这种情况下,负向强关联性源会自动联机。一般情况下,资源组会根据节点在节点列表中的顺序和声明的关联性,在最佳首选节点上联机。
例如,资源组 rg1 声明了对资源组 rg2 的负向强关联性。资源组 rg1 最初在所有节点上脱机,而资源组 rg2 则在某个节点上联机。如果管理员将 rg2 脱机,则 rg1 会自动联机。
可以使用 clresourcegroup suspend 命令阻止负向强关联性源由于强关联性或群集重新配置而自动联机。
示例 59 指定某项关键服务有优先权此示例展示了修改非关键资源组 ncrg1 和 ncrg2 的命令,这些命令用以确保关键资源组 mcdbrg 优先于这些资源组。此示例假设资源组 mcdbrg、ncrg1 和 ncrg2 存在。
# clresourcegroup set -p RG_affinities=--mcdbrg ncrg1 ncrg2
正向强关联性源资源组无法故障转移或故障切换到关联性目标未运行的节点。如果需要允许正向强关联性源资源组故障转移或切换,则必须将故障转移委托给目标资源组。在关联性目标进行故障转移时,会强制关联性源随目标一起故障转移。
要将某个资源组的故障转移或切换委托给另一个资源组,请在该资源组上声明对另一个资源组的带故障转移委托的正向强关联性。
# clresourcegroup set|create source-rg -p RG_affinities=+++target-rg
指定要委托故障转移或切换的资源组。此资源组是要在其上声明对另一个资源组的带故障转移委托的正向强关联性的资源组。
指定 source-rg 向其委托故障转移或切换的资源组。此资源组是要对其声明带故障转移委托的正向强关联性的资源组。
一个资源组最多可以声明对一个资源组的带故障转移委托的正向强关联性。但是,给定的资源组可以是任意数量的其他资源组声明的带故障转移委托的正向强关联性的目标。
带故障转移委托的正向强关联性并不是完全对称的。在源保持脱机状态时,目标可以联机。但是,如果目标脱机,则源无法联机。
如果目标声明了对第三个资源组的带故障转移委托的正向强关联性,则故障转移或切换会进一步委托给第三个资源组。第三个资源组执行故障转移或切换,从而也强制其他资源组故障转移或切换。
示例 60 委托资源组的故障转移或切换以下示例展示了修改资源组 rg1 以使其声明对资源组 rg2 的带故障转移委托的正向强关联性的命令。这种关联关系导致的结果是 rg1 将故障转移或切换委托给 rg2。此示例假设两个资源组都存在。
# clresourcegroup set -p RG_affinities=+++rg2 rg1
可以通过组合多个关联性来创建更复杂的行为。例如,相关副本服务器可能记录了应用程序的状态。此示例的节点选择要求如下:
运行副本服务器的节点必须与运行应用程序的节点不同。
如果应用程序从当前节点故障转移,则应用程序应故障转移到运行副本服务器的节点。
如果应用程序故障转移到运行副本服务器的节点,则副本服务器必须故障转移到其他节点。如果没有其他节点可用,副本服务器必须脱机。
通过按如下方式配置应用程序的资源组以及副本服务器,可以满足这些要求:
包含应用程序的资源组声明对包含副本服务器的资源组的正向弱关联性。
包含副本服务器的资源组声明对包含应用程序的资源组的负向强关联性。
此示例展示了组合以下资源组之间的关联性的命令。
资源组 app-rg 代表状态被副本服务器跟踪的应用程序。
资源组 rep-rg 代表副本服务器。
在此示例中,资源组声明了如下关联性:
资源组 app-rg 声明了对资源组 rep-rg 的正向弱关联性。
资源组 rep-rg 声明了对资源组 app-rg 的负向强关联性。
此示例假设两个资源组都存在。
# clresourcegroup set -p RG_affinities=+rep-rg app-rg # clresourcegroup set -p RG_affinities=--app-rg rep-rg
群集管理员可以指定区域群集中的某个资源组与区域群集中的另一个资源组或全局群集中的某个资源组之间的关联性。
可以使用以下命令指定区域群集中的资源组之间的关联性。
# clresourcegroup set -p RG_affinities=affinity-typetarget-zc:target-rg source-zc:source-rg
区域群集中的资源组关联性类型可以是以下类型之一:
+(正向弱)
++(正向强)
+++(带故障转移委托的正向强)
-(负向弱)
--(负向强)
此示例展示了指定区域群集中资源组之间的正向强关联性的命令。
区域群集 ZC1 中的资源组 RG1 声明了对区域群集 ZC2 中的资源组 RG2 的正向强关联性。
如果需要指定区域群集 ZC1 中的资源组 RG1 与另一个区域群集 ZC2 中的资源组 RG2 之间的正向强关联性,可使用以下命令:
# clresourcegroup set -p RG_affinities=++ZC2:RG2 ZC1:RG1示例 63 指定区域群集中的资源组与全局群集中的资源组之间的负向强关联性
此示例展示了指定区域群集中资源组之间的负向强关联性的命令。如果需要指定区域群集 ZC1 中的资源组 RG1 与全局群集中的资源组 RG2 之间的负向强关联性,可使用以下命令:
# clresourcegroup set -p RG_affinities=--global:RG2 ZC1:RG1