MongoShake adalah alat open-source Platform as a Service (PaaS) yang dikembangkan oleh Alibaba Cloud menggunakan Go. Alat ini membaca oplog dari instans MongoDB sumber dan memainkannya ulang di tujuan, sehingga memungkinkan sinkronisasi satu arah berkelanjutan untuk analitik data, pemulihan bencana, dan skenario aktif-aktif.
Selain replikasi langsung, MongoShake mendukung langganan dan konsumsi log melalui SDK, Kafka, dan MetaQ — menjadikannya cocok untuk langganan log, sinkronisasi pusat data, dan penghapusan cache secara asinkron.
Untuk informasi lebih lanjut, lihat repositori GitHub MongoShake.
Topologi yang didukung
Source | Destination |
Self-managed MongoDB pada Instance ECS | Self-managed MongoDB pada Instance ECS |
Self-managed MongoDB on-premises | Self-managed MongoDB on-premises |
ApsaraDB for MongoDB instance | ApsaraDB for MongoDB instance |
Third-party cloud MongoDB | Third-party cloud MongoDB |
Catatan penggunaan
Jangan lakukan operasi Data Definition Language (DDL) pada database sumber sebelum sinkronisasi penuh selesai. Ketidakkonsistenan data dapat terjadi.
Database local tidak dapat disinkronkan. Database admin dapat disinkronkan — lihat Migrasi data bisnis dari database admin.
Password dalam URI string koneksi tidak boleh mengandung
@. Jika password Anda mengandung@, koneksi akan gagal.Sinkronisasi DDL tidak didukung ketika sumbernya adalah instansi kluster sharded.
Izin yang diperlukan
Role | Required permissions |
Instans MongoDB sumber |
|
Instans MongoDB tujuan |
|
MongoShake secara otomatis membuat database mongoshake pada instans sumber saat sinkronisasi inkremental dimulai.
Untuk mengelola pengguna database MongoDB, lihat Gunakan DMS untuk mengelola pengguna database MongoDB atau perintah db.createUser.
Prasyarat
Sebelum memulai, pastikan Anda telah:
Memiliki instans ApsaraDB for MongoDB set replika sumber yang menggunakan virtual private cloud (VPC). Jika menggunakan jaringan klasik, ubah ke VPC terlebih dahulu.
Memiliki instans ApsaraDB for MongoDB set replika tujuan dalam VPC yang sama dengan sumber, untuk meminimalkan latensi jaringan. Lihat Buat instans set replika.
Memiliki Instance ECS dalam VPC yang sama dengan instans MongoDB sumber, untuk menjalankan MongoShake. Lihat Buat Instance ECS.
Alamat IP pribadi Instance ECS telah ditambahkan ke daftar putih kedua instans MongoDB (sumber dan tujuan). Lihat Ubah daftar putih.
Jika jaringan Anda tidak memenuhi persyaratan ini, ajukan titik akhir publik pada kedua instans MongoDB, lalu tambahkan alamat IP publik Instance ECS ke daftar putih keduanya. Lihat Ajukan titik akhir publik dan Ubah daftar putih.
Siapkan sinkronisasi satu arah
Prosedur ini menginstal MongoShake di direktori /test/mongoshake.
Login ke Instance ECS. Untuk metode login yang tersedia, lihat Ikhtisar metode login untuk server ECS.
Unduh MongoShake dan ubah nama arsipnya:
Tautan ini mengunduh MongoShake 2.8.7. Untuk versi terbaru, lihat halaman rilis.
wget "https://github.com/alibaba/MongoShake/releases/download/release-v2.8.7-20251218/mongo-shake-v2.8.7.tgz" -O mongoshake.tar.gzEkstrak arsip dan pindahkan ke direktori instalasi:
tar zxvf mongoshake.tar.gz && mv mongo-shake-v2.8.7 /test/mongoshake && cd /test/mongoshakeKonfigurasikan string koneksi dan mode sinkronisasi. Buka
collector.conf:Parameter
Description
Example
mongo_urlsURI string koneksi instans MongoDB sumber. Gunakan titik akhir VPC untuk meminimalkan latensi. Password tidak boleh mengandung
@. Untuk format URI, lihat Deskripsi koneksi untuk instans set replika.mongo_urls = mongodb://test:**@dds-bp19f409d7512.mongodb.rds.aliyuncs.com:3717,dds-bp19f409d7512**.mongodb.rds.aliyuncs.com:3717tunnel.addressURI string koneksi instans MongoDB tujuan. Gunakan titik akhir VPC untuk meminimalkan latensi. Password tidak boleh mengandung
@. Untuk format URI, lihat Deskripsi koneksi untuk instans set replika.tunnel.address = mongodb://test:**@dds-bp19f409d7512.mongodb.rds.aliyuncs.com:3717,dds-bp19f409d7512**.mongodb.rds.aliyuncs.com:3717sync_modeCakupan sinkronisasi.
allmenjalankan sinkronisasi penuh lalu inkremental;fullhanya menjalankan sinkronisasi penuh;incrhanya menjalankan sinkronisasi inkremental. Default:incr.sync_mode = allvi collector.confSetidaknya atur parameter berikut. Untuk semua parameter yang tersedia, lihat Referensi konfigurasi.
Jalankan tugas sinkronisasi:
./collector.linux -conf=collector.conf -verbosePantau output log. Saat sinkronisasi penuh selesai dan sinkronisasi inkremental dimulai, Anda akan melihat baris seperti berikut:
[09:38:57 CST 2019/06/20] [INFO] (mongoshake/collector.(*ReplicationCoordinator).Run:80) finish full sync, start incr sync with timestamp: fullBeginTs[1560994443], fullFinishTs[1560994737]Sinyal utama adalah
finish full sync, start incr sync. Setelah baris ini muncul, jangan lakukan operasi DDL pada sumber — lihat Catatan penggunaan.
Monitor status sinkronisasi
Setelah sinkronisasi inkremental dimulai, buka terminal baru dan jalankan:
cd /test/mongoshake && ./mongoshake-stat --port=9100mongoshake-stat adalah skrip Python. Instal Python 2.7 sebelum menjalankannya. Lihat situs resmi Python.Contoh output:

