Обзор
Построение индекса в режиме rolling — это стратегия создания индексов на replica set по одному члену за раз, вместо создания на всех узлах одновременно. Это гарантирует, что остальной кластер продолжает обслуживать трафик в штатном режиме во время этого процесса.
Пошаговый процесс
- Удали одну secondary из replica set
- Построй индекс на этой secondary как на standalone-инстансе
- Переподключи secondary к replica set и дай ей наверстать отставание по репликации
- Повтори те же шаги для каждой оставшейся secondary
- Понизь в ранге primary и примени то же построение индекса к ней в последнюю очередь
Почему это минимизирует влияние на производительность
- В любой момент только один член испытывает нагрузку от построения индекса
- Остальные члены продолжают обрабатывать трафик чтения и записи без деградации производительности
- Построение на standalone-узле убирает оверхед репликации во время самого построения
- Primary всегда обновляется в последнюю очередь, минимизируя нарушение операций записи
Ключевые моменты
- Rolling-сборки требуют ручного выполнения с использованием режима
--standalone, или могут управляться через инструменты автоматизации
- Эта техника особенно важна для больших коллекций, где построение индексов может быть ресурсоёмким
- Начиная с MongoDB 4.4+, одновременное построение индексов улучшилось за счёт уменьшенного локинга, но rolling-сборки по-прежнему остаются ценными для критичных production-окружений, где важна стабильная производительность
- Всегда убедись, что secondary полностью наверстала отставание по oplog перед тем, как переходить к следующему члену
Заключение
Rolling-сборки индексов меняют скорость построения на операционную стабильность, что делает их предпочтительным подходом, когда приоритет — поддерживать высокую доступность и стабильную производительность по всему replica set.