インフラストラクチャの定期的なローリングアップグレードを実行するための最良の方法を探しています。
通常、これには、各ホストで一度に1つずつこれを行うことが含まれます。
Sudo yum update -y && Sudo reboot
しかし、私はそれがスケーラブルであることの限界に達しています。
各ロール内で一度に1つのノードのみを再起動したいので、たとえば、すべてのロードバランサーまたはDBクラスターメンバーを同時に停止することはありません。
理想的には、次のようなことをしたいと思います。
for role in $(< roles_list.txt) ; do
mco package update_all_and_reboot \
--batch 1 --batch-sleep 90 \
-C $role -F environment=test
done
しかし、それはまったく存在しないようです。 「シェル」エージェントを使用するのが最善の方法かどうかもわかりません。
mco Shell run 'yum update -y && reboot' \
--batch 1 --batch-sleep 90
しかし、私はこの仕事のために間違った種類のツールを見ているだけですか?この種のローリングリブートを管理するためのより良いものはありますが、Puppetが割り当てた役割と何らかの形でリンクできるので、重要なものを一度に削除する必要はありませんが、それでも可能です。いくつかの並列更新と再起動を行いますか?
構成
デプロイ
cd /usr/share/Ruby/vendor_Ruby/mcollective/application
wget https://raw.githubusercontent.com/arnobroekhof/mcollective-plugin-power/master/application/power.rb
そして
cd /usr/libexec/mcollective/mcollective/agent
wget https://raw.githubusercontent.com/arnobroekhof/mcollective-plugin-power/master/agent/power.ddl
wget https://raw.githubusercontent.com/arnobroekhof/mcollective-plugin-power/master/agent/power.rb
両方のホスト、つまりtest-server1
とtest-server2
。
サービス
両方のサービスでmcollectiveを再起動します。
[vagrant@test-server1 ~]# Sudo service mcollective restart
そして
[vagrant@test-server2 ~]# Sudo service mcollective restart
コマンド
Mcollectiveサーバーノードで次のコマンドを実行します。
ホストtest-server2
がリッスンしています:
[vagrant@test-server1 ~]$ mco ping
test-server2 time=25.32 ms
test-server1 time=62.51 ms
---- ping statistics ----
2 replies max: 62.51 min: 25.32 avg: 43.91
test-server2
を再起動します:
[vagrant@test-server1 ~]$ mco power reboot -I test-server2
* [ ============================================================> ] 1 / 1
test-server2 Reboot initiated
Finished processing 1 / 1 hosts in 123.94 ms
test-server2
が再起動しています:
[vagrant@test-server1 ~]$ mco ping
test-server1 time=13.87 ms
---- ping statistics ----
1 replies max: 13.87 min: 13.87 avg: 13.87
そしてそれは再起動されました:
[vagrant@test-server1 ~]$ mco ping
test-server1 time=22.88 ms
test-server2 time=54.27 ms
---- ping statistics ----
2 replies max: 54.27 min: 22.88 avg: 38.57
ホストをシャットダウンすることも可能であることに注意してください。
[vagrant@test-server1 ~]$ mco power shutdown -I test-server2
* [ ============================================================> ] 1 / 1
test-server2 Shutdown initiated
Finished processing 1 / 1 hosts in 213.18 ms
/usr/libexec/mcollective/mcollective/agent/power.rb
module MCollective module Agent class Power<RPC::Agent action "shutdown" do out = "" run("/sbin/shutdown -h now", :stdout => out, :chomp => true ) reply[:output] = "Shutdown initiated" end action "reboot" do out = "" run("/sbin/shutdown -r now", :stdout => out, :chomp => true ) reply[:output] = "Reboot initiated" end end end end # vi:tabstop=2:expandtab:ai:filetype=Ruby
/usr/libexec/mcollective/mcollective/agent/power.ddl
metadata :name => "power", :description => "An agent that can shutdown or reboot them system", :author => "A.Broekhof", :license => "Apache 2", :version => "2.1", :url => "http://github.com/arnobroekhof/mcollective-plugins/wiki", :timeout => 5 action "reboot", :description => "Reboots the system" do display :always output :output, :description => "Reboot the system", :display_as => "Power" end action "shutdown", :description => "Shutdown the system" do display :always output :output, :description => "Shutdown the system", :display_as => "Power" end
/usr/share/Ruby/vendor_Ruby/mcollective/application/power.rb
class MCollective::Application::Power<MCollective::Application description "Linux Power broker" usage "power [reboot|shutdown]" def post_option_parser(configuration) if ARGV.size == 1 configuration[:command] = ARGV.shift end end def validate_configuration(configuration) raise "Command should be one of reboot or shutdown" unless configuration[:command] =~ /^shutdown|reboot$/ end def main mc = rpcclient("power") mc.discover :verbose => true mc.send(configuration[:command]).each do |node| case configuration[:command] when "reboot" printf("%-40s %s\n", node[:sender], node[:data][:output]) when "shutdown" printf("%-40s %s\n", node[:sender], node[:data][:output]) end end printrpcstats mc.disconnect end end # vi:tabstop=2:expandtab:ai
変更されたコード
/usr/libexec/mcollective/mcollective/agent/power.ddl
metadata :name => "power",
:description => "An agent that can shutdown or reboot them system",
:author => "A.Broekhof",
:license => "Apache 2",
:version => "2.1",
:url => "http://github.com/arnobroekhof/mcollective-plugins/wiki",
:timeout => 5
action "update-and-reboot", :description => "Reboots the system" do
display :always
output :output,
:description => "Reboot the system",
:display_as => "Power"
end
/usr/libexec/mcollective/mcollective/agent/power.rb
module MCollective
module Agent
class Power<RPC::Agent
action "update-and-reboot" do
out = ""
run("yum update -y && /sbin/shutdown -r now", :stdout => out, :chomp => true )
reply[:output] = "Reboot initiated"
end
end
end
end
# vi:tabstop=2:expandtab:ai:filetype=Ruby
コマンド
[vagrant@test-server1 ~]$ mco power update-and-reboot -I test-server2
* [ ============================================================> ] 1 / 1
Finished processing 1 / 1 hosts in 1001.22 ms