Я ищу способ управления пороговыми значениями миграции коллекций в mongodb. Эти пороговые значения описаны в https://docs.mongodb.com/manual/core/sharding-balancer-administration/#sharding -migration-thresholds
То, что я вижу в этих значениях, заключается в том, что они настроили пороговые значения миграции примерно для 10% подсчета фрагментов для небольшого числа куски (0-20: 2, 20-80: 4, 80+: 8). Кроме того, он заблокирован на 8 чанках: только 8 чанков, отличающихся между членами шарда, будут инициировать миграцию.
Для наших коллекций, имеющих высокий уровень активности и большие объемы данных, это приводит к балансировке thra sh - почти всегда есть разница в 8 кусков, все время. С высокими показателями транзакций для сегментированной коллекции существует ряд вполне приемлемых причин временного дисбаланса (который я не буду здесь описывать). Когда мы отключаем балансировщик, небольшие временные дисбалансы часто затем органически исправляются по мере изменения активности в кластере. Когда балансировщик включен, к тому времени, когда он завершает одну миграцию, сразу же запускается другая (или многие параллельно).
При таких заблокированных порогах наши большие коллекции постоянно sh - использование IOPS и пропускной способности сети, которые мы действительно хотели бы использовать другими способами. Эти крошечные миграции также не имеют практической пользы: если мы говорим о большой коллекции, то 8 фрагментов могут быть исчезающе небольшим количеством данных по сравнению с любой реальной рабочей нагрузкой. Поэтому мы тратим много энергии на перемещение множества маленьких фрагментов для достижения нулевой эффективности.
Я бы хотел найти параметр файла конфигурации, который - как минимум - позволяет мне переопределить эти значения. Еще лучше было бы ввести дробную политику, например, 10% от количества кусков в коллекции. Я не вижу никаких элементов управления этого типа в документации mon go, но, возможно, упускаю его.
Если это не удастся, мне придется раскрутить код и перестроить его сам, чтобы собрать из источник, так что я надеюсь, что кто-то уже решил это, и я просто не вижу, где это контролировать. Заранее спасибо!