Процесс репликации завершается неудачно, даже если вы начинаете чистое копирование с нового dbpath на вторичном сервере . Поэтому нужно внести некоторые изменения в оплог . Размер оплога должен быть установлен на оптимальное значение, чтобы он мог обрабатывать все записи приложения в него.
Увеличение размера оплога:
Завершение работы основного сервера
use admin
db.shutdownServer()
Начните основной как автономный и запустите на другом порту, скажем, 37017
Вход в Монго в порт 37017
mongo --port 37017
Удалить старое содержимое в локальной базе данных
В целях безопасности сделайте backop старого оплога перед тем, как уронить
mongodump --db local --collection 'oplog.rs' --port 37017
Удалить старое содержимое в локальной базе данных
use local
db.oplog.rs.drop()
db.me.drop()
db.replset.election.drop()
db.replset.minvalid.drop()
db.startup_log.drop()
Коллекция Replset не может быть удалена, поэтому удалите ее с необходимым идентификатором:
db.system.replset.remove({ "_id" : "your_replsetname"})
Создайте новый оплог необходимого размера, скажем, 50 ГБ
db.runCommand( { create: "oplog.rs", capped: true, size: (50 * 1024 * 1024 * 1024) } )
Также вы можете указать размер оплога в МБ в файле mongod.conf, скажем, для 50 ГБ это 429496 МБ.
replication:
oplogSizeMB: 429496
Надеюсь это поможет !!!
Редактировать:
Как упомянул Николас Толи Коттрелл в комментариях. В версии 3.6 MongoDB мы можем изменять размер журнала во время выполнения без перезапуска.
Проверьте текущий размер оплога
use local
db.oplog.rs.stats().maxSize
Чтобы изменить размер оплога до 10 ГБ
db.adminCommand({replSetResizeOplog: 1, size: 10000})