Làm cách nào tôi có thể triển khai nâng cấp và khởi động lại hệ điều hành với Puppet hoặc MCollective?


8

Tôi đang tìm cách tốt nhất để thực hiện nâng cấp thường xuyên cho cơ sở hạ tầng của mình.

Thông thường, điều này liên quan đến việc làm điều này trên mỗi máy chủ, từng cái một:

sudo yum update -y && sudo reboot

Nhưng, tôi đang đạt đến giới hạn của việc có thể mở rộng được.

Tôi muốn chỉ khởi động lại một nút tại một thời điểm trong mỗi vai trò của mình, vì vậy, giả sử, tôi không gỡ bỏ tất cả các bộ cân bằng tải của mình, hoặc các thành viên cụm DB, cùng một lúc.

Lý tưởng nhất, tôi muốn làm một cái gì đó như:

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

Nhưng, điều đó dường như không tồn tại. Tôi cũng không chắc chắn nếu sử dụng tác nhân "shell" là cách tiếp cận tốt nhất?

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

Tôi chỉ đang nhìn vào loại công cụ sai cho công việc này, mặc dù? Có cách nào tốt hơn để quản lý các kiểu khởi động lại này không, nhưng bằng cách nào đó tôi có thể liên kết với các vai trò được gán cho Con rối của mình, để tôi có thể thoải mái rằng tôi không gỡ bỏ bất cứ điều gì quan trọng ngay lập tức, nhưng tôi vẫn có thể làm một số cập nhật song song và khởi động lại?


Tại sao khởi động lại ( unix.stackexchange.com/a/28162/65367 )? Nó có cần phải là con rối hay các phép thuật khác cũng được cho phép không?
030

Bởi vì có những cập nhật nhân Linux thường xuyên gần đây, nên yêu cầu khởi động lại.
pioto

Đồng ý. Tôi đã thử nghiệm nó và nó hoạt động trên hệ thống của tôi. Bạn có thể kiểm tra nó trên hệ thống của bạn không?
030

Câu trả lời:


2

Cấu hình

Triển khai

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

trên cả hai máy chủ, tức là test-server1test-server2.

Dịch vụ

Khởi động lại mcollective trên cả hai dịch vụ:

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

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

Các lệnh

Chạy các lệnh sau trên nút máy chủ mcollective:

Chủ nhà test-server2đang lắng nghe:

[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

Khởi động lại 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

Các test-server2là khởi động lại:

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


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

và nó đã được khởi động lại:

[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

Lưu ý rằng cũng có thể tắt máy chủ:

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

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

test-server2                             Shutdown initiated

Finished processing 1 / 1 hosts in 213.18 ms

Mã gốc

/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

Mã sửa đổi

/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

Chỉ huy

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

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


Finished processing 1 / 1 hosts in 1001.22 ms

Rất nhiều chi tiết tốt, cảm ơn. Tôi đang tìm kiếm một lệnh duy nhất có thể thực hiện lệnh cập nhật và khởi động lại cùng một lúc, ví dụ như mco power update-and-restart -I test-server. mco sau đó sẽ áp dụng cập nhật và khởi động lại cho một máy chủ, đợi cho nó hoạt động trở lại, sau đó áp dụng cho máy chủ thứ hai.
Benjamin Goodacre
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.