MongoDB обробляє міграцію даних між осколками насамперед за допомогою процесу, який називається міграцією шматки, який є невід'ємною частиною архітектури осколки, розробленою для рівномірного розподілу даних по кількох осколках у кластері. Шардування в MongoDB - це метод, який використовується для горизонтально масштабування бази даних шляхом розподілу даних на декількох серверах або осколках. Ця система використовує ключ осколка, що є полем або набором полів у документі, який визначає розподіл даних. Для управління міграцією даних між осколками MongoDB використовує фоновий процес під назвою Balancer, який оптимізує розподіл даних шляхом міграції діапазонів даних (або шматочків) за потребою.
Огляд міграції кластерів та шматок
MongoDB ділить осколкові колекції на шматки, які є суміжними діапазонами ключових значень. Кожен шматок належить до певного осколка, і ці шматки колективно тримають весь набір даних. Балансер відстежує розподіл шматочків через осколки та мігрує шматки між осколками, щоб підтримувати рівновагу. Цей механізм міграції допомагає уникнути гарячих точок, покращувати ефективність запитів та оптимізувати використання ресурсів.
Міграція шматка вигідна в сценаріях, таких як, коли нові осколки додаються до кластера, коли дані зростають нерівномірно, викликаючи дисбаланс, або коли зони потрібно переосмислити для місцевості або регуляторних вимог. Міграція працює на рівні шматка, переміщуючи цілий діапазон ключових значень Shard від одного осколення до іншого.
Деталі процесу міграції
Міграція шматка MongoDB працює на кількох етапах:
1. Вибір шматка для переміщення: Баланкер або адміністратор вибирає шматок, який потребує перепризначення в інший осколок, щоб збалансувати кластер.
2. Фаза клонів: донорський осколки (той, хто зараз тримає шматок) копіює всі документи в шматочку до одержувача. За цей час також відстежуються нові шматки на донорській осколці.
3. Фаза підйому: Отриманий осколок застосовує будь-які записи, що сталися під час фази клонів, щоб переконатися, що він має найновіші дані.
.
5. Видалити фазу: Асинхронно видаляє документи, що належать до донора, що після того, як він підтверджує, що одержувач успішно взяв на себе шматок.
Баланкер гарантує, що лише одна міграція на осколку відбудеться одночасно, щоб мінімізувати вплив на продуктивність осколка. Він може проводити кілька міграцій паралельно через різні пари осколки, якщо вони незалежні.
Автоматичний балансир
Баланкер працює як фоновий потік на первинному вузлі Config Server і постійно контролює баланс даних SHARD. Він відстежує розмір даних на шматок, щоб визначити, чи потрібні міграції відповідно до порігу настроюваного балансу. Коли відмінності в розмірі даних між осколками перевищують цей поріг, балансир ініціює міграції.
Балансер працює в основному прозоро до додатків, але він може бути тимчасово відключений для цілей технічного обслуговування або настройки. Він також поважає зони, налаштовані в кластері, гарантуючи, що шматки мігрувались у відповідних межах зони.
Команди міграції вручну
Поки балансир автоматизує міграцію шматки, MongoDB також дозволяє вручну керувати, використовуючи такі команди, як `MoveChunk` та` Moverange`. Ці команди примушують міграцію конкретних шматочків або шматки від одного осколення до іншого.
- `MoveChunk` використовується для переміщення шматка, що містить певне значення ключа Шарда до вказаного осколка. Це корисно для цільових міграцій для балансування навантаження або місцевості даних.
- `Moverange` дозволяє переміщувати суміжний діапазон клавіш Шарда, корисно для складніших стратегій відновлення даних.
Адміністратори можуть використовувати ці команди для попереднього розщеплення шматочків для рівномірного розподілу даних перед масовим прийомом або для вирішення збоїв міграції, спричинених врівноваженням обмежень у вікні.
Поводження з осиротями та послідовністю
Під час і після міграції шматки осиротілі документи (документи, які більше не належать до призначених діапазонів шматки донора), можуть тимчасово існувати на донорському осколці, поки вони не будуть очищені.
MongoDB забезпечує послідовність протягом усієї міграції, застосовуючи операції в послідовності та використовуючи механізм координації, який блокує записи під час критичного розділу. Після міграції очищення сироти проходить асинхронно, уникаючи втручання у поточні запити.
Запуск MongoDB 5.3, зміни потоків не генерують подій для оновлень до осиротічних документів під час міграції, щоб підтримувати точність потоку подій.
Вплив на продуктивність та операції
Міграції з шматками несуть накладні витрати, включаючи споживання пропускної здатності мережі, процесор та вводу/вивод дисків, які можуть вплинути на продуктивність кластера. MongoDB мінімізує цей вплив на:
- Обмеження участі Шарда одночасно однією міграцією.
- Чергона міграція та дозволяє видаляти фази запускатись, щоб швидше вивантажити.
- Використання параметрів дросельної роботи для налаштування одночасності міграції та написання стурбованості під час міграції.
Переміщення даних також тимчасово впливає на вторинні читання, які можуть пропустити документи під час фази очищення сиріт, тому додатки повинні врахувати це при розробці своїх запитів.
Міграція в конкретних сценаріях
У таких випадках, як переміщення даних між зонами з діапазоном тегів, або від непостійного до осколених налаштувань, MongoDB мігрує дані поступово на основі оновлених діапазонів або зон -ключів Shard після реконфігурації. Наприклад, видалення старих діапазонів тегів та створення нових спрацьовує міграцію балансира для переміщення даних відповідно.
Під час переміщення кластерів MongoDB до хмарних рішень або між осколеними кластерами, інструменти міграції часто виконують міграцію, що копіює даними SHARD індивідуально, зберігаючи розподіл ключів SHARD.
Інструменти та утиліти для міграції
Служби передачі даних (DTS) та інші сторонні інструменти допомагають переміщувати дані між екземпляром або кластерами MongoDB, обробкою картографування SHARD, узгодженим даними та додатковими оновленнями. Ці інструменти часто підтримують переміщення з не зафіксованих до осколених кластерів, призначивши ключові значення SHARD за замовчуванням для джерела даних, які не мають клавіш Shard.
Підсумок ключових моментів
- Дані перегородки MongoDB на шматки, розподілені по осколках за допомогою осколкових клавіш.
- Баланкер автоматично мігрує шматки для підтримки збалансованого розподілу даних.
- Міграція передбачає клонування даних, записи під назвою, атомну передачу та асинхронне очищення.
- Міграції обмежуються одним на осколок, щоб зменшити вплив системи.
- Команди міграції вручну забезпечують адміністративний контроль для розподілу шматок.
- Документи-сирота очищаються асинхронно після міграції.
- Міграція тимчасово впливає на продуктивність та вторинну послідовність читання.
- Міграція між зонами або змінами в діапазоні ключів SHARD здійснюється шляхом реконфігурації, що викликає міграції.
- Інструменти міграції допомагають руху даних між кластерами або архітектурою.
Цей механізм міграції гарантує, що кластери MongoDB залишаються збалансованими, масштабованими та виконаними в міру зростання даних та конфігурації кластерів, що забезпечують постійну доступність з мінімальним порушенням додатків.