Kami telah membuat set replika dan sekarang masalahnya adalah 2 anggota set replika [3 set anggota] dalam mode pemulihan dari 48 jam. Awalnya ukuran memulihkan node meningkat dan sekarang bahkan sudah berhenti. Jadi dalam memulihkan node, mereka terjebak setelah 90 GB data dengan 60+ GB data lokal.
Ini agak tidak aman karena tidak diketahui mengapa secondaries memasuki kondisi Sembuh.
Cara yang lebih aman, tetapi juga lebih mengganggu
Seperti di atas, tetapi hentikan aplikasi Anda selama proses. Ini mencegah kemungkinan aplikasi Anda memasukkan lebih banyak data daripada yang dapat ditiru oleh sekunder. Namun, masalah dapat terjadi selama produksi.
Cara yang paling aman, tetapi juga yang paling mengganggu
Matikan seluruh set replika
Hapus konten dbpathpada kedua sekunder
Salin konten dbpathke kedua menengahdbpath
Mulai primer lama.
Mulai salah satu dari sekretaris lama.
Tunggu hingga primer baru terpilih.
Mulai sekunder yang tersisa.
Beberapa catatan:
Gunakan MMS . Ini gratis, mudah diatur dan memberi Anda informasi yang baik tentang set replika Anda. Cobalah untuk menjaga nilai untuk "lag replikasi" sekitar 0, dan ambil semua cara yang diperlukan agar lag replikasi Anda tidak pernah lebih besar dari "jendela oplog replikasi".
Selalu pastikan Anda memiliki jaringan 1Gb dan beban RAM (maaf). Lebih banyak lebih baik. Aturan tambahan: bukan setengah dari RAM dan SSD dari dua kali lipat RAM dan tidak ada SSD (dengan RAM yang tersisa dalam batas wajar).
Penafian: Selalu buat cadangan data produksi sebelum mengutak-atiknya.
Sampai sekarang kami tidak memiliki simpul sekunder dalam set replika. Satu dalam mode PRIMARY dan dua lainnya dalam mode RECOVERING.
Avinash Sahu
1
Sekunder logis, lalu. Prosesnya sama.
Markus W Mahlberg
Saya telah mencoba berkali-kali memulai instance Mongo dan melakukan sinkronisasi ulang, setiap kali ia mulai menyalin data ke node lain hingga ukuran tetap (~ 96gb) dan kemudian macet. Apakah ukuran oplog harus melakukan sesuatu dengannya?
Avinash Sahu
1
Tidak juga, kecuali fakta bahwa sinkronisasi ulang mungkin berhenti ketika Anda memasukkan lebih banyak data daripada yang bisa disimpan oleh oplog selama penyinkronan awal. Ambil opsi 2 atau 3 dalam hal ini.
Markus W Mahlberg
1
Bisakah Anda jelaskan sedikit lebih jauh? "Lebih dari setengah RAM dan SSD daripada dua kali lipat RAM dan tidak ada SSD (dengan RAM yang tersisa dalam batas wajar)."
Stephen Nguyen
1
Proses replikasi gagal bahkan jika Anda mulai menggaruk dari dbpath baru di sekunder. Jadi masalahnya adalah membuat beberapa perubahan dalam oplog . Ukuran oplog harus diatur ke nilai optimal sehingga harus dapat menangani semua aplikasi menulis ke dalamnya.
Meningkatkan ukuran oplog:
Matikan server utama
use admin
db.shutdownServer()
Mulai primer sebagai mandiri & jalankan di port yang berbeda katakan 37017
Masuk ke mongo di port 37017
mongo --port 37017
Hapus konten lama di basis data lokal
Untuk keamanan, miliki backop oplog lama sebelum dijatuhkan
mongodump --db local --collection 'oplog.rs' --port 37017
Letakkan konten lama di basis data lokal
use local
db.oplog.rs.drop()
db.me.drop()
db.replset.election.drop()
db.replset.minvalid.drop()
db.startup_log.drop()
Pengumpulan ulang koleksi tidak dapat dibatalkan, jadi hapus dengan id yang diperlukan:
Anda juga dapat menentukan ukuran oplog dalam MB di file mongod.conf, katakanlah 50 GB-nya 429496 MB
replication:
oplogSizeMB:429496
Semoga ini membantu !!!
Edit:
Seperti yang disebutkan oleh Nicholas Tolley Cottrell dalam komentar. Dalam MongoDB versi 3.6 kita dapat mengubah ukuran oplog dalam runtime tanpa restart.
Proses replikasi gagal bahkan jika Anda mulai menggaruk dari dbpath baru di sekunder. Jadi masalahnya adalah membuat beberapa perubahan dalam oplog . Ukuran oplog harus diatur ke nilai optimal sehingga harus dapat menangani semua aplikasi menulis ke dalamnya.
Meningkatkan ukuran oplog:
Matikan server utama
Mulai primer sebagai mandiri & jalankan di port yang berbeda katakan 37017
Masuk ke mongo di port 37017
Hapus konten lama di basis data lokal
Untuk keamanan, miliki backop oplog lama sebelum dijatuhkan
Letakkan konten lama di basis data lokal
Pengumpulan ulang koleksi tidak dapat dibatalkan, jadi hapus dengan id yang diperlukan:
Buat oplog baru dengan ukuran yang diperlukan, ucapkan 50 GB
Anda juga dapat menentukan ukuran oplog dalam MB di file mongod.conf, katakanlah 50 GB-nya 429496 MB
Semoga ini membantu !!!
Edit:
Seperti yang disebutkan oleh Nicholas Tolley Cottrell dalam komentar. Dalam MongoDB versi 3.6 kita dapat mengubah ukuran oplog dalam runtime tanpa restart.
Periksa ukuran oplog saat ini
Untuk mengubah ukuran oplog menjadi 10 GB
sumber