Parameter | Description |
| Jumlah oplog yang diambil per detik |
| Jumlah operasi replay oplog per detik |
| Jumlah operasi replay oplog yang berhasil per detik |
| Timestamp oplog terakhir yang dikirim |
| Timestamp saat tujuan mengonfirmasi penulisan |
| Timestamp saat checkpoint dipersist |
| Waktu saat ini |
| Nama set replika sumber |
Migrasi data bisnis dari database admin
MongoDB tidak merekomendasikan menyimpan data bisnis di database admin, karena perilaku locking dan konflik dengan perintah internal dapat menurunkan performa.
MongoShake dapat menyinkronkan data dari database admin ke database non-admin. Ikuti prosedur di atas dan tambahkan konfigurasi berikut ke collector.conf pada langkah 4:
filter.pass.special.db = admin
# Migrasi semua koleksi dari database admin ke newDB
transform.namespace = admin:newDB
# Atau, migrasi koleksi tertentu
# (Anda dapat mengonfigurasi beberapa aturan)
transform.namespace = admin.abc:target.defReferensi konfigurasi
Tabel 1. Parameter collector.conf
Category | Parameter | Description | Example |
— |
| Nomor versi file konfigurasi. Jangan ubah. |
|
Global |
| ID tugas sinkronisasi. Digunakan untuk nama log, nama database checkpoint, dan nama database tujuan. |
|
| Opsi high availability. Atur ke |
| |
| Port HTTP untuk melihat status sinkronisasi penuh. Default: |
| |
| Port HTTP untuk melihat status sinkronisasi inkremental. Default: |
| |
| Port profiling untuk melihat informasi stack internal. |
| |
| Tingkat log. Nilai yang valid: |
| |
| Direktori untuk file log dan PID. Harus berupa jalur mutlak. Default ke direktori |
| |
| Nama file log. Default: |
| |
| Laju refresh log. |
| |
| Cakupan sinkronisasi. |
| |
| URI string koneksi instans MongoDB sumber. Gunakan titik akhir VPC untuk meminimalkan latensi. Untuk format URI, lihat Deskripsi koneksi untuk instans set replika atau Deskripsi koneksi untuk instans kluster sharded. |
| |
| Titik akhir Configserver, diperlukan ketika sumbernya adalah instansi kluster sharded. Lihat Ajukan titik akhir untuk shard. |
| |
| Titik akhir Mongos, diperlukan ketika sumbernya adalah instansi kluster sharded. Pisahkan beberapa alamat dengan koma. Lihat Ajukan titik akhir untuk shard. |
| |
| Jenis saluran untuk sinkronisasi. |
| |
| Titik akhir tujuan. Format tergantung pada nilai |
| |
| Format data dalam saluran. Hanya berlaku ketika |
| |
| Mode koneksi. Hanya berlaku ketika |
| |
| Namespace yang dikecualikan dari sinkronisasi. Pisahkan beberapa nilai dengan titik koma ( |
| |
| Namespace yang disertakan dalam sinkronisasi. Hanya namespace yang tercantum yang akan disinkronkan. Pisahkan beberapa nilai dengan titik koma ( |
| |
| Database yang disertakan meskipun biasanya difilter (seperti admin, local, mongoshake, config, dan system.views). Pisahkan beberapa nilai dengan titik koma ( |
| |
| Aktifkan sinkronisasi DDL. Tidak didukung ketika sumbernya adalah instansi kluster sharded. Default: |
| |
| Alamat penyimpanan checkpoint untuk transmisi yang dapat dilanjutkan. Jika tidak diatur, MongoShake menulis ke database mongoshake (sumber set replika) atau database admin pada node Configserver (sumber kluster sharded). |
| |
| Nama database untuk menyimpan checkpoint. Default: |
| |
| Nama koleksi untuk menyimpan checkpoint. Ubah ini ketika dua node MongoShake melakukan sinkronisasi dari sumber yang sama, untuk mencegah konflik nama. Default: |
| |
| Posisi awal untuk transmisi yang dapat dilanjutkan. Diabaikan jika checkpoint sudah ada. Format: |
| |
| Mengganti nama database atau koleksi sumber sebelum ditulis ke tujuan. Misalnya, |
| |
Full sync |
| Jumlah maksimum koleksi yang ditarik secara konkuren. |
|
| Jumlah thread penulisan konkuren per koleksi. |
| |
| Jumlah dokumen yang diagregasi per batch penulisan. |
| |
| Tindakan ketika koleksi tujuan memiliki nama yang sama dengan koleksi sumber. |
| |
| Pembuatan indeks setelah sinkronisasi. |
| |
| Konversi |
| |
| Filter dokumen yatim ketika sumbernya adalah instansi kluster sharded. Default: |
| |
| Aktifkan penulisan mayoritas di tujuan. Default: |
| |
Incremental sync |
| Metode untuk menarik data inkremental. |
|
| Digunakan untuk mengatur replikasi dua arah untuk kluster cloud. |
| |
| Metode konkurensi internal. Jangan ubah. |
| |
| Jumlah thread konkuren untuk mentransmisikan oplog. Jika sumbernya adalah instansi kluster sharded, nilai ini harus sama dengan jumlah shard. |
| |
| Kompresi data untuk mengurangi konsumsi bandwidth. |
| |
| Penundaan dalam detik sebelum perubahan diterapkan ke tujuan. Atur ke nilai bukan nol untuk mencegah operasi tidak disengaja — misalnya, |
| |
| Konfigurasi antrian internal. Jangan ubah kecuali diperlukan. |
| |
|
| ||
|
| ||
MongoDB ( |
| Konversi |
|
| Konversi |
| |
| Catat dokumen yang konflik ketika terjadi konflik penulisan. |
| |
| Aktifkan penulisan mayoritas di tujuan. Mengaktifkan ini memengaruhi performa. Default: |
|
FAQ
Periksa terlebih dahulu FAQ MongoShake di GitHub. Untuk masalah yang tidak tercakup di sana, laporkan di GitHub Issues.