Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Bagaimana MongoDB menangani migrasi data antar shard


Bagaimana MongoDB menangani migrasi data antar shard


MongoDB menangani migrasi data antara pecahan terutama melalui proses yang disebut migrasi chunk, yang merupakan bagian integral dari arsitektur sharding yang dirancang untuk mendistribusikan data secara merata di berbagai pecahan dalam sebuah cluster. Sharding di MongoDB adalah metode yang digunakan untuk secara horizontal mengukur database dengan mempartisi data di beberapa server atau pecahan. Sistem ini memanfaatkan kunci shard, yang merupakan bidang atau set bidang dalam dokumen yang menentukan distribusi data. Untuk mengelola migrasi data antar shard, MongoDB menggunakan proses latar belakang yang disebut penyeimbang, yang mengoptimalkan distribusi data dengan memigrasi rentang data (atau potongan) yang diperlukan.

Tinjauan Migrasi Cluster dan Chunk Sharded

MongoDB membagi koleksi sharded menjadi potongan -potongan, yang merupakan rentang nilai kunci beling yang berdekatan. Setiap potongan milik pecahan tertentu, dan potongan -potongan ini secara kolektif memegang seluruh dataset. Balancer memantau distribusi potongan -potongan di seluruh pecahan dan memigrasi potongan antara pecahan untuk menjaga keseimbangan. Mekanisme migrasi ini membantu menghindari hotspot, meningkatkan kinerja kueri, dan mengoptimalkan pemanfaatan sumber daya.

Migrasi chunk bermanfaat dalam skenario seperti ketika pecahan baru ditambahkan ke sebuah cluster, ketika data tumbuh secara tidak merata menyebabkan ketidakseimbangan, atau ketika zona perlu didefinisikan ulang untuk lokalitas data atau persyaratan peraturan. Migrasi beroperasi di tingkat chunk, memindahkan seluruh jajaran nilai kunci beling dari satu pecahan ke pecahan lainnya.

Detail Proses Migrasi ###

Migrasi chunk MongoDB bekerja dalam beberapa fase:

1. Pemilihan chunk untuk pindah: penyeimbang atau administrator memilih potongan yang perlu ditugaskan kembali ke pecahan lain untuk menyeimbangkan cluster.

2. Fase klon: Donor Shard (yang saat ini memegang potongan) menyalin semua dokumen di potongan ke shard penerima. Selama waktu ini, baru menulis ke potongan pada shard donor juga dilacak.

3. Fase Catch-Up: Shard penerima menerapkan tulisan apa pun yang terjadi selama fase klon untuk memastikannya memiliki data terkini.

4. Bagian Kritis dan Komit: Donor Shard memasuki bagian kritis di mana operasi penulisan ke potongan diblokir secara singkat, dan kepemilikan chunk secara atom beralih ke shard penerima.

5. Hapus fase: Donor shard secara asinkron menghapus dokumen milik potongan yang dimigrasi setelah mengkonfirmasi penerima telah berhasil melakukan potongan.

Penyeimbang memastikan bahwa hanya satu migrasi per pecahan yang terjadi pada satu waktu untuk meminimalkan dampak pada kinerja shard. Ini dapat melakukan beberapa migrasi secara paralel di berbagai pasangan beling yang berbeda jika mereka mandiri.

Balancer otomatis

Balancer berjalan sebagai utas latar belakang pada simpul primer server konfigurasi dan terus -menerus memantau saldo data shard. Ini melacak ukuran data per chunk untuk menentukan apakah migrasi diperlukan sesuai dengan ambang keseimbangan yang dapat dikonfigurasi. Ketika perbedaan ukuran data antara pecahan melebihi ambang batas ini, penyeimbang memulai migrasi.

Balancer beroperasi dengan cara yang sebagian besar transparan untuk aplikasi, tetapi dapat dinonaktifkan sementara untuk tujuan pemeliharaan atau penyetelan. Ini juga menghormati zona yang dikonfigurasi dalam cluster, memastikan potongan dimigrasi dalam batas -batas zona yang sesuai.

Perintah Migrasi Manual

Sementara penyeimbang mengotomatiskan migrasi chunk, MongoDB juga memungkinkan kontrol manual menggunakan perintah seperti `Movechunk` dan` Moverange`. Perintah -perintah ini memaksa migrasi potongan spesifik atau rentang potongan dari satu pecahan ke pecahan lainnya.

- `Movechunk` digunakan untuk memigrasikan potongan yang berisi nilai kunci shard tertentu ke pecahan tertentu. Ini berguna untuk migrasi yang ditargetkan untuk penyeimbangan beban atau lokalitas data.

