Puppet 또는 MCollective를 사용하여 롤링 OS 업그레이드 및 재부팅을 어떻게 배포 할 수 있습니까?


8

인프라에 대한 정기적 인 롤링 업그레이드를 수행하는 가장 좋은 방법을 찾고 있습니다.

일반적으로 각 호스트에서 한 번에 하나씩이 작업을 수행합니다.

sudo yum update -y && sudo reboot

그러나 나는 확장 가능한 한계에 부딪 치고 있습니다.

각 역할 내에서 한 번에 하나의 노드 만 재부팅하여 모든로드 밸런서 또는 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

최근 리눅스 커널 업데이트가 빈번하기 때문에 다시 시작해야합니다.
pioto

확인. 나는 그것을 테스트했고 내 시스템에서 작동합니다. 시스템에서도 확인할 수 있습니까?
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-server1test-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와 같이 한 번에 하나씩 업데이트 및 재부팅을 수행 할 수있는 단일 명령을 찾고있었습니다. 그런 다음 mco는 하나의 서버에 업데이트 및 재부팅을 적용하고 서버가 다시 나타날 때까지 기다린 다음 두 번째 서버에 적용합니다.
Benjamin Goodacre 2012
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.