Studi Kasus · Migrasi Database

Migrasi 100 Juta Dokumen dari Huawei DDS ke Percona Server for MongoDB

Cara kami memindahkan MongoDB production dari Huawei DDS 4.0 ke Percona Server for MongoDB 8.0 di Kubernetes, dengan full load, change data capture lewat Kafka dan gerbang validasi sebelum cutover.

Sumber
Huawei Cloud DDS 4.0 (replica set dan cluster)
Tujuan
Percona Server for MongoDB 8.0 di Huawei Cloud CCE
Transport
Broker kompatibel Kafka (Redpanda, 3 broker)
Pendekatan
Full load + change data capture
Run terbesar
100.000.000 dokumen dengan write aktif
Cakupan production
19 database dalam steady CDC

Klien: tim platform yang menjalankan MongoDB production di Huawei Cloud. Nama klien dan nama database tidak dicantumkan dalam tulisan ini.

Masalah

Tim ini menjalankan workload MongoDB di Huawei Cloud DDS 4.0. Mereka ingin pindah ke Percona Server for MongoDB 8.0 di Kubernetes, di bawah kendali sendiri, tanpa write freeze yang panjang. Tidak ada jalur upgrade in-place dari DDS yang managed ke cluster self-managed, dan lompatan 4.0 ke 8.0 biasanya berarti beberapa kali upgrade major version berturut-turut.

Lingkungan

  • Sumber: Huawei Cloud DDS 4.0, baik deployment cluster maupun replica set.
  • Tujuan: Percona Server for MongoDB 8.0 di Huawei Cloud CCE: satu cluster sharded ditambah dua target replica set terpisah, agar workload tertentu tetap terisolasi.
  • Transport: cluster Redpanda tiga broker (Kafka API) di cluster CCE yang sama.
  • Observability: Prometheus, Prometheus Adapter dan Percona Monitoring and Management (PMM).
  • Delivery: GitLab CI dengan runner di CCE, scanning container image dan pembuatan SBOM.

Tantangan

  • Change stream di DDS. DDS menolak change stream yang meminta full-document lookup, dengan error ReadConcernMajorityNotEnabled. Pendekatan CDC standar tidak bisa dipakai begitu saja.
  • Dokumen besar. Beberapa collection berisi dokumen sekitar 15 MiB, di atas batas default batch producer Kafka.
  • Write tetap berjalan. Sumber terus menerima write, sehingga perbandingan jumlah secara online bisa berbeda sesaat.
  • Lompatan major version. Index, validator dan collection options harus dibuat ulang dan dibandingkan di versi yang empat major lebih baru.

Solusi

Kami memakai migration engine internal MYC, engine yang sama di balik jasa migrasi MongoDB kami:

  • Full load paralel per segmen ke topic Kafka per collection, dengan CDC diaktifkan sebelum snapshot sehingga tidak ada write yang terlewat.
  • Apply yang idempotent berdasarkan _id dokumen, sehingga replay dan retry aman.
  • BSON terjaga penuh. Dokumen tidak pernah melewati JSON di jalur data.
  • Mode delta change stream untuk DDS: ketika full-document lookup tidak tersedia, engine menerapkan update description secara berurutan. Mode polling tersedia sebagai pilihan terakhir.
  • Discovery dan sinkronisasi metadata untuk index, validator dan collection options, diikuti job validasi yang menjadi gerbang cutover.
  • Worker yang autoscale berdasarkan lag consumer Kafka lewat Horizontal Pod Autoscaler dan Prometheus Adapter.

Arsitektur

  Huawei DDS 4.0                 Kafka-compatible broker            Percona Server for MongoDB 8.0
  (replica set / cluster)        (Redpanda, 3 brokers)              on Huawei Cloud CCE
 ┌──────────────────────┐      ┌───────────────────────────┐      ┌────────────────────────────┐
 │  source databases    │─────►│ migration.<db>.<coll>     │─────►│ sharded cluster             │
 │                      │ full │ cdc.<db>.<coll>           │apply │ + isolated replica-set      │
 │  change streams      │ load │ migration-dlq             │ by   │   targets                   │
 │  (delta fallback)    │─────►│ key = document _id        │ _id  │                             │
 └──────────────────────┘ CDC  └───────────────────────────┘      └────────────────────────────┘
            ▲                         ▲            ▲                           ▲
            │                  fullsync / cdc   consumer                  indexer · validator
            └──────────── controller (state machine, checkpoints, metadata phases) ───────────┘
                          workers autoscale on Kafka consumer lag (HPA + Prometheus Adapter)
Alur data yang disederhanakan. Controller melacak setiap migrasi sebagai state machine dan menyimpan checkpoint untuk setiap segmen dan posisi CDC.

Implementasi

  • Preflight di dalam cluster. Job preflight Mongo dan Kafka memeriksa konektivitas, TLS, hak akses dan izin write di tujuan. Setiap database production menghasilkan 14 lolos, 1 peringatan (review major version 4 ke 8 yang memang diharapkan) dan tanpa kegagalan.
  • Run pembuktian. Migrasi uji snapshot dan CDC membuktikan mode delta, termasuk konvergensi update, delete dan insert yang terjadi setelah CDC aktif.
  • Uji skala. Run 100 juta dokumen dengan perubahan CDC aktif selesai dengan validasi data dan metadata lolos.
  • Perbaikan dokumen besar. Batas ukuran pesan di producer, consumer, topic dan preflight dibuat bisa dikonfigurasi (default 20 MiB). Dua collection yang terdampak dilanjutkan dari checkpoint dan kemudian tervalidasi dengan jumlah dan checksum yang cocok.
  • Gelombang production. 19 database production menyelesaikan full load dan dipertahankan dalam steady CDC tanpa collection gagal dan dengan total lag Kafka nol pada titik verifikasi Juli 2026.

Hasil

  • 100.000.000 dokumen dimigrasi dalam satu run yang tervalidasi.
  • 19 database production tetap sinkron lewat CDC, dengan total lag nol saat verifikasi.
  • Migrasi pembuktian dari sumber DDS cluster dan DDS replica set selesai dengan validasi data dan metadata lolos dan cutover berhasil.
  • Lompatan major version 4.0 ke 8.0 dalam satu migrasi, dengan sumber tetap utuh sebagai cadangan.

Catatan tentang validasi: untuk tiga database, pemeriksaan jumlah secara online berbeda beberapa dokumen karena sumber masih menerima write di antara dua pemanggilan count. Laporan tersebut tidak ditandai lolos. Prosedur cutover-nya adalah menghentikan write, mengosongkan lag hingga nol dan menjalankan ulang validasi sebelum memindahkan traffic.

Teknologi

Huawei Cloud DDS, Huawei Cloud CCE, Percona Server for MongoDB 8.0, Percona Operator, Redpanda (Kafka API), Kubernetes HPA, Prometheus, Prometheus Adapter, PMM, GitLab CI, Trivy.

Layanan yang digunakan

Jasa migrasi MongoDB · Migrasi cloud · Huawei Cloud · Kubernetes

Merencanakan migrasi MongoDB?

Ceritakan versi MongoDB saat ini dan target, ukuran data serta toleransi downtime Anda.