Pour optimiser la disponibilité ou les performances, certaines combinaisons de services nécessitent une répartition particulière des groupes de ressources en ligne sur les noeuds du cluster. La définition d'une répartition des groupes de ressources en ligne suppose la création d'affinités entre des groupes de ressources aux fins suivantes :
Appliquer la répartition requise lors de la mise en ligne initiale des groupes de ressources
Conserver la répartition requise après une tentative de basculement ou de commutation d'un groupe de ressources
Cette section s'appuie sur les exemples suivants pour expliquer comment se servir des affinités de groupes de ressources pour répartir les groupes de ressources en ligne sur les noeuds du cluster
Colocalisation forcée d'un groupe de ressources avec un autre groupe de ressources
Spécification d'une préférence de colocalisation d'un groupe de ressources avec un autre groupe de ressources
Equilibrage de la charge d'un ensemble de groupes de ressources
Spécification de la priorité d'un service essentiel
Délégation du basculement ou de la commutation d'un groupe de ressources
Combinaison des affinités de groupes de ressources pour spécifier un comportement plus complexe
Une affinité entre des groupes de ressources restreint le choix de noeuds sur lesquels les groupes de ressources peuvent être mis en ligne simultanément. Dans chaque affinité, un groupe de ressources source déclare une affinité avec un groupe de ressources cible ou plusieurs groupes de ressources cibles. Pour créer une affinité entre des groupes de ressources, définissez de la manière suivante la propriété de groupe de ressources RG_affinities de la source :
-p RG_affinities=affinity-list
Spécifie une liste délimitée par des virgules d'affinités entre le groupe de ressources source et un ou plusieurs groupes de ressources cibles. Vous pouvez spécifier une seule ou plusieurs affinités dans la liste.
Spécifiez chaque affinité de la liste comme suit :
operator target-rg
Spécifie le type d'affinité que vous créez. Pour plus d'informations, voir Table 7.
Spécifie le groupe de ressources cible de l'affinité que vous créez.
|
Les affinités faibles sont prioritaires par rapport à l'ordre de préférence de la liste Nodelist.
Selon l'état actuel d'autres groupes de ressources, il est possible qu'une affinité forte ne puisse être satisfaite sur aucun noeud. Dans ce cas, le groupe de ressources source de l'affinité reste hors ligne. Si les états d'autres groupes de ressources changent pour permettre aux affinités fortes d'être satisfaites, le groupe de ressources source de l'affinité revient en ligne.
Un service représenté par un groupe de ressources peut dépendre si fortement d'un service dans un deuxième groupe de ressources que les deux services ont obligation de s'exécuter sur le même noeud. Par exemple, une application composée de plusieurs démons de service interdépendants peut nécessiter que tous les démons s'exécutent sur le même noeud.
Dans ce cas, forcez le groupe de ressources du service dépendant à être colocalisé avec le groupe de ressources de l'autre service. Pour appliquer la colocalisation forcée d'un groupe de ressources avec un autre groupe de ressources, déclarez une affinité positive forte du premier groupe de ressources avec le second.
# clresourcegroup set|create -p RG_affinities=++target-rg source-rg
Spécifie le groupe de ressources source de l'affinité positive forte. Ce groupe de ressources est le groupe de ressources sur lequel vous déclarez un affinité positive forte avec l'autre groupe de ressources.
Spécifie le groupe de ressources cible de l'affinité positive forte. Ce groupe de ressources est le groupe de ressources avec lequel vous déclarez une affinité positive forte.
Un groupe de ressources suit le groupe de ressources avec lequel il a une affinité positive forte. Si le groupe de ressources cible est déplacé sur un autre noeud, le groupe de ressources source passe automatiquement sur le même noeud que la cible. Toutefois, un groupe de ressources qui déclare une affinité positive forte ne peut pas basculer sur un noeud si la cible de l'affinité n'y est pas déjà en cours d'exécution.
Par exemple, un groupe de ressources rg1 déclare une affinité positive forte avec le groupe de ressources rg2. Si rg2 bascule sur un autre noeud, rg1 bascule également sur le noeud concerné. Ce basculement se produit même si toutes les ressources de rg1 sont opérationnelles. Toutefois, si une ressource de rg1 tente de basculer rg1 sur un noeud où rg2 n'est pas en cours d'exécution, la tentative est bloquée.
Il peut arriver que la source d'une affinité positive forte soit hors ligne sur tous les noeuds lorsque vous mettez en ligne la cible de l'affinité positive forte. Dans ce cas, la source de l'affinité positive forte est automatiquement mise en ligne sur le même noeud que la cible.
Par exemple, un groupe de ressources rg1 déclare une affinité positive forte avec le groupe de ressources rg2. Au départ, les deux groupes de ressources sont hors ligne sur tous les noeuds. Si un administrateur met en ligne rg2 sur un noeud, rg1 est automatiquement mis en ligne sur le même noeud.
Vous pouvez vous servir de la commande clresourcegroup suspend pour empêcher la mise en ligne automatique d'un groupe de ressources en raison d'affinités fortes ou d'une reconfiguration du cluster.
S'il y a besoin d'autoriser un groupe de ressources déclarant une affinité positive forte à basculer, vous devez déléguer le basculement. Pour plus d'informations, reportez-vous à la section Délégation du basculement ou de la commutation d'un groupe de ressources.
Exemple 56 Colocalisation forcée d'un groupe de ressources avec un autre groupe de ressourcesCet exemple présente la commande permettant de modifier le groupe de ressources rg1 et de déclarer une affinité positive forte avec le groupe de ressources rg2. En raison de cette relation d'affinité, rg1 est uniquement mis en ligne sur les noeuds sur lesquels rg2 est en cours d'exécution. Cet exemple suppose que les deux groupes de ressources existent.
# clresourcegroup set -p RG_affinities=++rg2 rg1
Un service représenté par un groupe de ressources peut utiliser un service d'un second groupe de ressources. Par conséquent, l'efficacité de ces services est maximale lorsqu'ils s'exécutent sur le même noeud. Par exemple, l'exécution d'une application qui utilise une base de données est la plus efficace lorsque l'application et la base de données s'exécutent sur le même noeud. Toutefois, les services peuvent s'exécuter sur des noeuds différents, car une efficacité moindre est moins perturbatrice que des basculements de groupes de ressources supplémentaires.
Dans une situation de ce type, spécifiez que les deux groupes de ressources doivent, dans la mesure du possible, être colocalisés. Pour spécifier une préférence de colocalisation d'un groupe de ressources avec un autre groupe de ressources, déclarez une affinité positive faible du groupe de ressources avec l'autre groupe de ressources.
# clresourcegroup set|create -p RG_affinities=+target-rg source-rg
Spécifie le groupe de ressources source de l'affinité positive faible. Ce groupe de ressources est le groupe de ressources sur lequel vous déclarez un affinité positive faible avec l'autre groupe de ressources.
Spécifie le groupe de ressources cible de l'affinité positive faible. Ce groupe de ressources est le groupe de ressources avec lequel vous déclarez une affinité positive faible.
En déclarant une affinité positive faible d'un groupe de ressources avec un autre groupe de ressources, vous augmentez la probabilité que les deux groupes de ressources soient exécutées sur le même noeud. La source d'une affinité positive faible est tout d'abord mise en ligne sur un noeud où la cible de l'affinité positive faible est déjà en cours d'exécution. Toutefois, la source d'une affinité positive faible ne bascule pas si un contrôleur de ressources fait basculer la cible de l'affinité. De même, la source d'une affinité positive faible ne bascule pas si la cible de l'affinité est commutée. Dans les deux cas de figure, la source reste en ligne sur le noeud où elle est déjà en cours d'exécution.
Cet exemple présente la commande permettant de modifier le groupe de ressources rg1 et de déclarer une affinité positive faible avec le groupe de ressources rg2. En raison de cette relation d'affinité, rg1 et rg2 sont, dans un premier temps, mis en ligne sur le même noeud. Mais si une ressource dans rg2 provoque le basculement de rg2, rg1 reste en ligne sur le noeud où les groupes de ressources ont été mis en ligne au départ. Cet exemple suppose que les deux groupes de ressources existent.
# clresourcegroup set -p RG_affinities=+rg2 rg1
Il est possible que chaque groupe de ressources dans un ensemble de groupes de ressources impose la même charge au cluster. Dans ce cas, vous pouvez équilibrer la charge sur le cluster en répartissant uniformément les groupes de ressources sur les noeuds du cluster.
Pour répartir uniformément un ensemble de groupes de ressources sur les noeuds du cluster, déclarez, sur chaque groupe de ressources, une affinité négative faible avec les autres groupes de ressources de l'ensemble.
# clresourcegroup set|create -p RG_affinities=neg-affinity-list source-rg
Spécifie le groupe de ressources source de l'affinité négative faible. Ce groupe de ressources est le groupe de ressources sur lequel vous déclarez un affinité négative faible avec les autres groupes de ressources.
Spécifie une liste délimitée par des virgules d'affinités négatives faibles entre le groupe de ressources source et les groupes de ressources cibles de l'affinité négative faible. Les groupes de ressources cibles sont les groupes de ressources avec lesquels vous déclarez une affinité négative faible.
En déclarant une affinité négative faible d'un groupe de ressources avec d'autres groupes de ressources, vous garantissez que ce groupe de ressources est toujours mis en ligne sur le noeud le moins chargé du cluster. C'est le noeud sur lequel les autres groupes de ressources en cours d'exécution sont les moins nombreux. C'est donc là que le nombre d'affinités négatives faibles non respectées est le plus faible.
Exemple 58 Répartition uniforme d'un ensemble de groupes de ressources sur les noeuds du clusterCet exemple présente les commandes permettant de modifier les groupes de ressources rg1, rg2, rg3 et rg4 pour garantir qu'ils sont uniformément répartis sur les noeuds disponibles du cluster. Cet exemple suppose que les groupes de ressources rg1, rg2, rg3 et rg4 existent.
# 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
Un cluster peut être configuré de manière à exécuter un ensemble de services essentiels et non essentiels. Par exemple, une base de données associée à un service à la clientèle essentiel peut s'exécuter dans le même cluster que des tâches de recherche non essentielles.
Pour vous assurer que les services non essentiels n'affectent pas les performances du service essentiel, vous pouvez spécifier que le service essentiel est prioritaire. En spécifiant que le service essentiel est prioritaire, vous empêchez des services non essentiels de s'exécuter sur le même noeud que le service essentiel.
Lorsque tous les noeuds sont opérationnels, le service essentiel s'exécute sur un noeud différent des services non essentiels. Toutefois, une défaillance du service essentiel peut entraîner le basculement du service sur un noeud où les services non essentiels s'exécutent. Si tel est le cas, les services non essentiels sont immédiatement mis hors ligne pour garantir que les ressources de calcul du noeud sont intégralement dédiées au service essentiel.
Pour spécifier qu'un service essentiel est prioritaire, déclarez une affinité négative forte du groupe de ressources de chaque service non essentiel avec le groupe de ressources qui contient le service essentiel.
# clresourcegroup set|create -p RG_affinities=--critical-rg noncritical-rg
Spécifie le groupe de ressources qui contient un service non essentiel. Ce groupe de ressources est le groupe de ressources sur lequel vous déclarez un affinité négative forte avec un autre groupe de ressources.
Spécifie le groupe de ressources qui contient le service essentiel. Ce groupe de ressources est le groupe de ressources avec lequel vous déclarez une affinité négative forte.
Un groupe de ressources s'écarte d'un groupe de ressources avec lequel il a une affinité négative forte.
Il est possible que la source d'une affinité négative forte soit hors ligne sur tous les noeuds lorsque vous mettez hors ligne la cible de l'affinité négative forte. Dans ce cas, la source de l'affinité négative forte est automatiquement mise en ligne. En général, le groupe de ressources est mis en ligne sur le noeud préféré principal, selon l'ordre des noeuds dans la liste de noeuds et les affinités déclarées.
Par exemple, un groupe de ressources rg1 déclare une affinité négative forte avec le groupe de ressources rg2. Au départ, le groupe de ressources rg1 est hors ligne sur tous les noeuds tandis que le groupe de ressources rg2 est en ligne sur un noeud. Si un administrateur met rg2 hors ligne, rg1 est automatiquement mis en ligne.
Vous pouvez vous servir de la commande clresourcegroup suspend pour empêcher que la source d'une affinité négative forte soit automatiquement mise en ligne en raison d'affinités fortes ou d'une reconfiguration du cluster.
Exemple 59 Spécification de la priorité d'un service essentielCet exemple présente la commande permettant de modifier les groupes de ressources non essentiels ncrg1 et ncrg2 pour garantir que le groupe de ressources essentiel mcdbrg soit prioritaire par rapport à ces groupes de ressources. Cet exemple suppose que les groupes de ressources mcdbrg, ncrg1 et ncrg2 existent.
# clresourcegroup set -p RG_affinities=--mcdbrg ncrg1 ncrg2
Le groupe de ressources source d'une affinité positive forte ne peut pas basculer ou être commuté sur un noeud si la cible de l'affinité n'y est pas en cours d'exécution. S'il y a besoin d'autoriser le groupe de ressources source d'une affinité positive forte à basculer ou à être commuté, vous devez déléguer le basculement au groupe de ressources cible. Lorsque la cible de l'affinité bascule, la source de l'affinité est obligée de basculer en même temps que la cible.
Pour déléguer le basculement ou la commutation d'un groupe de ressources à un autre groupe de ressources, déclarez une affinité positive forte du groupe de ressources avec l'autre groupe de ressources.
# clresourcegroup set|create source-rg -p RG_affinities=+++target-rg
Spécifie le groupe de ressources qui délègue le basculement ou la commutation. Ce groupe de ressources est le groupe de ressources sur lequel vous déclarez un affinité positive forte avec délégation de basculement avec l'autre groupe de ressources.
Spécifie le groupe de ressources auquel source-rg délègue le basculement ou la commutation. Ce groupe de ressources est le groupe de ressources avec lequel vous déclarez une affinité positive forte avec délégation de basculement.
Un groupe de ressources peut déclarer une affinité positive forte avec délégation de basculement avec au plus un groupe de ressources. En revanche, un groupe de ressources donné peut être la cible d'affinités positives fortes avec délégation de basculement déclarées par un nombre quelconque de groupes de ressources.
Une affinité positive forte avec délégation de basculement n'est pas complètement symétrique. La cible peut être mise en ligne tandis que la source reste hors ligne. Toutefois, si la cible est hors ligne, la source ne peut pas être mise en ligne.
Si la cible déclare une affinité positive forte avec délégation de basculement avec un troisième groupe de ressources, le basculement ou la commutation est délégué au troisième groupe de ressources. Le troisième groupe de ressources effectue le basculement ou la commutation, ce qui oblige les autres groupes de ressources à basculer ou à être commutés eux aussi.
Exemple 60 Délégation du basculement ou de la commutation d'un groupe de ressourcesCet exemple présente la commande permettant de modifier le groupe de ressources rg1 et de déclarer une affinité positive forte avec délégation du basculement avec le groupe de ressources rg2. En raison de cette relation d'affinité, rg1 délègue le basculement ou la commutation à rg2. Cet exemple suppose que les deux groupes de ressources existent.
# clresourcegroup set -p RG_affinities=+++rg2 rg1
Vous pouvez créer des comportements plus complexes en combinant plusieurs affinités. Par exemple, l'état d'une application peut être enregistré par un serveur de répliques lié. Les exigences de sélection de noeud de cet exemple sont les suivantes :
Le serveur de répliques doit s'exécuter sur un noeud différent du noeud de l'application.
Si l'application bascule à partir de son noeud actuel, elle doit basculer sur le noeud où le serveur de répliques est en cours d'exécution.
Si l'application bascule sur le noeud où le serveur de répliques est en cours d'exécution, le serveur de répliques doit basculer sur un autre noeud. Si aucun autre noeud n'est disponible, le serveur de répliques doit passer hors ligne.
Vous pouvez satisfaire ces exigences en configurant comme suit les groupes de ressources de l'application et du serveur de répliques :
Le groupe de ressources qui contient l'application déclare une affinité positive faible avec le groupe de ressources qui contient le serveur de répliques.
Le groupe de ressources qui contient le serveur de répliques déclare une affinité négative forte avec le groupe de ressources qui contient l'application.
Cet exemple présente les commandes permettant de combiner des affinités entre les groupes de ressources suivants.
Le groupe de ressources app-rg représente une application dont l'état est suivi par un serveur de répliques.
Le groupe de ressources rep-rg représente le serveur de répliques.
Dans cet exemple, les groupes de ressources déclarent des affinités comme suit :
Le groupe de ressources app-rg déclare une affinité positive faible avec le groupe de ressources rep-rg.
Le groupe de ressources rep-rg déclare une affinité négative forte avec le groupe de ressources app-rg.
Cet exemple suppose que les deux groupes de ressources existent.
# clresourcegroup set -p RG_affinities=+rep-rg app-rg # clresourcegroup set -p RG_affinities=--app-rg rep-rg
L'administrateur du cluster peut spécifier des affinités entre un groupe de ressources d'un cluster de zones et un autre groupe de ressources d'un cluster de zones ou un groupe de ressources du cluster global.
Vous pouvez vous servir de la commande suivante pour spécifier l'affinité entre des groupes de ressources de clusters de zones.
# clresourcegroup set -p RG_affinities=affinity-typetarget-zc:target-rg source-zc:source-rg
Les types d'affinités possibles entre les groupes de ressources d'un cluster de zones sont les suivants :
+ (positive faible)
++ (positive forte)
+++ (positive forte avec délégation de basculement)
- (négative faible)
-- (négative forte)
Cet exemple présente la commande permettant de spécifier une affinité positive forte entre des groupes de ressources de clusters de zones.
Le groupe de ressources RG1 dans le cluster de zones ZC1 déclare une affinité positive forte avec le groupe de ressources RG2 dans le cluster de zones ZC2.
Si vous devez spécifier une affinité positive forte entre le groupe de ressources RG1 dans le cluster de zones ZC1 et le groupe de ressources RG2 dans le cluster de zones ZC2, servez-vous de la commande suivante :
# clresourcegroup set -p RG_affinities=++ZC2:RG2 ZC1:RG1Exemple 63 Spécification d'une affinité négative forte entre un groupe de ressources d'un cluster de zones et un groupe de ressources du cluster global
Cet exemple présente la commande permettant de spécifier une affinité négative forte entre des groupes de ressources dans des clusters de zones. Si vous devez spécifier une affinité négative forte entre le groupe de ressources RG1 dans le cluster de zones ZC1 et le groupe de ressources RG2 dans le cluster global, servez-vous de la commande suivante :
# clresourcegroup set -p RG_affinities=--global:RG2 ZC1:RG1