4. План доклада
Случай 0. Включили N новых узлов. Установка ОС и ПО
Случай 1. Что-то идёт немного не так на N узлах(Easy)
Случай 2. + … и непонятно как быстро исправить (Medium)
Случай 3. + … и потерялся доступ к ним (Hard)
Случай 4. + … и нельзя перезагружаться (Nightmare)
Примечание: N > 100
5. Случай 0 Включили N новых узлов
N = 1 → установка с USB или CDROM
N > 100 → установка по сети
10. Конфиг инсталлятора
Самый главный файл с ответами на вопросы установки
/var/www/ks/setup-phi.cfg (часть 1 из 2):
install
url --url http://192.168.80.1/centos/ # откуда брать дистрибутив
text # выключаем gui
lang en_US.UTF-8
timezone --utc Asia/Yekaterinburg
rootpw --iscrypted $6$AkJqf3$9jk0861a75SAQlG4uDUO8Da..lBNT8fkoc0KGGxg/
services --enabled autofs,nslcd,nscd,munge,slurm # включаем сервисы
services --disabled postfix,NetworkManager # выключаем сервисы
# Разделы на диске
… удалено …
network --bootproto=dhcp --device=enp0s26u1u5u5 --onboot=off
reboot # Перезагрузиться после окончания установки
17. Автоконфигурация узлов. Итоги
Новые узлы при подключении сами устанавливаются и настраиваются
Возможно, потребуется добавить одну строчку в конфигурацию
DHCP-сервера (у нас это автоматизировано)
19. Кстати: как мы понимаем что что-то пошло не так?
– Icinga (форк Nagios) с кастомными модулями + смс, email
– Система распределения ресурсов
– Тесты для узлов
– Патченный collectl + система визуализации с разбивкой по
задачам
– Фидбек от пользователей
Посмотреть (можно прямо сейчас):
http://umt.imm.uran.ru/procstat.php
https://alexbers.com/stat/
22. Запуск команды на нескольких узлах
A) $ for host in node{10..55}; do ssh "$host" uname -r; done
B) $ for host in node{10..55}; do ssh "$host" uname -r& done
C) $ pdsh -w node[2,4-6,10] uname -r
node2: 2.6.32-573.el6.x86_64
node10: 2.6.32-573.el6.x86_64
node5: 2.6.32-573.el6.x86_64
node6: 2.6.32-573.el6.x86_64
node4: 2.6.32-573.el6.x86_64
2.6.32-573.el6.x86_64
2.6.32-573.el6.x86_64
2.6.32-573.el6.x86_64
2.6.32-573.el6.x86_64
…
25. Параллельное выполнение команды. Итоги
Умеем быстро выполнять команды на группах узлов
Умеем находить узлы, где результат выполнения команд
отличается
27. Как загрузиться по сети?
Решение: изменить настройки bios/efi, чтобы узел
грузился по сети и свести задачу к предыдущей
(«перенакатить узел»)
IBM – ASU (Advanced Settings Utility)
$ asu64 set IMM.PXE_NextBootEnabled Enabled
$ reboot
HP – hp-scripting-tools
$ hp-reboot pxe
31. Доступ через управляющий модуль
В серверы встраивается плата управляющего модуля с
доступом через Ethernet
HP – Integrated Lights-Out
IBM – Integrated Management Module
Нужен API
32. API дистанционного управления
У HP есть официальный perl'овский API.
И есть неофициальный питоновский:
https://github.com/seveas/python-hpilo:
import hpilo
ilo = hpilo.Ilo(host, login="admin", password="admin")
ilo.set_one_time_boot("network")
ilo.reset_server()
Существует отраслевой стандарт IPMI
$ ipmitool -I lanplus -H host -U admin -P admin chassis
bootparam pxe
34. Доступ через управляющие модули. Итоги
Большинство производителей серверов встраивают
модули удалённого управления и предоставляют API для них
Если включён IPMI, срочно поместите его в отдельный vlan :)
43. Доступ к консоли через веб – ужасен
Консоль без Copy-Paste и за $$
44. Правильный доступ к консоли.
Решение: используем удалённый доступ к serial-
порту
– работает copy-paste
– не требует лицензии
– работает по ssh, по ключам, в одну команду
$ ssh admin@node2-mgmt -t console 1
45. Настраиваем хост на работу с serial-консолью
Необходимо:
– выставить в bios/efi настройку, чтобы процесс
загрузки (до ОС) попадал в serial-port
– добавить serial --unit=1 --speed=115200 в
параметры загрузчика
– добавить console=ttyS1,115200 в параметры ядра
46. Автоматизируем работу с консолью
import pexpect
import sys
F1 = "x1bOP"
UP = "x1b[A"
DOWN = "x1b[B"
ESC = "x1b"
ssh_args = [ "-l", "admin", sys.argv[1], "-t"]
s = pexpect.spawn("/usr/bin/ssh", ssh_args, logfile=sys.stdout, timeout=180)
s.expect('system> '); s.sendline("reset")
s.expect('system> '); s.sendline("console 1")
s.expect('<F1> Setup'); s.send(F1)
s.expect('Exit Setup'); s.send(DOWN * 4 + "rn")
s.expect('Select Next One-Time Boot'); s.send(DOWN * 8 + "rn")
# skipped
s.expect('Do you want to Reset System'); s.send("y")
47. Удалённый доступ к консоли. Итоги
Не пользуйтесь веб-интерфейсом, вешайте консоль на
последовательный порт и пользуйтесь ей
С помощью модуля Pexpect можно автоматизировать ввод команд в
консоль сотен машин. Получается очень грязно, но работает.