PuppetまたはMCollectiveでローリングOSのアップグレードと再起動をデプロイするにはどうすればよいですか?


8

インフラストラクチャの定期的なローリングアップグレードを実行する最良の方法を探しています。

通常、これには、各ホストで一度に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が割り当てたロールと何らかの形でリンクできるため、一度に重要なものをすべて取り下げなくても安心できますが、それでもまだいくつかの並行更新と再起動を行いますか?


なぜ再起動するのですか(unix.stackexchange.com/a/28162/65367)?それは人形である必要がありますか、それとも他の溶液も許可されていますか?
030

最近のLinuxカーネルの更新は頻繁に行われるため、再起動が必要です。
pioto 2017

OK。私はそれをテストしました、そしてそれは私のシステムで動作します。システムでも確認できますか?
030

回答:


2

構成

デプロイ

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

たくさんの細部、ありがとう。mco power update-and-reboot -I test-serversのように、一度に1つずつ更新と再起動を実行できる単一のコマンドを探していました。mcoは、1つのサーバーに更新と再起動を適用し、それが回復するのを待ってから、2番目のサーバーに適用します。
Benjamin Goodacre 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.