- `Moverange` memungkinkan migrasi berbagai tombol pecahan, berguna untuk strategi penyeimbangan data yang lebih kompleks.

Administrator dapat menggunakan perintah ini untuk potongan pra-pemisahan untuk mendistribusikan data secara merata sebelum konsumsi massal atau untuk menyelesaikan kegagalan migrasi yang disebabkan oleh kendala jendela menyeimbangkan.

Menangani dokumen dan konsistensi yatim piatu

Selama dan setelah migrasi chunk, dokumen yatim piatu (dokumen yang tidak lagi termasuk dalam rentang potongan donor yang ditugaskan) dapat sementara ada pada donor shard sampai mereka dibersihkan.

MongoDB memastikan konsistensi sepanjang migrasi dengan menerapkan operasi secara berurutan dan menggunakan mekanisme koordinasi yang ditulis oleh blok selama bagian kritis. Setelah migrasi, pembersihan yatim berjalan secara tidak sinkron sambil menghindari gangguan dengan kueri yang sedang berlangsung.

Mulai MongoDB 5.3, Ubah aliran tidak menghasilkan acara untuk pembaruan dokumen yatim selama migrasi, untuk mempertahankan akurasi aliran acara.

Dampak pada kinerja dan operasi

Migrasi chunk membawa overhead termasuk konsumsi bandwidth jaringan, CPU, dan Disk I/O yang dapat memengaruhi kinerja cluster. MongoDB meminimalkan dampak ini dengan:

- Membatasi partisipasi shard untuk satu migrasi sekaligus.

- Migrasi antrian dan memungkinkan fase menghapus untuk berjalan secara tumpang tindih untuk pembongkaran lebih cepat.

- Menggunakan opsi pelambatan untuk menyetel konkurensi migrasi dan menulis kekhawatiran selama migrasi.

Data yang bermigrasi juga untuk sementara mempengaruhi bacaan sekunder yang mungkin kehilangan dokumen selama fase pembersihan yatim, jadi aplikasi perlu mempertimbangkan hal ini ketika merancang pertanyaan mereka.

Migrasi dalam skenario tertentu

Dalam kasus -kasus seperti memigrasi data antar zona dengan rentang tag, atau dari tidak dicicipi ke pengaturan berbatasan, MongoDB memigrasi data secara bertahap berdasarkan rentang kunci shard yang diperbarui atau zona setelah konfigurasi ulang. Misalnya, menghapus rentang tag lama dan membuat yang baru memicu migrasi penyeimbang untuk memindahkan data yang sesuai.

Saat memigrasikan cluster MongoDB ke solusi yang dikelola cloud atau di antara cluster berbaring, alat migrasi sering melakukan migrasi biji-bijaksana, menyalin data pecahan secara individual sambil mempertahankan distribusi kunci shard.

Alat dan utilitas untuk migrasi

Data Transmission Services (DTS) dan alat pihak ketiga lainnya membantu memigrasikan data antara instance atau cluster MongoDB, menangani pemetaan beling, konsistensi data, dan pembaruan tambahan. Alat-alat ini sering mendukung migrasi dari cluster non-sharded ke sharded dengan menetapkan nilai kunci shard default ke sumber data yang kekurangan kunci beling.

Ringkasan Poin Kunci

- MongoDB Partisi data ke dalam potongan yang didistribusikan melintasi pecahan menggunakan tombol shard.

- Penyeimbang secara otomatis memigrasi potongan untuk mempertahankan distribusi data yang seimbang.

- Migrasi melibatkan data kloning, catch-up tulis, penyerahan atom, dan pembersihan asinkron.

- Migrasi terbatas pada satu per shard untuk mengurangi dampak sistem.

- Perintah migrasi manual memberikan kontrol administratif untuk distribusi potongan.

- Dokumen yatim dibersihkan secara tidak sinkron pasca-migrasi.

- Migrasi mempengaruhi kinerja dan konsistensi bacaan sekunder sementara.

- Migrasi antara zona atau perubahan rentang kunci beling ditangani dengan konfigurasi ulang migrasi pemicu.

- Alat migrasi membantu pergerakan data antara kelompok atau arsitektur.

Mekanisme migrasi ini memastikan bahwa cluster MongoDB tetap seimbang, dapat diukur, dan berkinerja ketika data tumbuh dan konfigurasi cluster berkembang, memberikan ketersediaan berkelanjutan dengan gangguan minimal pada aplikasi.