全部产品
Search
文档中心

ApsaraDB for MongoDB:NimoShake - Migrasi Amazon DynamoDB ke Alibaba Cloud

更新时间:Jul 08, 2025

NimoShake (juga dikenal sebagai DynamoShake) adalah alat sinkronisasi data yang dikembangkan oleh Alibaba Cloud, memungkinkan migrasi database Amazon DynamoDB ke Alibaba Cloud.

Prasyarat

Sebuah instance ApsaraDB for MongoDB telah dibuat. Untuk informasi lebih lanjut, lihat Buat Instance Set Replika atau Buat Instance Kluster Sharded.

Informasi latar belakang

NimoShake dirancang untuk migrasi dari database Amazon DynamoDB. Tujuan harus berupa database ApsaraDB for MongoDB. Untuk informasi lebih lanjut, lihat Ikhtisar NimoShake.

Pertimbangan penting

  • Konsumsi Sumber Daya. Migrasi data penuh mengonsumsi sumber daya di kedua database sumber dan tujuan, meningkatkan beban server. Jika database Anda memiliki lalu lintas tinggi atau spesifikasi server rendah, ini dapat menyebabkan tekanan tambahan. Kami menyarankan untuk mengevaluasi dampak potensial pada kinerja sebelum migrasi dan menjalankannya selama jam-jam sepi.

  • Kapasitas Penyimpanan. Pastikan ruang penyimpanan instance ApsaraDB for MongoDB lebih besar daripada database Amazon DynamoDB.

Istilah kunci

  • Transmisi yang Dapat Dilanjutkan: Fitur ini membagi tugas menjadi beberapa bagian untuk transmisi. Jika transmisi terputus karena kegagalan jaringan atau alasan lainnya, tugas dapat dilanjutkan dari tempat terakhir, bukan dimulai ulang dari awal.

    Catatan
    • Migrasi penuh tidak mendukung transmisi yang dapat dilanjutkan.

    • Migrasi inkremental mendukung transmisi yang dapat dilanjutkan. Jika koneksi sinkronisasi inkremental hilang dan pulih dalam waktu singkat, sinkronisasi dapat dilanjutkan. Namun, dalam situasi tertentu seperti pemutusan koneksi yang berkepanjangan atau hilangnya titik periksa sebelumnya, sinkronisasi penuh mungkin dipicu lagi.

  • Titik Periksa: Transmisi yang dapat dilanjutkan untuk sinkronisasi inkremental dicapai melalui titik periksa. Secara default, titik periksa ditulis ke database MongoDB tujuan, khususnya ke database bernama nimo-shake-checkpoint. Setiap koleksi mencatat tabel titik periksa miliknya sendiri, dan sebuah status_table mencatat apakah sinkronisasi saat ini merupakan tugas penuh atau inkremental.

Fitur NimoShake

NimoShake mendukung mekanisme sinkronisasi terpisah, yang dilakukan dalam dua langkah:

  1. Migrasi data penuh.

  2. Migrasi data inkremental.

Migrasi penuh

