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:

  1. Replica set terdiri dari 3 server (replicaset1, replicaset2 dan replicaset3)

  2. Server replicaset1 berperan sebagai primary. replicaset2 dan replicaset3 sebagai secondary

  3. Compact dijalankan terlebih dahulu di secondary (replicaset2 & replicaset3), lalu

  4. Demote replicaset1 sebagai secondary, promote replicaset2 sebagai primary

  5. Jalankan compact di replicaset1

Catatan

  1. Waktu compact bervariasi, tergantung dari collection size dan spek server

  2. 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

Ada Pesan compact Bakal Bikin Slow Operation

Do with your own risk!!!

  1. Pertama jalankan compact di secondary

    use 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 });
    });
    
  2. 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

  3. Jalankan compact di replicaset3


Referensi:

  1. MongoDB Manual - Force a Member to Become Primary