doc-locale/fr-fr/administration/geo/disaster_recovery/planned_failover.md
{{< details >}}
{{< /details >}}
Le principal cas d'utilisation de la reprise après sinistre est d'assurer la continuité des activités en cas d'interruption non planifiée, mais elle peut être utilisée conjointement avec un basculement planifié pour migrer votre instance GitLab entre des régions sans temps d'arrêt prolongé.
La réplication entre les sites Geo est asynchrone, de sorte qu'un basculement planifié nécessite une fenêtre de maintenance durant laquelle les mises à jour du site principal sont bloquées. La durée de cette fenêtre dépend du temps nécessaire pour synchroniser complètement le site secondaire avec le site principal. Lorsque la synchronisation est terminée, le basculement peut se produire sans perte de données.
Ce document suppose que vous disposez déjà d'une configuration Geo entièrement configurée et fonctionnelle. Lisez ce document et la documentation de basculement Reprise après sinistre dans leur intégralité avant de continuer. Le basculement planifié est une opération majeure et, si elle est effectuée incorrectement, il existe un risque élevé de perte de données. Entraînez-vous à la procédure jusqu'à ce que vous soyez à l'aise avec les étapes nécessaires et que vous ayez un degré élevé de confiance en votre capacité à les exécuter avec précision.
Suivre ces recommandations permet d'assurer un processus de basculement fluide et de réduire le risque de perte de données ou de temps d'arrêt prolongé.
S'il existe des éléments Échec ou En file d'attente lors des vérifications préalables (que ce soit une validation manuelle ou lors de l'exécution de gitlab-ctl promotion-preflight-checks), le basculement est bloqué jusqu'à ce que ces éléments soient :
Pour obtenir de l'aide dans le diagnostic des échecs de synchronisation et de vérification, consultez Dépannage des erreurs de synchronisation et de vérification Geo.
Prévoyez 4 à 6 semaines avant la fin du basculement pour résoudre les problèmes d'intégrité des données qui surviennent couramment après la première configuration de la réplication Geo. Ceux-ci peuvent inclure des enregistrements de base de données orphelins ou des références de fichiers incohérentes. Pour obtenir des conseils, consultez Dépannage des erreurs Geo courantes.
Commencez à traiter les problèmes de synchronisation tôt pour éviter des décisions difficiles pendant la fenêtre de maintenance :
Pour garantir le succès : définissez des critères clairs pour savoir quand abandonner le basculement en raison d'erreurs de synchronisation non résolues.
[!warning] Les sauvegardes des bases de données de répliques Geo peuvent être annulées lors de transactions de base de données actives.
Testez les procédures de sauvegarde à l'avance et envisagez ces stratégies :
[!warning] Planifiez les points de décision de restauration avant que la promotion ne soit terminée, car un retour en arrière ultérieur peut entraîner une perte de données.
Documentez les étapes spécifiques pour revenir au site principal d'origine, notamment :
Pour garantir le succès, pratiquez et documentez cette tâche hautement manuelle dans ses moindres détails :
git push, ajoutez des images à un ticket.Si vous utilisez des fonctionnalités GitLab que Geo ne prend pas en charge, vous devez prévoir des dispositions séparées pour vous assurer que le site secondaire dispose d'une copie à jour de toutes les données associées à cette fonctionnalité. Cela peut prolonger considérablement la période de maintenance. Pour obtenir la liste des fonctionnalités prises en charge par Geo, consultez le tableau des types de données répliquées.
Une stratégie courante pour réduire au minimum cette période pour les données stockées dans des fichiers consiste à utiliser rsync pour transférer les données. Un rsync initial peut être effectué avant la fenêtre de maintenance. Les procédures rsync ultérieures, y compris un transfert final dans la fenêtre de maintenance, ne transfèrent que les modifications entre le site principal et les sites secondaires.
Pour les stratégies centrées sur les dépôts Git pour utiliser rsync efficacement, consultez déplacement des dépôts. Ces stratégies peuvent être adaptées à n'importe quelle autre donnée basée sur des fichiers.
Par défaut, le registre de conteneurs n'est pas automatiquement répliqué vers les sites secondaires. Cela doit être configuré manuellement. Pour plus d'informations, consultez le registre de conteneurs pour un site secondaire.
Si vous utilisez le stockage local sur votre site principal actuel pour le registre de conteneurs, vous pouvez utiliser rsync pour transférer les objets du registre de conteneurs vers le site secondaire vers lequel vous êtes sur le point de basculer :
# Run from the secondary site
rsync --archive --perms --delete root@<geo-primary>:/var/opt/gitlab/gitlab-rails/shared/registry/. /var/opt/gitlab/gitlab-rails/shared/registry
Vous pouvez également sauvegarder le registre de conteneurs sur le site principal et le restaurer sur le site secondaire :
Sur votre site principal, sauvegardez uniquement le registre et excluez des répertoires spécifiques de la sauvegarde :
# Create a backup in the /var/opt/gitlab/backups folder
sudo gitlab-backup create SKIP=db,uploads,builds,artifacts,lfs,terraform_state,pages,repositories,packages
Copiez l'archive de sauvegarde générée depuis votre site principal dans le dossier /var/opt/gitlab/backups de votre site secondaire.
Sur votre site secondaire, restaurez le registre en suivant la documentation Restaurer GitLab.
La recherche avancée est alimentée par Elasticsearch ou OpenSearch. Les données de recherche avancée ne sont pas automatiquement répliquées vers les sites secondaires.
Pour récupérer les données de recherche avancée sur le site principal nouvellement promu :
{{< tabs >}}
{{< tab title="GitLab 17.2 et versions ultérieures" >}}
Désactivez la recherche avec Elasticsearch :
sudo gitlab-rake gitlab:elastic:disable_search_with_elasticsearch
Activez la recherche avec Elasticsearch :
sudo gitlab-rake gitlab:elastic:enable_search_with_elasticsearch
{{< /tab >}}
{{< tab title="GitLab 17.1 et versions antérieures" >}}
Désactivez la recherche avec Elasticsearch :
sudo gitlab-rake gitlab:elastic:disable_search_with_elasticsearch
Mettez l'indexation en pause et attendez cinq minutes que les tâches en cours se terminent :
sudo gitlab-rake gitlab:elastic:pause_indexing
Réindexez l'instance depuis le début :
sudo gitlab-rake gitlab:elastic:index
Reprenez l'indexation :
sudo gitlab-rake gitlab:elastic:resume_indexing
Activez la recherche avec Elasticsearch :
sudo gitlab-rake gitlab:elastic:enable_search_with_elasticsearch
{{< /tab >}}
{{< /tabs >}}
Avant de planifier votre basculement planifié, assurez-vous que le processus se déroule sans problème en vérifiant ces contrôles préalables. Chaque étape est décrite plus en détail ci-dessous.
Lors du processus de basculement réel, après que le site principal est hors service, exécutez cette commande pour effectuer des vérifications de validation finale avant de promouvoir le site secondaire :
gitlab-ctl promotion-preflight-checks
La commande gitlab-ctl promotion-preflight-checks fait partie du processus de basculement et nécessite que le site principal soit hors service. Vous ne pouvez pas l'utiliser comme outil de validation pré-maintenance pendant que le site principal est encore en cours d'exécution. Lorsque vous exécutez cette commande, une invite vous demande si le site principal est hors service. Si vous répondez No, cette erreur s'affiche : ERROR: primary node must be down.
Pour la validation pré-maintenance pendant que le site principal est encore opérationnel, utilisez les vérifications manuelles ci-dessous.
Si vous prévoyez de mettre à jour l'enregistrement DNS du domaine principal, envisagez de définir un TTL (durée de vie) faible pour assurer une propagation rapide des modifications DNS.
Si vous disposez d'une installation GitLab volumineuse ou ne pouvez pas tolérer les temps d'arrêt, envisagez de migrer vers le stockage d'objets avant de planifier un basculement planifié. Cela réduit à la fois la durée de la fenêtre de maintenance et le risque de perte de données résultant d'un basculement planifié mal exécuté.
Si vous souhaitez que GitLab gère la réplication du stockage d'objets pour les sites secondaires, consultez Réplication du stockage d'objets.
Les paramètres de base de données sont automatiquement répliqués vers le site secondaire. Cependant, vous devez configurer manuellement le fichier /etc/gitlab/gitlab.rb, qui diffère entre les sites. Si des fonctionnalités telles que Mattermost, l'intégration OAuth ou LDAP sont activées sur le site principal mais pas sur le site secondaire, elles sont perdues lors du basculement.
Vérifiez le fichier /etc/gitlab/gitlab.rb pour les deux sites. Assurez-vous que le site secondaire prend en charge tout ce que fait le site principal avant de planifier un basculement planifié. Assurez-vous que les rôles GitLab Geo sont correctement configurés.
Exécutez les commandes suivantes sur les sites principal et secondaire :
gitlab-rake gitlab:check
gitlab-rake gitlab:geo:check
Si l'un ou l'autre des sites signale des échecs, résolvez-les avant de planifier un basculement planifié.
Les clés hôtes SSH et les fichiers /etc/gitlab/gitlab-secrets.json doivent être identiques sur tous les nœuds. Vérifiez cela en exécutant les commandes suivantes sur tous les nœuds et en comparant les résultats :
sudo sha256sum /etc/ssh/sshhost /etc/gitlab/gitlab-secrets.json
Si des fichiers diffèrent, répliquez manuellement les secrets GitLab et répliquez les clés hôtes SSH vers le site secondaire si nécessaire.
Cette étape peut être ignorée en toute sécurité si le site principal et tous les sites externes auxquels le site principal accède utilisent des certificats émis par une autorité de certification publique.
Vous devez installer les certificats corrects sur le site secondaire si :
Pour plus d'informations, consultez l'utilisation de certificats personnalisés avec les sites secondaires.
La fenêtre de maintenance ne se termine pas tant que la réplication et la vérification Geo ne sont pas entièrement terminées. Pour réduire au maximum la durée de la fenêtre, vous devez vous assurer que ces processus sont aussi proches que possible de 100 % lors de l'utilisation active.
Sur le site secondaire :
Dans le coin supérieur droit, sélectionnez Admin.
Dans la barre latérale gauche, sélectionnez Geo > Sites. Les objets répliqués (affichés en vert) doivent être proches de 100 %, et il ne devrait y avoir aucun échec (affiché en rouge). Si une grande proportion d'objets n'est pas encore répliquée (affichée en gris), envisagez d'accorder plus de temps au site pour terminer :
Si des objets ne se répliquent pas, effectuez une investigation avant de planifier la fenêtre de maintenance. Tout objet dont la réplication échoue est perdu après un basculement planifié.
Une cause courante d'échecs de réplication est l'absence de données sur le site principal. Pour résoudre ces échecs, vous pouvez :
Assurez-vous que la vérification est terminée avant de procéder au basculement. Toute donnée corrompue qui échoue à la vérification peut être perdue lors du basculement.
Pour plus d'informations, consultez la vérification automatique en arrière-plan.
Sur le site principal :
Selon la configuration de l'URL de votre instance, des étapes supplémentaires peuvent être nécessaires pour maintenir votre flotte de runners à 100 % après le basculement.
Le jeton utilisé pour enregistrer les runners doit fonctionner sur les instances principale ou secondaire. Si vous constatez des problèmes de connexion après le basculement, il est possible que les secrets n'aient pas été copiés lors de la configuration secondaire. Vous pouvez réinitialiser les jetons de runner, mais sachez que vous pourriez rencontrer d'autres problèmes sans rapport avec les runners si les secrets ne sont pas synchronisés.
Si un runner est répétitivement incapable de se connecter à une instance GitLab, il cesse d'essayer de se connecter pendant une période de temps. Par défaut, cette période est de 1 heure. Pour éviter cela, arrêtez les runners jusqu'à ce que l'instance GitLab soit accessible. Consultez la documentation sur check_interval, et les options de configuration unhealthy_requests_limit et unhealthy_interval.
Si vous avez OpenBao installé avec le chart Helm GitLab, effectuez ces vérifications pendant que le cluster principal est encore accessible.
Le secret Kubernetes gitlab-openbao-unseal doit exister sur le cluster secondaire. Vérifiez qu'il est présent :
kubectl --namespace gitlab get secret gitlab-openbao-unseal
Si le secret est manquant, copiez-le depuis le site principal avant de continuer. Pour plus d'informations, consultez Sauvegarder les secrets.
La base de données OpenBao secondaire est un réplica en lecture de la base de données PostgreSQL principale, y compris le schéma openbao. Avant un basculement planifié, vérifiez que la réplication est à jour et que les données secondaires sont cohérentes avec les données principales.
Si la base de données principale est déjà indisponible, le site secondaire contient des données jusqu'à la dernière transaction répliquée. Tout secret écrit sur le site principal après la dernière réplication est perdu.
Pour vous assurer que toutes les données sont répliquées vers un site secondaire, désactivez les mises à jour (requêtes d'écriture) sur le site principal pour laisser au site secondaire le temps de rattraper son retard :
Activez le mode maintenance sur le site principal.
Dans le coin supérieur droit, sélectionnez Admin.
Dans la barre latérale gauche, sélectionnez Surveillance > Jobs en arrière-plan.
Dans le tableau de bord Sidekiq, sélectionnez Cron.
Sélectionnez Disable All pour désactiver les jobs périodiques en arrière-plan non liés à Geo.
Sélectionnez Enable pour ces cron jobs :
geo_metrics_update_workergeo_prune_event_log_workergeo_verification_cron_workerrepository_check_workerLa réactivation de ces cron jobs est essentielle pour que le basculement planifié se termine avec succès.
Si vous répliquez manuellement des données non gérées par Geo, déclenchez maintenant le processus de réplication final.
Sur le site principal :
Dans le coin supérieur droit, sélectionnez Admin.
Dans la barre latérale gauche, sélectionnez Surveillance > Jobs en arrière-plan.
Dans le tableau de bord Sidekiq, sélectionnez Queues. Attendez que toutes les files d'attente, sauf celles contenant geo dans le nom, tombent à 0. Ces files d'attente contiennent le travail soumis par vos utilisateurs. Basculer avant que les files d'attente ne soient vides entraîne la perte du travail.
Dans la barre latérale gauche, sélectionnez Geo > Sites. Attendez que les conditions suivantes soient vraies pour le site secondaire vers lequel vous basculez :
Sur le site secondaire :
geo tombent à 0 job en file d'attente et 0 job en cours d'exécution.À ce stade, votre site secondaire contient une copie à jour de tout ce que possède le site principal, garantissant qu'il n'y a pas de perte de données lors du basculement.
Une fois la réplication terminée, promouvez le site secondaire en site principal. Ce processus entraîne une brève interruption sur le site secondaire, et les utilisateurs peuvent avoir besoin de se reconnecter. Si vous suivez correctement les étapes, l'ancien site Geo principal est désactivé et le trafic des utilisateurs est redirigé vers le site nouvellement promu.
Lorsque la promotion est terminée, la fenêtre de maintenance est fermée et votre nouveau site principal commence à diverger de l'ancien.
N'oubliez pas de supprimer le message de diffusion une fois le basculement terminé.
Si tout fonctionne comme prévu, vous pouvez remettre l'ancien site en tant que site secondaire.
S'il y a des problèmes avec le site principal nouvellement promu, le retour à l'ancien est possible, mais toutes les modifications apportées au nouveau site principal seront perdues.