Documents de référence:
Contrôleur haute disponibilité
Afin de garantir une haute disponibilité des applications déployées, le contrôleur lui-même doit être hautement disponible. Cela nécessite la création d'autres contrôleurs, qui sont tous naturellement situés dans le modèle "contrôleur". Le contrôleur initial est appelé contrôleur principal et s'il perd la connexion avec l'homologue du cluster, il basculera automatiquement.
Pour plus d'informations sur les applications, consultez Haute disponibilité des applications .
Aperçu
Le contrôleur HA utilise des juju enable-ha
commandes pour la gestion. Pour ce faire, il s'assure que le cluster dispose du nombre de contrôleurs nécessaire. Par défaut, ce nombre est de trois, mais le commutateur -n peut être utilisé pour modifier ce nombre. Par conséquent, cette commande peut à la fois activer HA et compenser les contrôleurs manquants, tout comme l'activation de HA puis la suppression d'un ou plusieurs contrôleurs.
Après avoir configuré le contrôleur, le code du serveur API sera installé avec la base de données MongoDB.
Le nombre de contrôleurs doit être un nombre impair pour que l'hôte puisse "voter" entre ses pairs. Un cluster avec un nombre pair de membres rendra les membres aléatoires inactifs. Ce dernier système deviendra un système de «secours d'urgence» et deviendra automatiquement actif lorsque d'autres membres échoueront. De plus, en raison de la limitation de la base de données sous-jacente dans le contexte HA, ce nombre ne peut pas dépasser 7. Tout cela signifie qu'un cluster ne peut avoir que trois, cinq ou sept membres actifs.
Les clients et agents Juju parlent à n'importe quel contrôleur du cluster. Cela signifie que le traitement au niveau du contrôleur (API) est distribué. Cependant, il n'y a qu'une seule base de données maître à un moment donné, et tous les contrôleurs y écrivent. Par conséquent, «main» fait en fait référence à la base de données sous-jacente.
Activer la haute disponibilité du contrôleur
Pour activer la haute disponibilité du contrôleur, appelez simplement la commande enable-ha:
juju enable-ha
Étant donné qu'aucun nombre spécifique d'ordinateurs de cluster n'est demandé, les trois par défaut sont utilisés. Par conséquent, nous espérons que deux nouveaux contrôleurs apparaîtront. En fait, la sortie de la commande ci-dessus reflète ceci:
maintaining machines: 0
adding machines: 1, 2
Nous pouvons également interroger les machines dans le modèle "contrôleur":
juju machines -m controller
La sortie doit afficher les deux nouveaux ordinateurs en cours de configuration:
Machine State DNS Inst id Series AZ Message
0 started 54.166.164.0 i-04790c2414e4c8e80 xenial us-east-1a running
1 pending 54.145.192.13 i-071660e9ce3c3cee5 xenial us-east-1c running
2 pending 54.80.176.66 i-0b36284d1ebb816cf xenial us-east-1a running
Puisqu'il y a déjà trois contrôleurs, les appeler à nouveau juju enable-ha
n'aura aucun effet.
Utilisez la juju controllers --refresh
liste des contrôleurs d'actualisation pour montrer que le niveau HA est 3:
Controller Model User Access Cloud/Region Models Machines HA Version
aws-ha* default admin superuser aws/us-east-1 2 3 3 2.4-beta2
Supprimer des ordinateurs du cluster
Vous pouvez supprimer un ordinateur du cluster à tout moment. Les raisons typiques en sont les suivantes:
-
Le contrôleur se comporte anormalement et votre intention est de le remplacer par un autre contrôleur.
-
Vous avez décidé que vous n'avez pas besoin du niveau HA actuel et que vous souhaitez le réduire.
- Si la désinstallation du contrôleur aboutit à un système pair, il agira comme un «disque de secours».
- Si la suppression du contrôleur entraînerait un nombre impair de systèmes, chacun participera activement au cluster.
juju remove-machine
Vous pouvez supprimer le contrôleur du cluster en supprimant la machine du contrôleur ( ) du modèle .
En utilisant l'exemple du chapitre précédent, voici comment nous allons supprimer la machine "1":
juju remove-machine -m controller 1
juju controllers --refresh
La sortie de est maintenant :
Controller Model User Access Cloud/Region Models Machines HA Version
aws-ha* default admin superuser aws/us-east-1 2 2 1/2 2.4-beta2
Désormais, il n'y a qu'un seul contrôleur actif (et un contrôleur de secours) dans le cluster (c'est-à-dire que l'un des deux contrôleurs actifs est actif). Veuillez noter que cette situation doit être corrigée dès que possible.
Ajouter des ordinateurs au cluster
Utilisez la commande enable-ha pour obtenir le nombre requis de contrôleurs (c'est-à-dire le niveau HA).
Dans notre exemple en cours, notre cluster à 3 membres d'origine dispose désormais de deux ordinateurs. Nous pouvons le restaurer à trois en émettant à nouveau juju enable-ha, mais si nous décidons de le définir sur 5 clusters membres, nous pouvons faire ce qui suit:
juju enable-ha -n 5
Cela se traduira par trois contrôleurs supplémentaires (2 + 3 = 5).
juju controllers --refresh
La sortie est:
Controller Model User Access Cloud/Region Models Machines HA Version
aws-ha* default admin superuser aws/us-east-1 2 5 5 2.4-beta2
Afficher les informations HA du contrôleur étendu
show-controller
Les informations étendues sur le contrôleur HA peuvent être obtenues à partir de la commande:
contrôleur de spectacle juju
下面列出了我们的5成员集群的部分输出:
...
...
controller-machines:
"0":
instance-id: i-04790c2414e4c8e80
ha-status: ha-enabled
"2":
instance-id: i-0b36284d1ebb816cf
ha-status: ha-enabled
"3":
instance-id: i-09ff42ba5fb9429b0
ha-status: ha-enabled
"4":
instance-id: i-098222dad56cbe9a0
ha-status: ha-enabled
"5":
instance-id: i-0613fb1fa8346de8a
ha-status: ha-enabled
models:
controller:
uuid: e8c4d910-8818-4a8a-8839-25766a1875d3
machine-count: 5
core-count: 5
...
...
Ici, le nombre d'ordinateurs est le nombre total d'ordinateurs dans le modèle «contrôleur» et le nombre de cœurs est le nombre d'ordinateurs contrôleurs. Si le membre est actif, le statut de la clé sera affiché comme "ha-enabled", si le membre est en mode hot standby, le statut sera "ha-pending".
Récupérer après une panne de contrôleur
En cas de contrôleur défectueux, un nouveau contrôleur ne sera pas automatiquement régénéré et le contrôleur défectueux ne sera pas supprimé. Cependant, tant que plus de la moitié des membres d'origine sont encore disponibles, la récupération manuelle est simple:
- Retirez le contrôleur endommagé (comme décrit ci-dessus).
- Ajoutez un nouveau contrôleur (comme décrit ci-dessus).
Avant d'ajouter un nouveau contrôleur, vous devez d'abord supprimer le contrôleur, car la
enable-ha
commande ne vérifie pas les défauts. Cela garantit simplement que le nombre total de membres existe.
Dans des circonstances malheureuses, si les contrôleurs disponibles sont insuffisants, vous devez restaurer à partir de la sauvegarde. Voir Sauvegarder et restaurer Juju pour comprendre comment cela fonctionne.
Si le contrôleur entre dans l'état "down", on considère que le contrôleur est défectueux. Il peut être surveillé en appliquant des commandes d’état au modèle «contrôleur»:
juju status -m controller
Cette sortie indique que le contrôleur fonctionnant sur la machine "3" a perdu sa connexion au reste du cluster:
Machine State DNS Inst id Series AZ Message
0 started 54.166.164.0 i-04790c2414e4c8e80 xenial us-east-1a running
2 started 54.80.176.66 i-0b36284d1ebb816cf xenial us-east-1a running
3 down 54.157.161.147 i-09ff42ba5fb9429b0 xenial us-east-1e running
4 started 54.227.91.241 i-098222dad56cbe9a0 xenial us-east-1d running
5 started 174.129.90.47 i-0613fb1fa8346de8a xenial us-east-1c running
Cependant, la colonne «HA» –refresh dans la sortie du contrôleur juju est toujours affichée comme «5» comme auparavant:
Controller Model User Access Cloud/Region Models Machines HA Version
aws-ha* default admin superuser aws/us-east-1 2 5 5 2.4-beta2
Pour récupérer à partir de ce cluster dégradé:
juju remove-machine -m controller 3
juju enable-ha -n 5
Contrôleur HA et journalisation
Tous les ordinateurs Juju envoient leurs journaux au contrôleur du cluster HA. Chaque contrôleur envoie à son tour ces journaux à la base de données MongoDB, qui est synchronisée entre les différents contrôleurs. Les utilisateurs utilisent généralement la commande juju debug-log pour lire les informations du journal. Voir le journal Juju.