Шардирование в Managed Service for MongoDB
Шардирование — стратегия горизонтального масштабирования данных, при которой части коллекций MongoDB размещаются на разных хостах кластера. Шард (набор хостов) связывается с набором данных с помощью ключа шардирования. MongoDB поддерживает шардирование для работы с большими объемами данных и для увеличения пропускной способности СУБД. Шардирование особенно полезно, когда вертикальное масштабирование (увеличение мощности сервера) нерентабельно или невозможно.
Managed Service for MongoDB поддерживает основные стратегии шардирования данных:
- по хешу
(ключ шардирования на базе хеша); - по диапазону значений
(ranged sharding).
Более подробно шардирование баз MongoDB рассмотрено в документации MongoDB
Преимущества шардирования
Шардирование позволяет распределить нагрузку по хостам базы данных и обычно используется в следующих случаях:
- Ожидаются высокая частота запросов к базе данных и быстрый рост количества данных.
- Приложение требует все больше и больше ресурсов, но наращивать вычислительную мощность хостов кластера (дисков, памяти и процессоров) уже невозможно.
Горизонтальное масштабирование подразумевает распределение набора данных и нагрузки по нескольким узлам. Также для увеличения дисковой емкости могут добавляться серверы. Емкость одной машины или ее скорость могут быть невысокими, но в горизонтально масштабируемом кластере каждая машина обрабатывает лишь часть общей нагрузки и хранит лишь часть общих данных. Это делает систему потенциально эффективнее, чем единственный сервер с большой емкостью и быстрыми дисками.
Шардирование помогает:
-
Преодолевать технические ограничения.
Потребность работать с большими наборами данных может привести к тому, что инфраструктура хранения данных упрется в предел возможностей оборудования, доступного на рынке (например, IOPS дисковой подсистемы).
Если приложения работают близко к лимитам производительности, имеет смысл разбить информацию на шарды и распределить операции чтения.
-
Создавать геораспределенные системы.
Распределение шардов кластера по различным регионам может помочь:
- улучшить доступность для региональных пользователей;
- соблюсти местные законы, например, требование о хранении данных на территории определенной страны или региона.
-
Повышать отказоустойчивость.
Шардирование позволяет изолировать отказы отдельных хостов или наборов реплик. Без шардирования потеря отдельного хоста приводит к потере доступа ко всему набору данных, которые он содержит. А отказ, например, одного шарда из пяти оставляет доступными 80% данных коллекции.
Чтобы уменьшить риск отключения целого шарда, шарды рекомендуется настраивать как наборы трех реплик. Распределение хостов одного шарда по различным зонам доступности Yandex Cloud позволяет увеличить доступность данных.
-
Повышать скорость выполнения запросов.
Скорость запросов может снижаться из-за конкуренции за ресурсы. Обычно это происходит при росте количества операций чтения или затрат процессорного времени на их обработку.
Шарды выполняют запросы к одной и той же коллекции параллельно. Это исключает конкуренцию за общие ресурсы (процессор, дисковая подсистема) и сокращает время обработки запросов.
Использование шардирования
Чтобы распределить данные по шардам:
- Включите шардирование на уровне кластера Managed Service for MongoDB.
- Добавьте нужное количество шардов.
- Включите шардирование для нужных коллекций.
См. также пример шардирования.
Особенности управления шардированием в Managed Service for MongoDB
Managed Service for MongoDB управляет шардами следующим образом:
-
Из-за ограниченных ресурсов кластер с хостами классов b1.medium и b2.medium не шардируется.
-
Кластер можно создать шардированным либо включить шардирование позже.
-
За управление шардированием в Managed Service for MongoDB отвечают хосты с ролями
MONGOS
(маршрутизация запросов пользователей ) иMONGOCFG
(хранение конфигурации шардов ). -
В Managed Service for MongoDB можно включить шардирование двух типов:
-
Стандартное — экономичный тип шардирования для кластеров, в которых нет особых требований к хостам, управляющим шардированием.
В кластер будут добавлены хосты
MONGOINFRA
, сочетающие в себе ролиMONGOS
иMONGOCFG
. Минимальное количество таких хостов — три. -
Расширенное — гибкий тип шардирования для кластеров, в которых требуется определенное количество хостов каждой роли.
В кластер будут добавлены выделенные сервера
MONGOS
иMONGOCFG
. Минимальное количество хостовMONGOS
— два, хостовMONGOCFG
— три.
-
-
В кластере с включенным шардированием:
- Все запросы к Managed Service for MongoDB должны направляться к хостам
MONGOS
илиMONGOINFRA
вместоMONGOD
. - Нельзя отключить шардирование или полностью удалить хосты, которые поддерживают работу шардирования: в кластере всегда будет поддерживаться минимальное количество хостов
MONGOS
иMONGOCFG
илиMONGOINFRA
.
- Все запросы к Managed Service for MongoDB должны направляться к хостам