Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Make by tools (01.00.01) - action=merge_page
Scroll Ignore
scroll-viewporttrue
scroll-pdftrue
scroll-officetrue
scroll-chmtrue
scroll-docbooktrue
scroll-eclipsehelptrue
scroll-epubtrue
scroll-htmlfalse
Panel
titleSommaire

Table of Contents
stylenone

Concept

Le but est de se baser sur la haute disponibilité du Cluster MongoDB pour faire la Cette procédure permet la migration de MMapV1 vers WiredTiger .

De cette manière, les interruptions de Shinken vont se limiter à quelque redémarrage de Synchronizer ( et donc limiter l'impact en terme d'indisponibilité de Shinken ).

Préparation

sans interruption de service de Shinken (  le seul impact observable pourra éventuellement être un peu de lenteur sur les accès à MongoDB ) en se basant sur la haute disponibilité du Cluster MongoDB.

Préparation

Prévoyez 2 périodes de maintenance car il faudra stoppé le Synchroniser 2 fois.

Warning
titleImportant !

Avant toute opération, faites faire un shinken-backup complet ( ou avec les options qui permettent de sauvegarder les données ) du serveur de production impacté.

Rappel des concepts d'architecture de Cluster MongoDB

Pour une meilleur meilleure compréhension de la procédure, voici 2 schémas d'exemple de type de mise en place deux schémas représentant des architectures de clusters ( 3 nœuds ou 2 nœuds et un Arbiter MongoDB MongoDB ( Primaire - Secondaire - Secondaire ou Primaire - Secondaire - Arbiter ).

Cela permet de rappeler : 

  • les différents démons utilisé utilisés par le cluster MongoDB.
  • ainsi que les ports par défaut connuesutilisés.


Warning
titleImportant !

Attention, il se peut que votre installation ait l'infrastructure à migrer peut comporter des différences.

Panel

Panel

Image Modified

