| Scroll Ignore | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||
|
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 | ||
|---|---|---|
| ||
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 | ||
|---|---|---|
| ||
Attention, il se peut que votre installation ait l'infrastructure à migrer peut comporter des différences. |
| Panel |
|---|
| Panel |
|---|
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
Avant de démarrer la procédure, faire un inventaire des serveurs à migrer avec la commande suivante :
| Code Block | ||
|---|---|---|
|
Depuis le document qui décrit votre infrastructure lister les serveurs que vous voulez migrer.
| |||
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. |
Moteur de stockage
estutilisé sur chaque mongod
?Sur chaque serveur ayant un mongod faite exécuter la commande suivante :
| Code Block | ||||
|---|---|---|---|---|
| ||||
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 poursurveiller l'état du cluster, lancer la commande suivante :
| Code Block | ||||
|---|---|---|---|---|
| ||||
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 :
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 | ||||
|---|---|---|---|---|
| ||||
service mongod stop |
Supprimer les données dans la base
Debian 13
| Code Block | ||||
|---|---|---|---|---|
| ||||
cdrm -fr /var/lib/mongodb/* |
RHEL / CentOS 7 ou RHEL / Alma / Rocky 8
| Code Block | ||||
|---|---|---|---|---|
| ||||
mongo rm -fr /var/lib/mongo/* |
Modifier le type de moteur vers WiredTiger
Mettre dans le fichier /etc/mongod.conf :
| Code Block | ||||||
|---|---|---|---|---|---|---|
| ||||||
storage:
engine: wiredTiger |
Démarrer mongod
| Code Block | ||||
|---|---|---|---|---|
| ||||
service mongod start |
Attendre la fin de la synchronisation avec le
PRIMARYPRIMARY
| Anchor | ||||
|---|---|---|---|---|
|
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 Block | |||
|---|---|---|---|
| |||
| |||
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ésultarésultat de la commande
précédentede surveillance, une fois la synchronisation finie.
| Panel |
|---|
Migration
desdu 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 )
| 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 | ||||
|---|---|---|---|---|
| ||||
mongo shinken --port PORT_DE_MONGOD --quiet --eval "rs.stepDown()" |
| Warning | ||
|---|---|---|
| ||
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. |
| Warning | ||
|---|---|---|
| ||
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.
Pensé à suivre les élections avec votre fenêtre qui à la commande
|
Éteindre mongod
| Code Block | ||||
|---|---|---|---|---|
| ||||
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. |
Supprimer les données dans la base
Debian 13
| Code Block | ||||
|---|---|---|---|---|
| ||||
rm -fr /var/lib/mongodb/* |
RHEL / CentOS 7 ou RHEL / Alma / Rocky 8
| Code Block | ||||
|---|---|---|---|---|
| ||||
rm -fr |
| Tip | |||||
|---|---|---|---|---|---|
Pensé à suivre les élections avec votre fenêtre qui à la commande
|
Supprimer les données dans la base
| Code Block | ||
|---|---|---|
| ||
cd /var/lib/mongo rm -fr /* |
Modifier le type de moteur vers WiredTiger
Mettre dans le fichier fichier /etc/mongod.conf :
| Code Block | ||||||
|---|---|---|---|---|---|---|
| ||||||
storage:
engine: wiredTiger |
Eteindre le Synchronizer ( Si besoin )
Démarrer mongod
| Code Block | ||
|---|---|---|
|
| 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
| |||
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. |
Pensé à suivre les élections avec votre fenêtre qui à la commande
| theme | Emacs |
|---|
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.





