
Halo, kalau kamu merasa tulisan saya ngebantu kamu, kamu bisa ucapkan terima kasih lewat saweria .
If you feel this website help you, you can donate at saweria .
Awalan
Beberapa kondisi saat menjalankan compact di replica set:
-
Replica set terdiri dari 3 server (replicaset1, replicaset2 dan replicaset3)
-
Server replicaset1 berperan sebagai primary. replicaset2 dan replicaset3 sebagai secondary
-
Compact dijalankan terlebih dahulu di secondary (replicaset2 & replicaset3), lalu
-
Demote replicaset1 sebagai secondary, promote replicaset2 sebagai primary
-
Jalankan compact di replicaset1
Catatan
-
Waktu
compact
bervariasi, tergantung dari collection size dan spek server -
Amankah menjalankan
compact
di primary? Saya belum pernah, saya lebih pilih melakukan cara di atas
Run compact di MongoDB Replica Set Production

Ada Pesan compact
Bakal Bikin Slow Operation
Do with your own risk!!!
-
Pertama jalankan
compact
di secondaryuse testDbName; #compact all collection db.getCollectionNames().forEach(function (collectionName) { print('Compacting: ' + collectionName); db.runCommand({ compact: collectionName }); }); #compact only one collection db.runCommand({ compact: collectionName }); #jika ada warning rs.secondaryOk(); use testDbName; #compact all collection db.getCollectionNames().forEach(function (collectionName) { print('Compacting: ' + collectionName); db.runCommand({ compact: collectionName }); });
-
Setelah selesai jalankan di secondary, kita akan demote replicaset1 sebagai secondary, promote replicaset2 sebagai primary
a. Masuk ke replicaset3, cegah server ini menjadi primary dengan cara
rs.freeze(120)
b. Masuk ke replicaset1, demote ke secondary dengan cara
rs.stepDown(120)
c. Cek dengan
rs.status()
, harusnya replicaset2 yang menjadi primary sekarang -
Jalankan
compact
di replicaset3
Referensi: