All Products
Search
Document Center

ApsaraDB for MongoDB:Gunakan MongoShake untuk menerapkan sinkronisasi tertunda di antara instans ApsaraDB for MongoDB

Last Updated:Jul 21, 2026

Sinkronisasi real-time dengan MongoShake menyebabkan operasi salah pada instans primary—seperti penghapusan koleksi secara tidak sengaja atau penulisan data rusak—langsung direplikasi ke instans secondary dalam hitungan detik, sehingga tidak memberikan waktu untuk bereaksi. Parameter incr_sync.target_delay pada MongoShake 2.4.6 dan versi lebih baru memperkenalkan penundaan tetap antara instans primary dan target sinkronisasinya, memberikan jendela waktu bagi Anda untuk mendeteksi masalah, menghentikan sinkronisasi, dan mengalihkan traffic ke instans secondary yang bersih sebelum data buruk tiba.

Topik ini membahas parameter incr_sync.target_delay. Untuk pengaturan umum MongoShake, lihat Gunakan MongoShake untuk melakukan sinkronisasi satu arah antara instans ApsaraDB for MongoDB.

Prasyarat

Sebelum memulai, pastikan Anda telah memiliki:

  • MongoShake 2.4.6 atau versi lebih baru. Unduh dari halaman rilis MongoShake.

  • Instans set replika ApsaraDB for MongoDB sebagai sumber dalam virtual private cloud (VPC). Jika instans berada di jaringan klasik, alihkan ke VPC terlebih dahulu.

  • Instans set replika ApsaraDB for MongoDB sebagai tujuan dalam VPC yang sama dengan sumber, untuk meminimalkan latensi jaringan. Lihat Buat instans set replika.

  • Instance Elastic Compute Service (ECS) dalam VPC yang sama untuk menjalankan MongoShake, guna meminimalkan latensi jaringan. Lihat Buat instance ECS.

  • Alamat IP pribadi instance ECS ditambahkan ke daftar putih kedua instans (sumber dan tujuan), agar MongoShake dapat terhubung ke keduanya. Lihat Konfigurasi daftar putih.

Jika konfigurasi jaringan Anda tidak memenuhi persyaratan VPC, ajukan titik akhir publik untuk kedua instans tersebut dan tambahkan alamat IP publik instance ECS ke daftar putih mereka. Lihat Ajukan titik akhir publik dan Konfigurasi daftar putih.

Cara kerja

Secara default, MongoShake mengikuti oplog instans primary dan menerapkan perubahan ke instans secondary hampir secara real-time. Artinya, operasi salah akan langsung menyebar ke instans secondary.

Dengan mengatur parameter incr_sync.target_delay, MongoShake akan menahan perubahan selama jumlah detik yang ditentukan sebelum menerapkannya. Misalnya, dengan penundaan 1.800 detik (30 menit): jika waktu saat ini pukul 10:00, instans secondary mencerminkan data hingga pukul 09:30. Jika Anda mendeteksi operasi salah sebelum data pukul 09:30 diterapkan, Anda dapat menghentikan sinkronisasi dan mengalihkan traffic ke instans secondary sebelum data buruk tiba.

Konfigurasi sinkronisasi tertunda

Langkah-langkah berikut menggunakan instance ECS Ubuntu sebagai host MongoShake.

  1. Login ke instance ECS. Lihat Hubungkan ke instance Linux menggunakan username dan password.

  2. Unduh paket MongoShake:

    wget <download-url>

    Contohnya:

    wget https://github.com/alibaba/MongoShake/releases/download/release-v2.0.7-20190817/mongo-shake-2.0.7.tar.gz

    Temukan URL unduhan terbaru di halaman rilis MongoShake.

  3. Ekstrak paket:

    tar xvf <package-name>

    Contohnya:

    tar xvf mongo-shake-2.0.7.tar.gz
  4. Buka file collector.conf untuk diedit:

    vi collector.conf

    Konfigurasikan string koneksi sumber dan tujuan serta parameter lain yang diperlukan. Untuk referensi lengkap semua parameter, lihat Parameter MongoShake. Atur incr_sync.target_delay ke nilai penundaan yang diinginkan dalam satuan detik. Contoh berikut menetapkan buffer selama 30 menit:

    incr_sync.target_delay = 1800
  5. Simpan dan tutup file collector.conf.

  6. Jalankan MongoShake:

    ./collector.linux -conf=collector.conf -verbose 1

    MongoShake kini menerapkan perubahan ke instans secondary 30 menit setelah perubahan tersebut terjadi di instans primary.

Pemulihan dari operasi salah

Saat operasi salah terdeteksi pada instans primary—misalnya, penulisan data tidak sengaja atau penghapusan koleksi—ikuti langkah-langkah berikut untuk menghentikan sinkronisasi sebelum data buruk mencapai instans secondary, lalu alihkan traffic ke instans secondary yang masih bersih.

  1. Lakukan kueri terhadap oplog instans primary untuk mengidentifikasi kapan operasi salah terjadi. Contoh berikut mengambil semua entri oplog antara 1 Juni dan 2 Juni 2020:

    use local  // Beralih ke database local
    db.oplog.rs.find({"o.createTime": {$gte: new Date(2020,6,1), $lte: new Date(2020,6,2)}})

    Untuk sintaksis lengkap kueri oplog, lihat dokumentasi MongoDB.

  2. Masukkan ExitPoint untuk menghentikan MongoShake pada titik waktu tertentu, sebelum operasi salah diterapkan ke instans secondary:

    curl -X POST --data '{"ExitPoint": <unix-timestamp>}' <mongoshake-host>:<port>/sentinel/options

    Contohnya:

    curl -X POST --data '{"ExitPoint": 1593534600}' 127.0.0.1:9100/sentinel/options

    Timestamp 1593534600 bersesuaian dengan pukul 16:30:00 pada 30 Juni 2020. MongoShake akan keluar secara otomatis ketika mencapai titik tersebut dalam oplog.

  3. Buka file collector.conf dan tukar alamat IP instans primary dan secondary sehingga instans secondary menjadi sumber sinkronisasi baru.

  4. Jalankan ulang MongoShake:

    ./collector.linux -conf=collector.conf -verbose=1
  5. Arahkan ulang string koneksi aplikasi Anda ke instans primary baru untuk menyelesaikan proses alih bencana.

Pantau status MongoShake

Untuk instruksi pemantauan, lihat Pantau status MongoShake.