サーバーで並列コマンドを実行するために func を使用しています。
先日、puppet
を介したfunc
のサービス再起動により、すべてのサーバーが同時にpuppetmaster
にヒットするという問題が発生しました。
私の質問:個々のサーバーで実行される前に遅延を追加しながら、サーバーのセットでまったく同じコマンドを実行するにはどうすればよいですか?
例:random_delay && service puppet restart
コマンドのrandom_delay
の部分に興味があります。
sleep $((RANDOM % MAXWAIT))
ここで、MAXWAITは必要な最大遅延(秒)です。
私はS19Nの革新的であるが、理想的なソリューションとは言えません。物事が実際に発生する時期はまだ確定的ではないため、理想的とは言えません。何かがいつ起こるか、そしていつ起こるかを保証できるほうがずっといいです。
人形のオーケストレーションは実際にはhard問題です。
「ベストプラクティス」ソリューションの1つは、 MCollective を使用することです。これにより、puppetをマシンのクラスターで実行するタイミングを設定できるだけでなく、他のマシンにも使用できます。同様のオーケストレーションの問題。
0 */12 * * * root Perl -e 'sleep int(Rand(43200))' && service puppet restart
これは、12時間ごとに0秒から12時間(43200 = 12 x 60 x 60)のランダムな量でスリープします。