Anda dapat menggunakan MongoShake, alat open source yang dikembangkan oleh Alibaba Cloud, untuk menyinkronkan data antar database MongoDB. Fitur ini cocok untuk analitik data, pemulihan bencana, dan skenario aktif-aktif. Topik ini menjelaskan prosedur konfigurasi dengan contoh sinkronisasi data real-time antara instans ApsaraDB for MongoDB.
Ikhtisar MongoShake
MongoShake adalah alat Platform sebagai Layanan (PaaS) serbaguna yang dikembangkan oleh Alibaba Cloud dalam bahasa Go. Alat ini membaca Log operasi (oplogs) dari database MongoDB untuk mereplikasi data guna berbagai keperluan.
MongoShake juga menyediakan fitur untuk Berlangganan dan mengonsumsi data log. Anda dapat terhubung dengannya menggunakan berbagai metode, seperti SDK, Kafka, dan MetaQ. Hal ini membuatnya cocok untuk skenario seperti langganan log, sinkronisasi Pusat data, dan penghapusan cache asinkron.
Untuk informasi lebih lanjut tentang MongoShake, lihat halaman utama MongoShake di GitHub.
Sumber data yang didukung
Database Sumber | Database Tujuan |
Database MongoDB yang dikelola sendiri pada instance ECS | Database MongoDB yang dikelola sendiri pada instance ECS |
Database MongoDB yang dikelola sendiri di lokasi lokal | Database MongoDB yang dikelola sendiri di lokasi lokal |
Instans ApsaraDB untuk MongoDB | Instans ApsaraDB untuk MongoDB |
Database MongoDB cloud pihak ketiga | Database MongoDB cloud pihak ketiga |
Catatan penggunaan
Jangan melakukan operasi Data Definition Language (DDL) pada database sumber sebelum sinkronisasi data penuh selesai. Jika tidak, dapat terjadi ketidaksesuaian data.
Database lokal tidak dapat disinkronkan. Database admin dapat disinkronkan. Untuk informasi lebih lanjut, lihat Migrasikan Data Bisnis dari Database Admin ke Database Non-Admin.
Izin yang diperlukan untuk pengguna database
Sumber data | Izin yang diperlukan |
Instans MongoDB sumber | Izin readAnyDatabase, izin read pada database lokal, dan izin readWrite pada database mongoshake. Catatan Database mongoshake secara otomatis dibuat oleh program MongoShake di instans sumber ketika sinkronisasi inkremental dimulai. |
Instans MongoDB tujuan | Izin readWriteAnyDatabase atau izin readWrite pada database tujuan. |
Untuk informasi lebih lanjut tentang cara membuat dan memberikan izin kepada pengguna database MongoDB, lihat Gunakan DMS untuk Mengelola Pengguna Database MongoDB atau perintah db.createUser.
Persiapan
Untuk performa sinkronisasi optimal, pastikan instans set replika ApsaraDB for MongoDB sumber menggunakan virtual private cloud (VPC). Jika instans menggunakan jaringan klasik, ubah jenis jaringannya menjadi VPC. Untuk informasi lebih lanjut, lihat Ubah Jenis Jaringan Instans dari Jaringan Klasik ke VPC.
Buat instans set replika ApsaraDB for MongoDB sebagai tujuan sinkronisasi. Saat membuat instans, pilih VPC yang sama dengan instans set replika ApsaraDB for MongoDB sumber untuk meminimalkan latensi jaringan. Untuk informasi lebih lanjut, lihat Buat Instans Set Replika.
Buat instans ECS untuk menjalankan MongoShake. Saat membuat instans, pilih VPC yang sama dengan instans ApsaraDB for MongoDB sumber untuk meminimalkan latensi jaringan. Untuk informasi lebih lanjut, lihat Buat Instans ECS.
Tambahkan alamat IP pribadi instans ECS ke daftar putih instans MongoDB sumber dan tujuan. Pastikan bahwa instans ECS dapat terhubung ke instans MongoDB sumber dan tujuan. Untuk informasi lebih lanjut, lihat Ubah Daftar Putih.
Jika jenis jaringan Anda tidak memenuhi persyaratan sebelumnya, Anda dapat mengajukan titik akhir publik untuk instans MongoDB sumber dan tujuan. Kemudian, tambahkan alamat IP publik instans ECS ke daftar putih instans sumber dan tujuan. Ini memungkinkan Anda menyinkronkan data melalui Internet. Untuk informasi lebih lanjut, lihat Ajukan Titik Akhir Publik dan Ubah Daftar Putih.
Prosedur
Dalam contoh ini, MongoShake diinstal secara default di direktori /test/mongoshake.
Masuk ke server ECS.
CatatanPilih metode login berdasarkan skenario bisnis Anda. Untuk informasi lebih lanjut, lihat Ikhtisar Metode Login untuk Server ECS.
Jalankan perintah berikut untuk mengunduh program MongoShake dan mengganti namanya menjadi
mongoshake.tar.gz.wget "http://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/attach/196977/jp_ja/1608863913991/mongo-shake-v2.4.16.tar.gz" -O mongoshake.tar.gzCatatanTopik ini menyediakan tautan untuk mengunduh MongoShake 2.4.16. Untuk mengunduh versi terbaru MongoShake, lihat halaman rilis.
Jalankan perintah berikut untuk mengekstrak paket MongoShake ke direktori /test/mongoshake.
tar zxvf mongoshake.tar.gz && mv mongo-shake-v2.4.16 /test/mongoshake && cd /test/mongoshake/mongo-shake-v2.4.16Jalankan perintah
vi collector.confuntuk memodifikasi file konfigurasi collector.conf dari MongoShake. Tabel berikut menjelaskan parameter utama.Parameter
Deskripsi
Contoh
mongo_urls
String koneksi URI dari instans MongoDB sumber. Dalam contoh ini, akun database adalah test dan termasuk dalam database admin.
CatatanGunakan titik akhir VPC untuk interkoneksi guna meminimalkan latensi jaringan.
Untuk informasi lebih lanjut tentang format string koneksi 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:3717CatatanKata sandi tidak boleh mengandung tanda at (@). Jika tidak, koneksi akan gagal.
tunnel.address
String koneksi URI dari instans MongoDB tujuan. Dalam contoh ini, akun database adalah test dan termasuk dalam database admin.
CatatanGunakan titik akhir VPC untuk interkoneksi guna meminimalkan latensi jaringan.
Untuk informasi lebih lanjut tentang format string koneksi 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:3717CatatanKata sandi tidak boleh mengandung tanda at (@). Jika tidak, koneksi akan gagal.
sync_mode
Metode sinkronisasi data. Nilai valid:
all: Melakukan sinkronisasi data penuh dan inkremental.
full: Hanya melakukan sinkronisasi data penuh.
incr: Hanya melakukan sinkronisasi data inkremental.
CatatanNilai default adalah incr.
sync_mode = allCatatanUntuk daftar lengkap parameter dalam file collector.conf, lihat Lampiran.
Jalankan perintah berikut untuk memulai tugas sinkronisasi dan menampilkan informasi log.
./collector.linux -conf=collector.conf -verboseAmati informasi log. Ketika entri log berikut muncul, sinkronisasi data penuh selesai dan sinkronisasi data inkremental telah dimulai.
[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]
Monitor status MongoShake
Setelah sinkronisasi data inkremental dimulai, buka jendela baris perintah lain dan jalankan perintah berikut untuk memantau MongoShake.
cd /test/mongoshake && ./mongoshake-stat --port=9100mongoshake-stat adalah skrip Python. Sebelum menjalankan skrip, instal Python 2.7. Untuk informasi lebih lanjut, lihat situs resmi Python.
Contoh keluaran pemantauan:
Deskripsi Parameter:
Parameter | Deskripsi |
logs_get/sec | Jumlah oplog yang diperoleh per detik. |
logs_repl/sec | Jumlah operasi pengulangan oplog per detik. |
logs_success/sec | Jumlah operasi pengulangan oplog yang berhasil per detik. |
lsn.time | Waktu ketika oplog terakhir dikirim. |
lsn_ack.time | Waktu ketika tujuan mengonfirmasi operasi penulisan. |
lsn_ckpt.time | Waktu ketika checkpoint disimpan secara permanen. |
now.time | Waktu saat ini. |
replset | Nama set replika database sumber. |
Migrasikan data bisnis dari database admin ke database non-admin
MongoDB tidak merekomendasikan penyimpanan data bisnis di database admin karena perilaku penguncian dan konflik dengan perintah internal dapat menurunkan performa instans.
MongoShake mendukung sinkronisasi data bisnis dari database admin ke database non-admin.
Ikuti langkah-langkah di bagian Prosedur. Pada Langkah 4, saat Anda mengubah file collector.conf, tambahkan item konfigurasi berikut:
filter.pass.special.db = admin
# Migrasikan semua koleksi bisnis dari database admin ke newDB.
transform.namespace = admin:newDB
# Sebagai alternatif, migrasikan koleksi abc dari database admin ke koleksi def di database target. Anda dapat mengonfigurasi beberapa aturan.
transform.namespace = admin.abc:target.defLampiran
Tabel 1. Parameter collector.conf
Kategori | Parameter | Deskripsi | Contoh |
Tidak ada | conf.version | Nomor versi dari file konfigurasi saat ini. Jangan ubah nilai ini. |
|
Opsi konfigurasi global | id | ID tugas sinkronisasi. Anda dapat menyesuaikan nilai ini. Ini digunakan untuk nama log, nama database yang menyimpan informasi checkpoint untuk transmisi yang dapat dilanjutkan, dan nama database tujuan. |
|
master_quorum | Opsi ketersediaan tinggi. Saat node MongoShake utama dan cadangan mensinkronkan data dari sumber yang sama, atur parameter ini ke Nilai valid:
Catatan Nilai default adalah false. |
| |
full_sync.http_port | Port HTTP. Buka port ini untuk melihat status sinkronisasi penuh saat ini dari Internet. Catatan Nilai default adalah 9101. |
| |
incr_sync.http_port | Port HTTP. Buka port ini untuk melihat status sinkronisasi inkremental saat ini dari Internet. Catatan Nilai default adalah 9100. |
| |
system_profile_port | Port profiling, digunakan untuk melihat informasi stack internal. |
| |
log.level | Tingkat log. Nilai valid:
Nilai default: info. |
| |
log.dir | Direktori untuk file log dan file PID. Jika parameter ini tidak disetel, direktori logs di jalur saat ini akan digunakan secara default. Catatan Jalur untuk parameter ini harus berupa jalur mutlak. |
| |
log.file | Nama file log. Anda dapat menyesuaikan nilai ini. Catatan Nilai default adalah collector.log. |
| |
log.flush | Tingkat refresh log di layar. Nilai valid:
Catatan Nilai default adalah false. |
| |
sync_mode | Metode sinkronisasi data. Nilai valid:
Catatan Nilai default adalah incr. |
| |
mongo_urls | URI string koneksi dari instans MongoDB sumber. Dalam contoh ini, akun database adalah test dan milik database admin. Catatan
|
| |
mongo_cs_url | Jika sumbernya adalah instans kluster sharded, Anda harus memasukkan titik akhir node Configserver (CS). Untuk mengajukan titik akhir untuk node Configserver, lihat Ajukan titik akhir untuk shard. Dalam contoh ini, akun database adalah test dan milik database admin. |
| |
mongo_s_url | Jika sumbernya adalah instans kluster sharded, Anda harus memasukkan titik akhir setidaknya satu node Mongos. Pisahkan beberapa alamat Mongos dengan koma (,). Untuk mengajukan titik akhir untuk node Mongos, lihat Ajukan titik akhir untuk shard. Dalam contoh ini, akun database adalah test dan milik database admin. |
| |
tunnel | Jenis saluran untuk sinkronisasi. Nilai valid:
Catatan Nilai default adalah direct. |
| |
tunnel.address | Titik akhir tujuan. Alamat berikut didukung:
Dalam contoh ini, akun database adalah test dan milik database admin. |
| |
tunnel.message | Jenis data dalam saluran. Parameter ini valid hanya jika parameter tunnel disetel ke
Catatan Nilai default adalah raw. |
| |
mongo_connect_mode | Mode koneksi untuk instans MongoDB. Parameter ini valid hanya jika parameter tunnel disetel ke
Catatan Nilai default adalah secondaryPreferred. |
| |
filter.namespace.black | Menentukan daftar hitam untuk sinkronisasi data. Namespace yang ditentukan tidak disinkronkan ke database tujuan. Pisahkan beberapa namespace dengan titik koma (;). Catatan Namespace adalah nama kanonik untuk koleksi atau indeks di MongoDB. Ini adalah kombinasi dari nama database dan nama koleksi atau indeks, misalnya, |
| |
filter.namespace.white | Menentukan daftar putih untuk sinkronisasi data. Hanya namespace yang ditentukan yang disinkronkan ke database tujuan. Pisahkan beberapa namespace dengan titik koma (;). |
| |
filter.pass.special.db | Mengaktifkan sinkronisasi untuk database khusus. Selama sinkronisasi normal, database seperti admin, local, mongoshake, config, dan system.views difilter oleh sistem. Anda dapat mengaktifkan sinkronisasi untuk database ini untuk kebutuhan khusus. Pisahkan beberapa nama database dengan titik koma (;). |
| |
filter.ddl_enable | Menentukan apakah akan mengaktifkan sinkronisasi DDL. Nilai valid:
Catatan Fitur ini tidak didukung ketika sumbernya adalah instans kluster sharded MongoDB. |
| |
checkpoint.storage.url | Mengonfigurasi alamat penyimpanan checkpoint untuk mendukung transmisi yang dapat dilanjutkan. Jika ini tidak dikonfigurasi, program menulis ke database berikut berdasarkan tipe instans:
Dalam contoh ini, akun database adalah test dan milik database admin. |
| |
checkpoint.storage.db | Nama database yang menyimpan checkpoint. Catatan Nilai default adalah mongoshake. |
| |
checkpoint.storage.collection | Nama koleksi yang menyimpan checkpoint. Saat Anda mengaktifkan node MongoShake utama dan cadangan untuk menyinkronkan data dari sumber yang sama, Anda dapat mengubah nama tabel ini untuk mencegah konflik yang disebabkan oleh nama duplikat. Catatan Nilai default adalah ckpt_default. |
| |
checkpoint.start_position | Posisi awal untuk transmisi yang dapat dilanjutkan. Parameter ini tidak valid jika checkpoint sudah ada. Format nilainya adalah Catatan Nilai default adalah 1970-01-01T00:00:00Z. |
| |
transform.namespace | Mengganti nama database atau koleksi sumber dan menyinkronkannya ke database tujuan. Misalnya, ganti nama |
| |
Opsi sinkronisasi data penuh | full_sync.reader.collection_parallel | Menetapkan jumlah maksimum koleksi yang dapat ditarik MongoShake secara bersamaan pada satu waktu. |
|
full_sync.reader.write_document_parallel | Menetapkan jumlah thread konkuren untuk MongoShake menulis ke koleksi tunggal. |
| |
full_sync.reader.document_batch_size | Menetapkan ukuran batch untuk penulisan dokumen tunggal ke tujuan. Sebagai contoh, 128 berarti bahwa 128 dokumen di-agregasi sebelum ditulis. |
| |
full_sync.collection_exist_drop | Menetapkan cara menangani koleksi di database tujuan yang memiliki nama yang sama dengan koleksi sumber. Nilai valid:
|
| |
full_sync.create_index | Menentukan apakah akan membuat indeks setelah sinkronisasi selesai. Nilai valid:
|
| |
full_sync.executor.insert_on_dup_update | Menentukan apakah akan mengubah pernyataan
|
| |
full_sync.executor.filter.orphan_document | Menentukan apakah akan memfilter dokumen yatim piatu ketika sumbernya adalah instans kluster sharded. Nilai valid:
|
| |
full_sync.executor.majority_enable | Menentukan apakah akan mengaktifkan fitur penulisan mayoritas pada tujuan. Nilai valid:
|
| |
Opsi sinkronisasi data inkremental | incr_sync.mongo_fetch_method | Mengonfigurasi metode untuk menarik data inkremental. Nilai valid:
Nilai default: oplog |
|
incr_sync.oplog.gids | Digunakan untuk menyiapkan replikasi dua arah untuk kluster cloud. |
| |
incr_sync.shard_key | Metode yang digunakan MongoShake untuk menangani konkurensi secara internal. Jangan ubah parameter ini. |
| |
incr_sync.worker | Jumlah thread konkuren untuk mentransmisikan oplogs. Jika performa host cukup, Anda dapat meningkatkan jumlah thread. Catatan Jika sumbernya adalah instans kluster sharded, jumlah thread harus sama dengan jumlah shard. |
| |
incr_sync.worker.oplog_compressor | Mengaktifkan kompresi data untuk mengurangi konsumsi lebar pita jaringan. Nilai valid:
Catatan Parameter ini hanya dapat digunakan ketika parameter tunnel tidak disetel ke |
| |
incr_sync.target_delay | Menetapkan sinkronisasi tertunda antara sumber dan tujuan. Perubahan di sumber biasanya disinkronkan ke tujuan secara real-time. Untuk mencegah operasi yang tidak disengaja, Anda dapat menyetel parameter ini untuk menunda sinkronisasi. Sebagai contoh, Catatan Nilai 0 menunjukkan bahwa sinkronisasi tertunda dinonaktifkan. |
| |
incr_sync.worker.batch_queue_size | Parameter konfigurasi untuk antrian internal MongoShake. Jangan ubah kecuali diperlukan. |
| |
incr_sync.adaptive.batching_max_size |
| ||
incr_sync.fetcher.buffer_capacity |
| ||
Opsi sinkronisasi MongoDB (hanya untuk mode | incr_sync.executor.upsert | Menentukan apakah akan mengubah pernyataan
|
|
incr_sync.executor.insert_on_dup_update | Menentukan apakah akan mengubah pernyataan
|
| |
incr_sync.conflict_write_to | Menentukan apakah akan mencatat dokumen yang bertentangan jika terjadi konflik penulisan selama sinkronisasi. Nilai valid:
|
| |
incr_sync.executor.majority_enable | Menentukan apakah akan mengaktifkan penulisan mayoritas pada tujuan. Nilai valid:
Catatan Mengaktifkan fitur ini memengaruhi performa. |
|
FAQ
Lihat MongoShake FAQ terlebih dahulu. Jika Anda mengalami masalah lain saat menggunakan MongoShake, berikan umpan balik langsung di GitHub Issues.