Dans les schémas, le port du service serveur mongod est 27018 ( par défaut dans l'exemple ), mais comme ce port peut être modifié dans la configuration du démon, pour le reste de la procédure, nous utiliserons le terme de PORT_DE_MONGOD sera utilisé.

Pour rappel, le service serveur mongod permet :  

  • De se charger du stockage de stocker des données.
  • Il de s'assure assurer que les données sont bien répliquées sur les autres nœuds du cluster.


Anchor
Identifier_les_mongod_à_migrer
Identifier_les_mongod_à_migrer

Identifier les mongod à migrer

Avant de démarrer la procédure, faire un inventaire des serveurs à migrer avec la commande suivante :

Code Block
languagetext

Depuis le document qui décrit votre infrastructure lister les serveurs que vous voulez migrer.

code
themeEmacs
mongo shinken --port  PORT_DE_MONGOD --quiet --eval "printjson(rs.conf())"
Panel



Tip

Vérifier que les champs "host" contiennent bien les adresses des serveurs que vous voulez migrerqui doivent être migrés.

Vérifier si vous avez s'il y a un Arbiter MongoDB, s'assurer que celui-ci est bien "arbiterOnly" : true.

Vérifier aussi les priorités afin de vérifier si vous avez un PRIMARY par défautqu'un des nœuds a un champ "priority" plus élevé que les autres ( il sera prioritaire pour devenir PRIMARY ), comme c'est le cas dans l'exemple à droiteci-contre.

Quel format de moteur

Moteur de stockage

est

utilisé sur chaque mongod

?

Sur chaque serveur ayant un mongod faite exécuter la commande suivante :

Code Block
languagetext
themeEmacs
mongo shinken --port PORT_DE_MONGOD --quiet --eval "print(db.serverStatus().storageEngine.name)"
Tip
Si le format est WiredTiger, il ne serra pas nécessaire de migrer ce nœud mongod

Terminal pour surveiller l'état du cluster

Dans un terminal, qui servira à

Préparer vous un fenêtre pour

surveiller l'état du cluster, lancer la commande suivante :

Code Block
languagetext
themeEmacs
watch -n 1 'mongo shinken --port PORT_DE_MONGOD --quiet --eval "printjson(rs.status())"'
Panel

Tip

Utiliser un PORT_DE_MONGOD d'un mongod sur lequel vous ne faite pas de migration Lancer la commande sur un nœud qui n'est pas en train d'effectuer la migration.

Le mieux est d'utiliser cette commande dans un shell terminal à par part toujours visible afin de :

  • Vérifier quand Suivre l'évolution de la migration est fini , la variable "stateStr" va passer dans les états suivants :  "STARTUP2" → "SECONDARY"/"PRIMARY".
  • Vérifier lors que lorsque l'on va couper le "PRIMARY" qu'un autre membre "SECONDARY" va est bien être élu  "PRIMARY"

Description des états du Cluster MongoDB : https://docs.mongodb.com/v3.0/reference/replica-states/

Procédure de migration

Migration des mongod SECONDARY

Les mongod secondaires doivent être migrés l'un après l'autre.

Éteindre mongod

Code Block
languagetext
themeEmacs
service mongod stop

Supprimer les données dans la base

Debian 13
Code Block
languagetext
themeEmacs
cdrm -fr /var/lib/mongodb/*
RHEL / CentOS 7 ou RHEL / Alma / Rocky 8
Code Block
languagetext
themeEmacs
mongo
rm -fr /var/lib/mongo/*

Modifier le type de moteur vers WiredTiger

Mettre dans le fichier  /etc/mongod.conf :

Code Block
languageymljs
themeConfluence
title/etc/mongod.confEmacs
storage:
     engine: wiredTiger
Démarré

Démarrer mongod

Code Block
languagetext
themeEmacs
service mongod start

Attendre la fin de la synchronisation avec le

PRIMARY

PRIMARY 
Anchor
synchronisation
synchronisation

Le mongod n'a plus de données.

donné à la suite de la migration. Le système de synchronisation du cluster va remettre les donnés données en place dans le membrenœud, comme lors que llorsqu'on ajoute un nouveau membre au cluster MongoDB.
Il faut donc est impératif d'attendre la re synchronisation resynchronisation des donnée données avant de continuer la suite de la migration.

La commande suivant vous suivante donne l'état de la réplication sur le mongod que nous avons migré toute les secondes.en cours de migration :

code
Code Block
languagetext
themeEmacs
watch -n 1 'mongo shinken --port PORT_DE_MONGOD --quiet --eval "printjson(db.printSlaveReplicationInfo())"'

Une fois que le mongod est synchroniser synchronisé ( "0 secs (0 hrs) behind the primary" ) alors vous pouvez passer aux autres , il est possible de passer à un autre nœud ( SECONDARY ou au PRIMARY)

Exemple de
résulta
résultat de la commande
précédente
de surveillance, une fois la synchronisation finie.
Panel

Migration

des

du mongod PRIMARY

La migration du mongod PRIMARY va provoquer un nouvelle l'élection d'un nouveau PRIMARY.

Durant le temps de l'élection, il ne sera pas possible d'écrire dans la base. Les manipulations suivant vont limité , les manipulations suivantes vont limiter le temps d'indisponibilité de la base à 3 secondes, mais il faudra redémarré le Synchronizer pour prendre en compte le changement de PRIMARY. Les autres démons se reconnecterons .

Les démons de Shinken se reconnecteront au changement de PRIMARY. 

Eteindre le Synchronizer ( Si besoin )

Excerpt IncludeParamètres globaux ( synchronizer.cfg )

Paramètres globaux ( synchronizer.cfg )pageDefaultLink[destination=Optional[PageResourceIdentifier[spaceKey=<null>,title=Paramètres globaux ( synchronizer.cfg )]],body=Optional.empty,tooltip=Optional.empty,anchor=Optional.empty,target=Optional.empty]nopaneltrue

Tip

Si aucun Synchronizer est utilisé par ce cluster MongoDB ne faite pas cette étape

Passer le PRIMARY en SECONDARY

Sur le nœud primaire, exécuter la commande suivante :

Code Block
languagetext
themeEmacs
mongo shinken --port PORT_DE_MONGOD --quiet --eval "rs.stepDown()"
Warning
titleImportant !

La commande vas va générer une erreur, c'est normal.

La nouvelle élection change le PRIMARY donc le shell mongo se reconnecte est déconnecté avec une erreur.

Image Modified


Warning
titleImportant !

La commande empêche l'élection de ce mongod en PRIMARY pour 60 secondes.

Au bous bout de ce temps, une nouvelle élection est proposée.

Il faut donc passer à enchaîner avec l'étape suivant suivante en moins de 60 secondes.

Tip

Le terminal, sur lequel la commande suivante a été précédemment lancée, permet de suivre l'élection du nouveau PRIMARY.

Code Block

Pensé à suivre les élections avec votre fenêtre qui à la commande 

Code Block
languagetext
themeEmacs
watch -n 1 'mongo shinken --port PORT_DE_MONGOD --quiet --eval "printjson(rs.status())"'

Éteindre mongod

Code Block
languagetext
themeEmacs
service mongod stop

Rallumer le Synchronizer après élection du nouveau PRIMARY( Si besoin )

Tip

A faire que si le Synchronizer a été coupé précédemment. 

Excerpt IncludeDéfinition du démon ( synchronizer-master.cfg )Définition du démon ( synchronizer-master.cfg )pageDefaultLink[destination=Optional[PageResourceIdentifier[spaceKey=<null>,title=Définition du démon ( synchronizer-master.cfg )]],body=Optional.empty,tooltip=Optional.empty,anchor=Optional.empty,target=Optional.empty]nopaneltrue

Supprimer les données dans la base

Debian 13
Code Block
languagetext
themeEmacs
rm -fr /var/lib/mongodb/*
RHEL / CentOS 7 ou RHEL / Alma / Rocky 8
Code Block
languagetext
themeEmacs
rm -fr
Tip

Pensé à suivre les élections avec votre fenêtre qui à la commande 

Code Block
themeEmacs
watch -n 1 'mongo shinken --port PORT_DE_MONGOD --quiet --eval "printjson(rs.status())"'

Supprimer les données dans la base

Code Block
themeEmacs
cd /var/lib/mongo
rm -fr /*

Modifier le type de moteur vers WiredTiger

Mettre dans le fichier fichier /etc/mongod.conf :

Code Block
languageymljs
themeConfluence
title/etc/mongod.confEmacs
storage:
     engine: wiredTiger

Eteindre le Synchronizer ( Si besoin )

Excerpt IncludeParamètres globaux ( synchronizer.cfg )Paramètres globaux ( synchronizer.cfg )pageDefaultLink[destination=Optional[PageResourceIdentifier[spaceKey=<null>,title=Paramètres globaux ( synchronizer.cfg )]],body=Optional.empty,tooltip=Optional.empty,anchor=Optional.empty,target=Optional.empty]nopaneltrue

Démarrer mongod


Code Block
languagetext
Tip

A faire uniquement si : 

Dans ces conditions le redémarrage de ce mongod va provoqué une nouvelle élection et le PRIMARY va changer, Il faut donc redémarre le Synchronizer.

Démarré mongod

code
themeEmacs
service mongod start

Rallumer le Synchronizer après élection du nouveau PRIMARY( Si besoin )

Tip

A faire que si le Synchronizer a été coupé précédemment. 

Excerpt IncludeDéfinition du démon ( synchronizer-master.cfg )Définition du démon ( synchronizer-master.cfg )pageDefaultLink[destination=Optional[PageResourceIdentifier[spaceKey=<null>,title=Définition du démon ( synchronizer-master.cfg )]],body=Optional.empty,tooltip=Optional.empty,anchor=Optional.empty,target=Optional.empty]nopaneltrue Tip

Pensé à suivre les élections avec votre fenêtre qui à la commande 

Code Block
themeEmacs
watch -n 1 'mongo shinken --port PORT_DE_MONGOD --quiet --eval "printjson(rs.status())"'

Attendre la fin de la synchronisation

Attendre la fin de la synchronisation comme indiqué dans la section Attendre la fin de la synchronisation avec le PRIMARY ci-dessus.