Le processus de réplication échoue même si vous démarrez scratch à partir d'un nouveau dbpath sur le secondaire, le problème est donc de faire quelques changements dans l'oplog . La taille de l'oplog doit être définie sur une valeur optimale afin qu'il puisse gérer toutes les écritures d'application dans celui-ci.
Augmentation de la taille de l'oplog:
Arrêtez le serveur principal
use admin
db.shutdownServer()
Démarrez le primaire en mode autonome et exécutez-le sur un port différent, par exemple 37017
Connectez-vous à Mongo dans le port 37017
mongo --port 37017
Supprimer l'ancien contenu de la base de données locale
Pour plus de sécurité, sauvegardez l'ancien oplog avant de le supprimer
mongodump --db local --collection 'oplog.rs' --port 37017
Déposez l'ancien contenu dans la base de données locale
use local
db.oplog.rs.drop()
db.me.drop()
db.replset.election.drop()
db.replset.minvalid.drop()
db.startup_log.drop()
La collection de replset ne peut pas être supprimée, supprimez-la avec l'ID requis:
db.system.replset.remove({ "_id" : "your_replsetname"})
Créez un nouvel oplog de la taille requise, par exemple 50 Go
db.runCommand( { create: "oplog.rs", capped: true, size: (50 * 1024 * 1024 * 1024) } )
Vous pouvez également spécifier la taille de l'oplog en Mo dans le fichier mongod.conf, disons pour 50 Go ses 429496 Mo
replication:
oplogSizeMB: 429496
J'espère que cela t'aides !!!
Éditer:
Comme mentionné par Nicholas Tolley Cottrell dans les commentaires. Dans la version 3.6 de MongoDB , nous pouvons changer la taille d'oplog en runtime sans redémarrer.
Vérifier la taille actuelle de l'oplog
use local
db.oplog.rs.stats().maxSize
Pour modifier la taille de l'oplog à 10 Go
db.adminCommand({replSetResizeOplog: 1, size: 10000})