Я ищу лучший способ выполнять регулярные последовательные обновления для моей инфраструктуры.
Обычно , это включает в себя выполнение этого на каждом хосте, по одному:
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, чтобы я мог чувствовать себя комфортно, что я не снимаю ничего важного сразу, но что я все еще могу выполнить несколько параллельных обновлений и перезагрузок?
Конфигурация
Развернуть
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