Bagaimana saya bisa menggunakan pemutakhiran OS bergulir & reboot dengan Wayang atau MCollective?

8

Saya mencari cara terbaik untuk melakukan upgrade bergulir rutin untuk infrastruktur saya.

Biasanya, ini melibatkan melakukan ini pada setiap host, satu per satu:

sudo yum update -y && sudo reboot

Tapi, saya mencapai batas itu menjadi scalable.

Saya hanya ingin me-reboot satu node pada satu waktu dalam setiap peran saya, sehingga, katakanlah, saya tidak mencatat semua load balancers, atau anggota cluster DB, pada saat yang sama.

Idealnya, saya ingin melakukan sesuatu seperti:

for role in $(< roles_list.txt) ; do
    mco package update_all_and_reboot \
        --batch 1 --batch-sleep 90 \
        -C $role -F environment=test
done

Tapi, itu sepertinya tidak ada. Saya tidak yakin apakah menggunakan agen "shell" adalah pendekatan terbaik, baik?

mco shell run 'yum update -y && reboot' \
    --batch 1 --batch-sleep 90

Apakah saya hanya melihat alat yang salah untuk pekerjaan ini? Apakah ada sesuatu yang lebih baik untuk mengelola reboot bergulir semacam ini, tetapi saya entah bagaimana dapat terhubung dengan peran yang saya tetapkan untuk Wayang, sehingga saya bisa merasa nyaman bahwa saya tidak mencatat sesuatu yang penting sekaligus, tetapi saya masih bisa melakukan beberapa pembaruan paralel & reboot?

pioto
sumber
Mengapa reboot ( unix.stackexchange.com/a/28162/65367 )? Apakah perlu boneka atau apakah ada solusi lain yang diperbolehkan?
030
Karena sering ada pembaruan kernel Linux akhir-akhir ini, yang memang memerlukan restart.
pioto
Baik. Saya telah mengujinya dan berfungsi pada sistem saya. Bisakah Anda memeriksanya di sistem Anda juga?
030

Jawaban:

2

Konfigurasi

Menyebarkan

cd /usr/share/ruby/vendor_ruby/mcollective/application
wget https://raw.githubusercontent.com/arnobroekhof/mcollective-plugin-power/master/application/power.rb

dan

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

pada kedua host, yaitu test-server1dan test-server2.

Jasa

Mulai ulang mcollective di kedua layanan:

[vagrant@test-server1 ~]# sudo service mcollective restart

dan

[vagrant@test-server2 ~]# sudo service mcollective restart

Perintah

Jalankan perintah berikut pada node server mcollective:

Tuan rumah test-server2sedang mendengarkan:

[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

Mulai ulang 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

Ini test-server2me-reboot:

[vagrant@test-server1 ~]$ mco ping
test-server1                             time=13.87 ms


---- ping statistics ----
1 replies max: 13.87 min: 13.87 avg: 13.87

dan telah di-reboot:

[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

Perhatikan bahwa dimungkinkan untuk mematikan host juga:

[vagrant@test-server1 ~]$ mco power shutdown -I test-server2

 * [ ============================================================> ] 1 / 1

test-server2                             Shutdown initiated

Finished processing 1 / 1 hosts in 213.18 ms

Kode asli

/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

Kode yang dimodifikasi

/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

Perintah

[vagrant@test-server1 ~]$ mco power update-and-reboot -I test-server2

 * [ ============================================================> ] 1 / 1


Finished processing 1 / 1 hosts in 1001.22 ms
030
sumber
Banyak detail bagus, terima kasih. Saya sedang mencari satu perintah yang dapat melakukan pembaruan-dan-reboot satu per satu, misalnya mco power update-and-reboot -Saya uji-server. mco kemudian akan menerapkan pembaruan dan reboot ke satu server, tunggu sampai muncul kembali, lalu terapkan ke yang kedua.
Benjamin Goodacre