Процес реплікації закінчується невдачею, навіть якщо ви починаєте скретч з нового dbpath на вторинному. Отже, справа в тому, щоб внести деякі зміни в oplog . Розмір oplog повинен бути встановлений на оптимальне значення, щоб воно могло обробляти всі записи програми в нього.
Збільшення розміру oplog:
Відключення основного сервера
use admin
db.shutdownServer()
Почніть основну, як самостійну, і запустіть на різних портах, скажімо, 37017
Вхід в Монго в порту 37017
mongo --port 37017
Видаліть старий вміст у локальній базі даних
В цілях безпеки перед тим, як викинути, занесіть баккоп старого оплога
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) } )
Також ви можете вказати розмір oplog у МБ у файлі mongod.conf, скажімо, для 50 Гб його 429496 Мб
replication:
oplogSizeMB: 429496
Сподіваюся, що це допомагає !!!
Редагувати:
Як згадував Ніколас Толлі Коттрелл у коментарях. У MongoDB версії 3.6 ми можемо змінювати розмір oplog під час виконання без перезавантаження.
Перевірте поточний розмір оплогу
use local
db.oplog.rs.stats().maxSize
Щоб змінити розмір oplog до 10 ГБ
db.adminCommand({replSetResizeOplog: 1, size: 10000})