Migrasi penuh terdiri dari dua bagian: migrasi data dan migrasi indeks. Gambar berikut menunjukkan arsitektur dasar:全量同步基本架构

  • Migrasi data: NimoShake menggunakan beberapa thread konkuren untuk menarik data sumber, seperti yang ditunjukkan pada gambar berikut:数据同步

    Thread

    Deskripsi

    Fetcher

    Memanggil driver konversi protokol yang disediakan oleh Amazon untuk mengambil data secara batch dari tabel sumber dan menempatkannya di antrian hingga semua data sumber ditarik.

    Catatan

    Hanya satu thread fetcher yang disediakan.

    Parser

    Membaca data dari antrian dan mengurai data tersebut menjadi struktur BSON. Setelah data diuraikan, parser menulis data ke thread executor. Beberapa thread parser dapat dimulai. Nilai default adalah 2. Sesuaikan jumlah thread parser menggunakan parameter FullDocumentParser.

    Executor

    Menarik data dari antrian, kemudian mengumpulkan dan menulis data ke database ApsaraDB for MongoDB tujuan. Hingga 16 MB data atau 1.024 entri dapat dikumpulkan. Beberapa thread executor dapat dimulai. Nilai default adalah 4. Sesuaikan jumlah thread executor menggunakan parameter FullDocumentConcurrency.

  • Migrasi indeks: NimoShake membuat indeks setelah migrasi data selesai. Indeks dikategorikan menjadi indeks yang dihasilkan otomatis dan indeks yang dibuat pengguna:

    • Indeks yang Dihasilkan Otomatis:

      • Jika Anda memiliki kunci partisi dan kunci sortir, NimoShake akan membuat indeks komposit unik dan menulisnya ke MongoDB.

      • NimoShake juga akan membuat indeks hash untuk kunci partisi dan menulisnya ke MongoDB.

      • Jika Anda hanya memiliki kunci partisi, NimoShake akan membuat indeks hash dan indeks unik di MongoDB.

    • Indeks yang Dibuat Pengguna: Jika Anda memiliki indeks yang dibuat pengguna, NimoShake membuat indeks hash berdasarkan kunci utama dan menulis indeks tersebut ke database ApsaraDB for MongoDB tujuan.

Migrasi inkremental

Migrasi inkremental hanya mensinkronkan data; tidak mensinkronkan indeks yang dihasilkan selama proses sinkronisasi inkremental. Arsitektur dasarnya adalah sebagai berikut:增量同步架构图

Thread

Deskripsi

Fetcher

Memantau perubahan shard dalam aliran.

Manager

Mengelola notifikasi pesan dan pembuatan dispatcher; setiap shard sesuai dengan satu Dispatcher.

Dispatcher

Mengambil data inkremental dari sumber. Untuk transmisi yang dapat dilanjutkan, pengambilan data dilanjutkan dari titik periksa terakhir, bukan dari awal.

Batcher

Mengurai, mengemas, dan mengumpulkan data inkremental yang diambil oleh thread Dispatcher.

Executor

Menulis data yang dikumpulkan ke database ApsaraDB for MongoDB tujuan dan memperbarui checkpoint.

Langkah-langkah: Migrasi Amazon DynamoDB ke Alibaba Cloud (contoh Ubuntu)

