Что делает балансировщик
Балансировщик — это фоновый процесс в шардированном кластере MongoDB, который следит за тем, чтобы данные были равномерно распределены по всем шардам.
Как он работает
- Он постоянно отслеживает количество чанков на каждом шарде
- Когда обнаруживается дисбаланс, превышающий установленный порог, запускается миграция
- Он автоматически перемещает чанки с перегруженных шардов на недозагруженные
- Миграции происходят в фоне с минимальным влиянием на работу кластера
Ключевые технические детали
Балансировщик работает на маршрутизаторе mongos и использует простое правило:
if (maxChunks - minChunks) > threshold → trigger migration
- Порог по умолчанию варьируется в зависимости от общего количества чанков
- Одновременно происходит только одна миграция на один шард, чтобы избежать деградации производительности
- Ты можешь настроить окна балансировки для ограничения активности в непиковые часы
Почему это важно
Без балансировщика некоторые шарды могли бы стать хотспотами и обрабатывать непропорционально больше операций чтения и записи, что противоречит смыслу шардирования. Балансировщик обеспечивает:
- Сохранение эффективности горизонтального масштабирования
- Равномерное распределение хранилища и нагрузки
- Автоматическое распределение данных на новые шарды, добавляемые в кластер
Важные замечания
- Балансировщик можно остановить вручную, используя
sh.stopBalancer()
- Миграции чанков потребляют сетевые ресурсы и I/O
- Правильный выбор ключа шардирования снижает необходимость в частом вмешательстве балансировщика