Наша установка: 1 приложение, десятки экземпляров. Каждый экземпляр является одним из контейнеров Baremetal / KVM или vmware VM / LXC (в зависимости от требуемого размера).
Мы обновляем все экземпляры через марионетку (без мастера), которая выполняется mcollective. Это прекрасно работает.
Проблема заключается в высокой загрузке жесткого диска, когда марионетка выполняется на всех экземплярах одновременно,
Когда мы выполняем mco rpc puppetrun run
, марионетка немедленно выполняется на всех машинах в кластере, что приводит к перегрузке жесткого диска из-за распаковки пакетов deb.
Мы хотели бы запускать mcollective последовательно на ограниченном количестве серверов одновременно.
Мы обновили выполнение mcollective, чтобы:
mco rpc puppetrun run --batch XXX --batch-sleep YYY
что помогает, но не идеально, поскольку иногда мы развертываем небольшие изменения, которые обрабатываются в течение секунды, а иногда и большие изменения с миграциями базы данных, выполнение которых занимает десятки секунд.
Мы будем рады подсказке о том, как подойти к этому вопросу.
А также мы хотели бы пропустить все решения, требующие внешней инвентаризации, так как количество экземпляров изменяется динамически. В этом плане Mcollective великолепен.