Bagian ini menunjukkan cara menggunakan NimoShake untuk memigrasikan database Amazon DynamoDB ke ApsaraDB for MongoDB, menggunakan sistem Ubuntu sebagai contoh.

  1. Unduh NimoShake: Jalankan perintah berikut untuk mengunduh paket NimoShake:

    wget https://github.com/alibaba/NimoShake/releases/download/release-v1.0.14-20250704/nimo-shake-v1.0.14.tar.gz
    Catatan

    Kami menyarankan untuk mengunduh versi terbaru dari paket NimoShake.

  2. Dekompresi Paket: Jalankan perintah berikut untuk mendekompresi paket NimoShake:

    tar zxvf nimo-shake-v1.0.14.tar.gz
  3. Akses Direktori: Setelah dekompresi, jalankan perintah cd nimo-shake-v1.0.14 untuk masuk ke folder nimo.

  4. Buka File Konfigurasi: Jalankan perintah vi nimo-shake.conf untuk membuka file konfigurasi NimoShake.

  5. Konfigurasikan NimoShake: Konfigurasikan parameter dalam file nimo-shake.conf. Tabel berikut menjelaskan setiap item konfigurasi:

    Parameter

    Deskripsi

    Contoh

    id

    ID tugas migrasi. Ini dapat disesuaikan dan digunakan untuk mengeluarkan file PID, nama log, nama database untuk penyimpanan titik periksa, dan nama database tujuan.

    id = nimo-shake

    log.file

    Jalur file log. Jika parameter ini tidak dikonfigurasi, log ditampilkan di stdout.

    log.file = nimo-shake.log

    log.level

    Tingkat logging. Nilai valid:

    • none: Tidak ada log

    • error: Pesan kesalahan

    • warn: Informasi peringatan

    • info: Status sistem

    • debug: Informasi debugging

    Nilai default: info.

    log.level = info

    log.buffer

    Menentukan apakah buffering log diaktifkan. Nilai valid:

    • true: Buffering log diaktifkan. Buffering log memastikan performa tinggi tetapi mungkin kehilangan beberapa entri log terbaru saat keluar.

    • false: Buffering log dinonaktifkan. Jika dinonaktifkan, performa mungkin menurun. Namun, semua entri log ditampilkan saat keluar.

    Nilai default: true.

    log.buffer = true

    system_profile

    Port PPROF, digunakan untuk debugging dan menampilkan informasi coroutine stackful.

    system_profile = 9330

    full_sync.http_port

    Port RESTful untuk fase migrasi penuh. Gunakan curl untuk melihat statistik pemantauan internal. Untuk informasi lebih lanjut, lihat wiki.

    full_sync.http_port = 9341

    incr_sync.http_port

    Port RESTful untuk fase migrasi inkremental. Gunakan curl untuk melihat statistik pemantauan internal. Untuk informasi lebih lanjut, lihat wiki.

    incr_sync.http_port = 9340

    sync_mode

    Jenis migrasi data. Nilai valid:

    • all: Migrasi penuh dan inkremental

    • full: Hanya migrasi penuh

    Nilai default: all.

    Catatan

    Hanya full yang didukung ketika sumbernya adalah instance ApsaraDB for MongoDB yang kompatibel dengan protokol DynamoDB.

    sync_mode = all

    incr_sync_parallel

    Menentukan apakah akan melakukan migrasi inkremental paralel. Nilai valid:

    • true: Migrasi inkremental paralel diaktifkan. Ini mengonsumsi lebih banyak memori.

    • false: Migrasi inkremental paralel dinonaktifkan.

    Nilai default: false.

    incr_sync_parallel = false

    source.access_key_id

    ID AccessKey untuk database Amazon DynamoDB.

    source.access_key_id = xxxxxxxxxxx

    source.secret_access_key

    Rahasia AccessKey untuk database Amazon DynamoDB.

    source.secret_access_key = xxxxxxxxxx

    source.session_token

    Kunci sementara untuk mengakses database Amazon DynamoDB. Opsional jika tidak ada kunci sementara yang digunakan.

    source.session_token = xxxxxxxxxx

    source.region

    Wilayah database Amazon DynamoDB. Opsional jika wilayah tidak berlaku atau terdeteksi otomatis.

    source.region = us-east-2

    source.endpoint_url

    Dapat dikonfigurasi jika sumbernya adalah tipe endpoint.

    Penting

    Mengaktifkan parameter ini akan menimpa parameter terkait sumber sebelumnya.

    source.endpoint_url = "http://192.168.0.1:1010"

    source.session.max_retries

    Jumlah maksimum percobaan ulang setelah kegagalan sesi.

    source.session.max_retries = 3

    source.session.timeout

    Periode timeout sesi. 0 menunjukkan bahwa timeout sesi dinonaktifkan. Unit: milidetik.

    source.session.timeout = 3000

    filter.collection.white

    Daftar putih nama koleksi untuk dimigrasikan. Sebagai contoh, filter.collection.white = c1;c2 menunjukkan bahwa koleksi c1 dan c2 akan dimigrasikan dan koleksi lainnya akan difilter.

    filter.collection.white = c1;c2

    filter.collection.black

    Nama koleksi yang akan difilter. Sebagai contoh, filter.collection.black = c1;c2 menunjukkan bahwa koleksi c1 dan c2 akan difilter dan koleksi lainnya akan dimigrasikan.

    Penting

    Tidak dapat digunakan bersamaan dengan filter.collection.white. Jika keduanya ditentukan, semua koleksi akan dimigrasikan.

    filter.collection.black = c1;c2

    qps.full

    Membatasi frekuensi eksekusi perintah Scan selama migrasi penuh (panggilan maksimum per detik).

    Nilai default: 1000.

    qps.full = 1000

    qps.full.batch_num

    Jumlah entri data yang ditarik per detik selama migrasi penuh.

    Nilai default: 128.

    qps.full.batch_num = 128

    qps.incr

    Membatasi frekuensi eksekusi perintah GetRecords selama migrasi inkremental (panggilan maksimum per detik).

    Nilai default: 1000.

    qps.incr = 1000

    qps.incr.batch_num

    Jumlah entri data yang ditarik per detik dalam migrasi inkremental.

    Nilai default: 128.

    qps.incr.batch_num = 128

    target.type

    Tipe database tujuan. Nilai valid:

    • mongodb: instance ApsaraDB for MongoDB.

    • aliyun_dynamo_proxy: instance ApsaraDB for MongoDB yang kompatibel dengan protokol DynamoDB.

    target.type = mongodb

    target.address

    String koneksi database tujuan. Mendukung string koneksi MongoDB dan alamat koneksi yang kompatibel dengan DynamoDB.

    Untuk lebih banyak alamat MongoDB, lihat Hubungkan ke instance set replika atau Hubungkan ke instance kluster sharding.

    target.address = mongodb://username:password@s-*****-pub.mongodb.rds.aliyuncs.com:3717

    target.mongodb.type

    Tipe instance ApsaraDB for MongoDB tujuan. Nilai valid:

    • replica: instance set replika.

    • sharding: instance kluster sharding.

    target.mongodb.type = sharding

    target.db.exist

    Menentukan cara menangani koleksi yang sudah ada dengan nama yang sama di tujuan. Nilai valid:

    • rename: NimoShake mengubah nama koleksi yang sudah ada dengan menambahkan akhiran timestamp pada nama. Sebagai contoh, NimoShake mengubah c1 menjadi c1.2019-07-01Z12:10:11.

      Peringatan

      Ini mungkin memengaruhi bisnis Anda. Pastikan persiapan sebelumnya.

    • drop: Menghapus koleksi yang sudah ada di tujuan.

    Jika tidak dikonfigurasi, migrasi akan berhenti dengan kesalahan jika koleksi dengan nama yang sama sudah ada di tujuan.

    target.db.exist = drop

    sync_schema_only

    Menentukan apakah hanya skema tabel yang dimigrasikan. Nilai valid:

    • true: Hanya skema tabel yang dimigrasikan.

    • false: Tidak.

    Nilai default: false.

    sync_schema_only = false

    full.concurrency

    Jumlah maksimum koleksi yang dapat dimigrasikan secara bersamaan dalam migrasi penuh.

    Nilai default: 4.

    full.concurrency = 4

    full.read.concurrency

    Konkurensi tingkat dokumen dalam sebuah tabel selama migrasi penuh. Parameter ini menentukan jumlah maksimum thread yang dapat membaca dari sumber secara konkuren untuk satu tabel, yang sesuai dengan parameter TotalSegments dari antarmuka Scan.

    Kekonkurenan tingkat dokumen dalam tabel selama migrasi penuh. Parameter ini menunjukkan jumlah maksimum thread yang dapat membaca dari sumber secara bersamaan untuk satu tabel, sesuai dengan parameter TotalSegments dari antarmuka Scan.

    full.read.concurrency = 1

    full.document.concurrency

    Parameter untuk migrasi penuh. Jumlah thread konkuren untuk menulis dokumen dari satu tabel ke tujuan selama migrasi penuh. Default: 4

    Nilai default: 4.

    full.document.concurrency = 4

    full.document.write.batch

    Jumlah entri data yang akan dikumpulkan dan ditulis sekaligus. Jika tujuannya adalah database yang kompatibel dengan protokol DynamoDB, nilai maksimumnya adalah 25.

    full.document.write.batch = 25

    full.document.parser

    Parameter untuk migrasi penuh. Jumlah thread parser konkuren untuk mengonversi data protokol DynamoDB ke protokol yang sesuai untuk tujuan.

    Nilai default: 2.

    full.document.parser = 2

    full.enable_index.user

    Parameter untuk migrasi penuh. Menentukan apakah indeks yang ditentukan pengguna akan dimigrasikan. Nilai valid:

    • true: Ya.

    • false: Tidak.

    Nilai default: true.

    full.enable_index.user = true

    full.executor.insert_on_dup_update

    Parameter untuk migrasi penuh. Menentukan apakah operasi INSERT diubah menjadi operasi UPDATE jika kunci duplikat ditemui di tujuan. Nilai valid:

    • true: Ya.

    • false: Tidak.

    Nilai default: true.

    full.executor.insert_on_dup_update = true

    increase.concurrency

    Parameter untuk migrasi inkremental. Jumlah maksimum shard yang dapat ditangkap secara bersamaan.

    Nilai default: 16.

    increase.concurrency = 16

    increase.executor.insert_on_dup_update

    Parameter untuk migrasi inkremental. Menentukan apakah operasi INSERT diubah menjadi operasi UPDATE jika kunci yang sama ada di tujuan. Nilai valid:

    • true: Ya.

    • false: Tidak.

    Nilai default: true.

    increase.executor.insert_on_dup_update = true

    increase.executor.upsert

    Parameter untuk migrasi inkremental. Menentukan apakah operasi UPDATE diubah menjadi operasi UPSERT jika tidak ada kunci yang ditemukan di tujuan. Nilai valid:

    • true: Ya

    • false: Tidak

    Catatan

    Operasi UPSERT memeriksa apakah kunci yang ditentukan ada. Jika ada, operasi UPDATE dilakukan. Jika tidak, operasi INSERT dilakukan.

    increase.executor.upsert = true

    checkpoint.type

    Tipe penyimpanan untuk informasi transmisi yang dapat dilanjutkan (titik periksa). Nilai valid:

    • mongodb: Informasi titik periksa disimpan di database ApsaraDB for MongoDB. Nilai ini tersedia hanya ketika parameter target.type diatur ke mongodb.

    • file: Informasi titik periksa disimpan di komputer Anda.

    checkpoint.type = mongodb

    checkpoint.address

    Alamat untuk menyimpan informasi titik periksa.

    • Jika parameter checkpoint.type diatur ke mongodb, masukkan string koneksi database ApsaraDB for MongoDB. Jika tidak dikonfigurasi, informasi titik periksa akan disimpan di database ApsaraDB for MongoDB tujuan. Lihat Hubungkan ke instance set replika atau Hubungkan ke instance kluster sharding untuk detail lebih lanjut.

    • Jika parameter checkpoint.type diatur ke file, masukkan jalur relatif (seperti checkpoint). Secara default ke folder checkpoint relatif terhadap file executable NimoShake jika tidak dikonfigurasi.

    checkpoint.address = mongodb://username:password@s-*****-pub.mongodb.rds.aliyuncs.com:3717

    checkpoint.db

    Nama database untuk informasi titik periksa. Jika tidak dikonfigurasi, nama database akan dalam format <id>-checkpoint.

    Contoh: nimo-shake-checkpoint.

    checkpoint.db = nimo-shake-checkpoint

    convert._id

    Menambahkan awalan ke bidang _id di DynamoDB untuk menghindari konflik dengan bidang _id di MongoDB.

    convert._id = pre

    full.read.filter_expression

    Ekspresi DynamoDB yang digunakan untuk penyaringan selama migrasi penuh. :begin dan :end adalah variabel yang dimulai dengan tanda titik dua. Nilai aktualnya ditentukan dalam filter_attributevalues.

    full.read.filter_expression = create_time > :begin AND create_time < :end

    full.read.filter_attributevalues

    Nilai yang sesuai dengan variabel dalam filter_expression untuk penyaringan migrasi penuh.

    N merepresentasikan Angka dan S merepresentasikan String.

    full.read.filter_attributevalues = begin```N```1646724207280~~~end```N```1646724207283

  6. Mulai Migrasi: Jalankan perintah berikut untuk memulai migrasi data menggunakan file konfigurasi nimo-shake.conf yang telah dikonfigurasi:

    ./nimo-shake.linux -conf=nimo-shake.conf
    Catatan

    Setelah migrasi penuh selesai, full sync done! akan ditampilkan. Jika migrasi dihentikan karena kesalahan, program akan otomatis menutup dan mencetak pesan kesalahan terkait untuk membantu Anda dalam pemecahan masalah.