Il processo di replica ha esito negativo anche se si avvia scratch da un nuovo dbpath sul secondario, quindi è necessario apportare alcune modifiche all'oplog . La dimensione dell'oplog deve essere impostata su un valore ottimale in modo che sia in grado di gestire tutte le scritture dell'applicazione in esso.
Aumento della dimensione dell'oplog:
Arrestare il server primario
use admin
db.shutdownServer()
Inizia primario come standalone ed esegui su porta diversa diciamo 37017
Accedi a mongo nella porta 37017
mongo --port 37017
Rimuovere i vecchi contenuti nel database locale
Per motivi di sicurezza, fai una scorta di vecchi oplog prima di lasciarli cadere
mongodump --db local --collection 'oplog.rs' --port 37017
Rilascia i vecchi contenuti nel database locale
use local
db.oplog.rs.drop()
db.me.drop()
db.replset.election.drop()
db.replset.minvalid.drop()
db.startup_log.drop()
Non è possibile eliminare la raccolta di sostituzioni, quindi rimuoverla con l'id richiesto:
db.system.replset.remove({ "_id" : "your_replsetname"})
Crea un nuovo oplog delle dimensioni richieste, ad esempio 50 GB
db.runCommand( { create: "oplog.rs", capped: true, size: (50 * 1024 * 1024 * 1024) } )
Inoltre è possibile specificare la dimensione dell'oplog in MB nel file mongod.conf, ad esempio per 50 GB 429496 MB
replication:
oplogSizeMB: 429496
Spero che sia di aiuto !!!
Modificare:
Come menzionato da Nicholas Tolley Cottrell nei commenti. In MongoDB versione 3.6 possiamo modificare le dimensioni dell'oplog in fase di esecuzione senza riavvio.
Controlla le dimensioni oplog correnti
use local
db.oplog.rs.stats().maxSize
Per modificare la dimensione dell'oplog in 10 GB
db.adminCommand({replSetResizeOplog: 1, size: 10000})