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.
Login ke instance ECS. Lihat Hubungkan ke instance Linux menggunakan username dan password.
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.gzTemukan URL unduhan terbaru di halaman rilis MongoShake.
Ekstrak paket:
tar xvf <package-name>Contohnya:
tar xvf mongo-shake-2.0.7.tar.gzBuka file
collector.confuntuk diedit:vi collector.confKonfigurasikan string koneksi sumber dan tujuan serta parameter lain yang diperlukan. Untuk referensi lengkap semua parameter, lihat Parameter MongoShake. Atur
incr_sync.target_delayke nilai penundaan yang diinginkan dalam satuan detik. Contoh berikut menetapkan buffer selama 30 menit:incr_sync.target_delay = 1800Simpan dan tutup file
collector.conf.Jalankan MongoShake:
./collector.linux -conf=collector.conf -verbose 1MongoShake 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.
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.
Masukkan
ExitPointuntuk menghentikan MongoShake pada titik waktu tertentu, sebelum operasi salah diterapkan ke instans secondary:curl -X POST --data '{"ExitPoint": <unix-timestamp>}' <mongoshake-host>:<port>/sentinel/optionsContohnya:
curl -X POST --data '{"ExitPoint": 1593534600}' 127.0.0.1:9100/sentinel/optionsTimestamp
1593534600bersesuaian dengan pukul 16:30:00 pada 30 Juni 2020. MongoShake akan keluar secara otomatis ketika mencapai titik tersebut dalam oplog.Buka file
collector.confdan tukar alamat IP instans primary dan secondary sehingga instans secondary menjadi sumber sinkronisasi baru.Jalankan ulang MongoShake:
./collector.linux -conf=collector.conf -verbose=1Arahkan ulang string koneksi aplikasi Anda ke instans primary baru untuk menyelesaikan proses alih bencana.
Pantau status MongoShake
Untuk instruksi pemantauan, lihat Pantau status MongoShake.