Как я могу развернуть последовательные обновления и перезагрузки ОС с помощью Puppet или MCollective?

Я ищу лучший способ выполнять регулярные последовательные обновления для моей инфраструктуры.

Обычно , это включает в себя выполнение этого на каждом хосте, по одному:

sudo yum update -y && sudo reboot

Но я достигаю пределов масштабируемости.

Я хочу перезагружать только один узел за раз в каждой из моих ролей, поэтому что, скажем, я не отключаю все свои балансировщики нагрузки или элементы кластера БД одновременно.

В идеале я бы хотел сделать что-то вроде:

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, чтобы я мог чувствовать себя комфортно, что я не снимаю ничего важного сразу, но что я все еще могу выполнить несколько параллельных обновлений и перезагрузок?

8
задан 11 February 2017 в 23:52
1 ответ

Конфигурация

Развернуть

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

на обоих хостах, то есть тестовый сервер1 и тестовый сервер2 .

Службы

Перезапустите 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

тестовый сервер2 перезагружается:

[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

 модуль MCollective
  модуль Агент
  class Power  out,: chomp => true)
  reply [: output] = "Завершение работы начато"
  конец

  действие "перезагрузка" сделать
  out = ""
  run ("/ sbin / shutdown -r сейчас",: stdout => out,: chomp => true)
  reply [: output] = "Начата перезагрузка"
  конец

  конец
  конец
конец

 # vi: tabstop = 2: expandtab: ai: filetype = ruby
 

/usr/libexec/mcollective/mcollective/agent/power.ddl

 метаданные: name => "power",
  : description => «Агент, который может выключить или перезагрузить их систему»,
  : author => "А.Броэкгоф",
  : license => "Apache 2",
  : version => «2.1»,
  : url => "http://github.com/arnobroekhof/mcollective-plugins/wiki",
  : timeout => 5

действие "перезагрузка",: description => "Перезагрузка системы" делаем
  дисплей: всегда

  вывод: вывод,
  : description => «Перезагрузить систему»,
  : display_as => "Мощность"
конец

действие "выключение",: description => "Завершение работы системы" сделать
  дисплей: всегда

  вывод: вывод,
  : description => «Выключить систему»,
  : display_as => "Мощность"
конец
 

/usr/share/ruby/vendor_ruby/mcollective/application/power.rb

 класс MCollective :: Application :: Power  истина
  mc.send (конфигурация [: команда]). каждый do | node |
  конфигурация корпуса [: команда]
  при "перезагрузке"
  printf ("% - 40s% s \ n", узел [: отправитель], узел [: данные] [: вывод])
  при "выключении"
  printf ("% - 40s% s \ n", узел [: отправитель], узел [: данные] [: вывод])
  конец
  конец

  printrpcstats

  mc.disconnect

  конец

конец

 # 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
2
ответ дан 2 December 2019 в 23:07

Теги

Похожие вопросы