Я использую func для выполнения параллельных команд на наших серверах.
На днях у нас возникла проблема, когда перезапуск службы puppet
через func
заставил все наши разрывы ударить по нашему puppetmaster
в то же время.
Мой вопрос: Как я могу выполнить ту же самую команду на наборе серверов, добавляя задержку перед ее выполнением на отдельных серверах?
Например.: random_delay && service puppet restart
Меня интересует random_delay
часть команды.
sleep $((RANDOM % MAXWAIT))
где MAXWAIT - максимальная желаемая задержка в секундах.
Мне очень нравится новаторское, но далеко не идеальное решение S19N. Я только говорю, что это далеко не идеально, поскольку все еще в значительной степени недетерминировано, когда что-то действительно произойдет. Я бы предпочел иметь возможность гарантировать, когда что-то произойдет, и что произойдет, когда это произойдет.
Марионеточная оркестровка на самом деле жесткий проблема.
Одно из лучших решений - использовать MCollective который не только позволит вам настроить, когда марионетка запускается на вашем кластере машин, но вы также можете использовать ее для других подобных проблем оркестрации.
0 */12 * * * root perl -e 'sleep int(rand(43200))' && service puppet restart
Это будет спать произвольное количество от 0 секунд до 12 часов (43200 = 12 x 60 x 60) каждые 12 часов.