À propos du remplacement de nœuds de cluster GitHub Enterprise Server
Vous pouvez remplacer un nœud fonctionnel dans un cluster GitHub Enterprise Server ou remplacer un nœud qui a échoué de manière inattendue.
Après avoir remplacé un nœud, votre instance GitHub Enterprise Server ne distribue pas automatiquement les travaux sur le nouveau nœud. Vous pouvez contraindre votre instance à équilibrer les tâches entre les nœuds. Pour plus d’informations, consultez « AUTOTITLE ».
Avertissement
Pour éviter les conflits, ne réutilisez pas un nom d’hôte précédemment attribué à un nœud du cluster.
Remplacement d’un nœud fonctionnel
Vous pouvez remplacer un nœud fonctionnel existant dans votre cluster. Par exemple, vous voudrez peut-être fournir à une machine virtuelle des ressources de processeur, de mémoire ou de stockage supplémentaires.
Pour remplacer un nœud fonctionnel, installez l’appliance GitHub Enterprise Server sur une nouvelle machine virtuelle, configurez une adresse IP, ajoutez le nouveau nœud au fichier de configuration du cluster, initialisez le cluster et appliquez la configuration, puis mettez le nœud que vous avez remplacé hors connexion.
Remarque
Si vous remplacez le nœud principal de la base de données, voir Remplacement du nœud principal de la base de données.
-
Provisionnez et installez GitHub Enterprise Server avec un nom d’hôte unique sur le nœud de remplacement.
-
En utilisant l’interpréteur de commandes d’administration ou DHCP, configurez uniquement l’adresse IP du nœud de remplacement. Ne configurez pas d’autres paramètres.
-
Pour ajouter le nœud de remplacement nouvellement provisionné, sur n’importe quel nœud, modifiez le fichier
cluster.confpour supprimer le nœud ayant échoué et ajouter le nœud de remplacement. Par exemple, ce fichiercluster.confmodifié remplaceghe-data-node-3par le nœud nouvellement provisionné,ghe-replacement-data-node-3:[cluster "ghe-replacement-data-node-3"] hostname = ghe-replacement-data-node-3 ipv4 = 192.168.0.7 # ipv6 = fd12:3456:789a:1::7 consul-datacenter = PRIMARY-DATACENTER git-server = true pages-server = true mysql-server = true elasticsearch-server = true redis-server = true memcache-server = true metrics-server = true storage-server = true
Vous pouvez choisir d’échelonner l’attribution de cote de la base de données d’un nouveau nœud de réplique MySQL, ce qui vous permettra d’ouvrir votre appliance au trafic plus tôt. Pour plus d’informations, consultez « Report du remplissage de la base de données ».
-
À partir de l’interpréteur de commandes d’administration du nœud avec le
cluster.confmodifié, exécutezghe-cluster-config-init. Cette commande initialise le nœud nouvellement ajouté dans le cluster. -
À partir du même nœud, exécutez
ghe-cluster-config-apply. Cette commande valide le fichier de configuration, le copie sur chaque nœud du cluster et configure chaque nœud en fonction du fichiercluster.confmodifié. -
Pour mettre hors connexion le nœud que vous remplacez à partir du nœud MySQL principal de votre cluster, exécutez la commande suivante.
ghe-remove-node NODE-HOSTNAMECette commande évacue les données de tous les services de données s’exécutant sur le nœud, marque le nœud comme hors connexion dans votre configuration et arrête le trafic acheminé vers le nœud. Pour plus d’informations, consultez « AUTOTITLE ».
Remplacement d’un nœud en cas d’urgence
Vous pouvez remplacer un nœud défaillant dans votre cluster. Par exemple, un problème logiciel ou matériel peut affecter la disponibilité d’un nœud.
Remarque
Si vous remplacez le nœud principal de la base de données, voir Remplacement du nœud principal de la base de données.
Pour remplacer un nœud en cas d’urgence, vous allez mettre le nœud défaillant hors connexion, ajouter votre nœud de remplacement au cluster, puis exécuter des commandes pour supprimer les références aux services de données sur le nœud supprimé.
-
Pour supprimer le nœud qui rencontre des problèmes du cluster à partir du nœud MySQL principal de votre cluster, exécutez la commande suivante. Remplacez NODE-HOSTNAME par le nom d’hôte du nœud que vous mettez hors connexion.
ghe-remove-node --no-evacuate NODE-HOSTNAMECette commande marque le nœud comme étant hors connexion dans votre configuration et arrête le trafic acheminé vers le nœud. Cette commande peut être exécutée dès maintenant en mode (espace réservé), car, plus loin dans cette procédure, vous lancerez des commandes qui demanderont aux services de données du nœud de recopier toutes les répliques vers les autres nœuds disponibles du cluster. Pour plus d’informations, consultez « AUTOTITLE ».
-
Ajoutez votre nœud de remplacement au cluster.
- Provisionnez et installez GitHub Enterprise Server avec un nom d’hôte unique sur le nœud de remplacement.
-
En utilisant l’interpréteur de commandes d’administration ou DHCP, configurez uniquement l’adresse IP du nœud de remplacement. Ne configurez pas d’autres paramètres.
-
Pour ajouter le nœud de remplacement nouvellement provisionné, sur n’importe quel nœud, modifiez le fichier pour ajouter le nœud de remplacement. Par exemple, ce fichier modifié ajoute le nœud nouvellement provisionné :
[cluster "ghe-replacement-data-node-3"] hostname = ghe-replacement-data-node-3 ipv4 = 192.168.0.7 # ipv6 = fd12:3456:789a:1::7 git-server = true pages-server = true mysql-server = true elasticsearch-server = true redis-server = true memcache-server = true metrics-server = true storage-server = true
-
À partir de l’interpréteur de commandes d’administration du nœud avec le
cluster.confmodifié, exécutezghe-cluster-config-init. Cette commande initialise le nœud nouvellement ajouté dans le cluster.
-
-
À partir du même nœud, exécutez
ghe-cluster-config-apply. Cette commande valide le fichier de configuration, le copie sur chaque nœud du cluster et configure chaque nœud en fonction du fichiercluster.confmodifié. -
Supprimez les références aux services de données sur le nœud que vous avez supprimé.
-
Recherchez l’UUID du nœud que vous avez supprimé. Pour rechercher l’UUID, exécutez la commande suivante, en remplaçant par le nom d’hôte du nœud. Vous aurez besoin de cet UUID lors de l’étape suivante.
ghe-config cluster.HOSTNAME.uuid -
Pour supprimer des références aux services de données, exécutez les commandes suivantes. Remplacez par l’UUID du nœud.
Ces commandes indiquent à chaque service que le nœud est définitivement supprimé. Les services recréeront l’ensemble des répliques présentes sur ce nœud sur les nœuds disponibles du cluster.
Remarque
Ces commandes peuvent entraîner une charge accrue sur le serveur pendant que les données sont rééquilibrées entre les réplicas.
Pour le service (utilisé pour les données du référentiel) :
ghe-spokesctl server destroy git-server-UUIDConcernant le service (utilisé pour les constructions de sites GitHub Pages) :
ghe-dpages remove pages-server-UUIDPour le service (utilisé pour les données LFS Git, les images avatar, les pièces jointes de fichiers et les archives de publication) :
ghe-storage destroy-host storage-server-UUID --force
-
-
Si vous le souhaitez, supprimez l’entrée du nœud supprimé dans votre fichier . Cela permet de conserver votre fichier organisé et de gagner du temps pendant les exécutions ultérieures .
-
Pour supprimer l’entrée du fichier, exécutez la commande suivante, en remplaçant par le nom d’hôte du nœud supprimé.
ghe-config --remove-section "cluster.HOSTNAME" -
Pour copier la configuration vers d’autres nœuds du cluster à partir du shell d’administration du nœud où vous avez modifié , exécutez .
-
Remplacement du nœud de base de données principal (MySQL ou MySQL et MSSQL)
Pour fournir des services de base de données, votre cluster nécessite un nœud MySQL principal et au moins un nœud MySQL réplica. Pour plus d’informations, consultez « AUTOTITLE ».
Si votre cluster a GitHub Actions activé, vous devrez également prendre en compte MSSQL dans les étapes suivantes.
Si vous devez allouer davantage de ressources à votre nœud MySQL principal (ou MySQL et MSSQL) ou remplacer un nœud ayant échoué, vous pouvez ajouter un nouveau nœud à votre cluster. Pour réduire le temps d’arrêt, ajoutez le nouveau nœud, répliquez les données MySQL (ou MySQL et MSSQL), puis faites-la passer au nœud principal. Un certain temps d'arrêt est nécessaire pendant le processus de promotion.
-
Provisionnez et installez GitHub Enterprise Server avec un nom d’hôte unique sur le nœud de remplacement.
-
En utilisant l’interpréteur de commandes d’administration ou DHCP, configurez uniquement l’adresse IP du nœud de remplacement. Ne configurez pas d’autres paramètres.
-
Pour vous connecter à votre instance GitHub Enterprise Server, connectez-vous avec SSH à l’un des nœuds de votre cluster. À partir de votre station de travail, exécutez la commande suivante. Remplacez HOSTNAME par le nom d’hôte du nœud. Pour plus d’informations, consultez « Accès à l’interpréteur de commandes d’administration (SSH) ».
Shell ssh -p 122 admin@HOSTNAME
ssh -p 122 admin@HOSTNAME -
Ouvrez le fichier de configuration de groupement sur
/data/user/common/cluster.confdans un éditeur de texte. Par exemple, vous pouvez utiliser Vim. Créez une sauvegarde du fichiercluster.confavant de modifier le fichier.Shell sudo vim /data/user/common/cluster.conf
sudo vim /data/user/common/cluster.conf -
Le fichier de configuration du cluster répertorie chaque nœud sous un titre
[cluster "HOSTNAME"]. Ajoutez un nouvel en-tête pour le nœud et saisissez les paires clé-valeur de configuration, en remplaçant les espaces réservés par les valeurs appropriées.- Veillez à inclure la paire clé-valeur.
- Si GitHub Actions est activé dans le cluster, vous devrez inclure la paire clé-valeur également.
- La section suivante est un exemple et la configuration de votre nœud peut être différente.
... [cluster "HOSTNAME"] hostname = HOSTNAME ipv4 = IPV4-ADDRESS # ipv6 = IPV6-ADDRESS consul-datacenter = PRIMARY-DATACENTER datacenter = DATACENTER mysql-server = true redis-server = true ... ...
-
À partir du shell administratif du nœud où vous avez apporté des modifications, exécutez la commande. Le nœud nouvellement ajouté devient un nœud MySQL réplica, et tous les autres services configurés s’exécutent là.
Remarque
L'extrait précédent ne suppose pas que GitHub Actions soit activé dans le cluster.
-
Attendez la fin de la réplication MySQL. Pour surveiller la réplication MySQL à partir de n’importe quel nœud du cluster, exécutez .
Si GitHub Actions est activé dans le cluster, vous devrez attendre que la réplication MSSQL se termine.
Peu de temps après l’ajout du nœud au cluster, il est possible qu’une erreur sur l’état de réplication s’affiche pendant que la réplication se rattrape. La réplication peut prendre des heures selon la charge de l’instance, la quantité de données de base de données et de la dernière fois que l’instance a généré une valeur initiale de base de données.
-
Pendant votre fenêtre de maintenance planifiée, activez le mode maintenance. Pour plus d’informations, consultez « AUTOTITLE ».
-
Assurez-vous que la réplication MySQL (ou MySQL et MSSQL) est terminée à partir de n'importe quel nœud du cluster en exécutant la commande .
Avertissement
Si vous n'attendez pas la fin de la réplication MySQL (ou MySQL et MSSQL), vous risquez de perdre des données sur votre instance.
-
Pour définir le nœud principal MySQL actuel en mode lecture seule, exécutez la commande suivante à partir du nœud principal MySQL.
Shell echo "SET GLOBAL super_read_only = 1;" | sudo mysql
echo "SET GLOBAL super_read_only = 1;" | sudo mysql -
Attendez que les identificateurs de transaction globaux (GTID) définis sur les nœuds MySQL principaux et réplica soient identiques. Pour vérifier les GTID, exécutez la commande suivante à partir de n’importe quel nœud de cluster.
Shell ghe-cluster-each -r mysql -- 'echo "SELECT @@global.gtid_executed;" | sudo mysql'
ghe-cluster-each -r mysql -- 'echo "SELECT @@global.gtid_executed;" | sudo mysql'- Pour vérifier que la variable MySQL globale a été correctement définie, exécutez la commande suivante.
Shell echo "SHOW GLOBAL VARIABLES LIKE 'super_read_only';" | sudo mysql
echo "SHOW GLOBAL VARIABLES LIKE 'super_read_only';" | sudo mysql -
Si GitHub Actions est activé dans le cluster, connectez-vous en SSH au nœud qui deviendra le nouveau nœud MSSQL primaire.
Shell ssh -p 122 admin@NEW_MSSQL_NODE_HOSTNAME
ssh -p 122 admin@NEW_MSSQL_NODE_HOSTNAME- À partir d’une session exécutez la commande suivante pour promouvoir MSSQL vers le nouveau nœud.
Shell /usr/local/share/enterprise/ghe-mssql-repl-promote
/usr/local/share/enterprise/ghe-mssql-repl-promoteCela tentera d’accéder au nœud MSSQL principal actuel et d’effectuer un basculement gracieux.
-
Lorsque les GTID des nœuds MySQL principaux et des répliques correspondent, mettez à jour la configuration du cluster en ouvrant le fichier de configuration du cluster situé à (espace réservé) dans un éditeur de texte.
- Créez une sauvegarde du fichier avant de modifier le fichier.
- Dans la section de niveau supérieur , supprimez le nom d’hôte du nœud que vous avez remplacé de la paire clé-valeur , puis affectez le nouveau nœud à la place. Si le nouveau nœud est également un nœud Redis principal, ajustez la paire clé-valeur .
- Si GitHub Actions est activé dans le cluster, vous devrez inclure la paire clé-valeur également.
[cluster] mysql-master = NEW-NODE-HOSTNAME redis-master = NEW-NODE-HOSTNAME primary-datacenter = primary ...
-
Dans l’interpréteur de commande du nœud où vous avez modifié (espace réservé), ouvrez une session (espace réservé) puis exécutez (espace réservé). Cette commande reconfigure le cluster, en favorisant le nœud nouvellement ajouté au nœud MySQL principal et en convertissant le nœud MySQL principal d’origine en réplica.
Remarque
L'extrait précédent ne suppose pas que GitHub Actions soit activé dans le cluster.
-
Vérifiez l'état de la réplication MySQL (ou MySQL et MSSQL) à partir de n'importe quel nœud du cluster en exécutant la commande suivante .
-
Si GitHub Actions est activé dans le cluster, exécutez la commande suivante à partir du nouveau nœud MySQL et MSSQL.
Shell /usr/local/share/enterprise/ghe-repl-post-failover-mssql
/usr/local/share/enterprise/ghe-repl-post-failover-mssql -
Lorsque la réplication MySQL (ou MySQL et MSSQL) est terminée, désactivez le mode maintenance à partir de n'importe quel nœud du cluster. Consultez AUTOTITLE.