Вопрос или проблема
Прежде всего, извините меня за отсутствие навыков в IT, так как я совершенно не IT-специалист. Я только что установил маленькую рендер-ферму, состоящую из 16 HP Proliant 380 G5 и 10 Bull Novascale R2 (материнская плата на базе Supermicro). Операционная система — Windows Server 2008 R2. Я хотел бы включать или выключать все серверы с другого компьютера на Windows 7. Компьютер на Windows 7 сейчас находится в той же локальной сети, но я ищу решение, которое может работать даже вне локальной сети. G5 оснащены Ilo 2, в то время как Bull использует IPMI от Supermicro.
На обоих брендах я могу включать или выключать сервер один за другим, используя интерфейс браузера (тестировалось из локальной сети). Я планирую добавить еще 10 серверов (возможно, HP, так как они очень дешевые), и мне безусловно нужно иметь возможность включать или выключать все серверы одновременно. Я почти уверен, что многие профессиональные администраторы сталкивались с такой же задачей, поэтому должно быть способ легко управлять несколькими серверами одновременно. Спасибо за вашу помощь.
Зачем вам нужно выключать или включать эти серверы одновременно? На самом деле это не очень распространенный запрос или действие среди профессиональных системных администраторов.
Тем не менее, вы можете использовать комбинацию инструментов ILO и IPMI: использовать интерфейс SSH ILO для серверов HP и ipmitool для серверов Supermicro.
Либо вы можете просто использовать ipmitool для управления обоими типами систем.
Кроме того, и HP, и Supermicro ILO имеют интерфейс командной строки. Это также может помочь.
Можно предложить альтернативное решение? (Я собираюсь игнорировать тот факт, что серверам не нравится выключаться – возможно, вы загружаетесь с SAN? :P)
Я также предполагаю, что они работают под управлением Linux – потому что рендеринг в Windows ужасно медленный и неэффективный.
Как насчет использования Wake-On-LAN, чтобы разбудить их из спячки и использовать SSH для их выключения. Вы могли бы довольно легко создать скрипт для SSH с помощью одного из множества инструментов (я бы, наверное, обратил внимание на использование Ansible… но это мое мнение).
Если они работают под Windows, и вы хотите, чтобы Windows была контроллером кластера, вы все равно можете использовать Wake-On-LAN для их запуска, но использовать удаленный PowerShell (или подобные команды PSExec) для их выключения.
Или вы можете использовать инструменты ILO/IPMI/BMC для управления подачей питания.
Существует другой, менее эстетичный метод, когда вы подключаете их все к сетевому PDU, тогда вы просто могли бы отключить релейные порты, и это будет все равно, что выдернуть кабели питания.
Посмотрите на Ansible как на инструмент оркестрации, который может взаимодействовать с вашим интерфейсом iLO (или альтернативно Wake-on-Lan) и инструктировать системы для загрузки (или загрузки с загрузочного носителя).
Ansible также может инструктировать операционную систему обновляться, перенастраиваться или выключаться, что работает для большинства (если не всех) дистрибутивов Linux, Unix и Windows.
Для большинства ОС он использует SSH/python, но для Windows использует WinRM/Powershell.
Следующие модули Ansible могут помочь: hp_ilo, wakeonlan, win_reboot и т.д…
Ansible управляет не только аппаратным обеспечением и операционной системой, но также может управлять облачными средами, сетевым оборудованием, приложениями и всем остальным, что имеет соответствующий API.
Интерфейс ssh Ilo принимает следующие команды питания:
power on
: упорядоченный запуск на экземпляре, который выключенpower off
: упорядоченное отключение на нормально работающем экземпляреpower reset
:
нажмите и удерживайте – то же самое, что и нажатие физической кнопки питания на 5 секунд, а затем отпускание. сервер будет выключен в результате этой операции. использование этого варианта может обойти функции плавного выключения операционной системы. этот вариант предоставляет функциональность ACPI, которую реализуют некоторые операционные системы. эти операционные системы ведут себя по-разному в зависимости от кратковременного или длительного нажатия.
power warm
:
заставляет сервер выполнить теплую перезагрузку: процессоры и ресурсы ввода-вывода сбрасываются. использование этого варианта обходит функции плавного выключения операционной системы.
Подключение к iLO 3 через ssh из современной Linux-системы требует некоторых переопределений ssh для подключения с неподдерживаемыми, небезопасными алгоритмами. Ниже приведен пример скрипта для итерации по списку адресов iLO 3 и включения каждого по очереди с рабочего места на Fedora Linux:
#!/usr/bin/env bash
declare -a ilo_address_list=()
ilo_address_list+=( 10.0.0.101 )
ilo_address_list+=( 10.0.0.102 )
ilo_address_list+=( 10.0.0.103 )
# упорядоченный запуск на экземпляре, который выключен
action="power on"
# упорядоченное отключение на нормально работающем экземпляре
#action="power off"
# нажмите и удерживайте - то же самое, что и нажатие физической кнопки питания на 5 секунд, а затем отпускание. сервер будет выключен в результате этой операции. использование этого варианта может обойти функции плавного выключения операционной системы. этот вариант предоставляет функциональность ACPI, которую реализуют некоторые операционные системы. эти операционные системы ведут себя по-разному в зависимости от кратковременного или длительного нажатия.
#action="power reset"
# заставляет сервер выполнить теплую перезагрузку: процессоры и ресурсы ввода-вывода сбрасываются. использование этого варианта обходит функции плавного выключения операционной системы.
#action="power warm"
[ -x /usr/bin/sshpass ] || sudo dnf install sshpass
for ilo_address in ${ilo_address_list[@]}; do
sshpass \
-p ${secret_password} \
ssh \
-o StrictHostKeyChecking=accept-new \
-o ConnectTimeout=1 \
-o PreferredAuthentications=password \
-o PubkeyAuthentication=no \
-o KexAlgorithms=+diffie-hellman-group14-sha1 \
-o HostKeyAlgorithms=+ssh-dss \
-o PubkeyAcceptedKeyTypes=+ssh-dss \
-o Ciphers=+aes256-cbc \
-p 22 \
Administrator@${ilo_address} \
${action}
done
Ответ или решение
Для того чтобы включить или выключить одновременно несколько серверов HP ProLiant 380 G5, вы можете воспользоваться функциями управления, предоставляемыми интерфейсом iLO (Integrated Lights-Out), а также использовать инструмент для управления IPMI (Intelligent Platform Management Interface) на других серверах, таких как Bull Novascale R2. Вот несколько методов, которые могут помочь вам решить вашу задачу:
1. Использование iLO через SSH
HP ProLiant 380 G5 поддерживает управление через SSH. Вы можете создать скрипт для последовательного выполнения команд включения или выключения для каждого сервера. Вот пример Bash-скрипта, который можно использовать:
#!/usr/bin/env bash
declare -a ilo_address_list=(
"10.0.0.101" # Адреса ваших башен iLO
"10.0.0.102"
"10.0.0.103"
)
action="power on" # Для включения серверов
# action="power off" # Для выключения серверов
[ -x /usr/bin/sshpass ] || sudo dnf install sshpass
for ilo_address in "${ilo_address_list[@]}"; do
sshpass \
-p "${secret_password}" \
ssh \
-o StrictHostKeyChecking=accept-new \
-o ConnectTimeout=1 \
-o PreferredAuthentications=password \
-o PubkeyAuthentication=no \
-o KexAlgorithms=+diffie-hellman-group14-sha1 \
-o HostKeyAlgorithms=+ssh-dss \
-o PubkeyAcceptedKeyTypes=+ssh-dss \
-o Ciphers=+aes256-cbc \
-p 22 \
Administrator@"${ilo_address}" \
"${action}"
done
2. Использование IPMI для Bull Novascale R2
Для серверов Bull вы можете использовать инструмент ipmitool
, который позволяет выполнять команды управления питанием через IPMI. Вот как это можно сделать:
#!/usr/bin/env bash
declare -a ipmi_address_list=(
"192.168.1.100" # Адреса ваших серверов Bull
"192.168.1.101"
)
username="username" # Имя пользователя для IPMI
password="password" # Пароль для IPMI
for ipmi_address in "${ipmi_address_list[@]}"; do
ipmitool -I lanplus -H "${ipmi_address}" -U "${username}" -P "${password}" power on # Включение
# ipmitool -I lanplus -H "${ipmi_address}" -U "${username}" -P "${password}" power off # Выключение
done
3. Использование Ansible для автоматизации
Если вы планируете управление большим количеством серверов, стоит рассмотреть использование Ansible для автоматизации процесса. Ansible поддерживает модули для работы с iLO и IPMI, что делает его мощным инструментом для управления вашей инфраструктурой.
Пример использования модуля hp_ilo
в Ansible для включения серверов:
- hosts: hp_servers
tasks:
- name: Power on HP servers
hpilo_power:
name: "{{ item }}"
state: powered_on
loop: "{{ hp_server_ips }}"
Для реализации вышеуказанного подхода вам сначала нужно будет настроить инвентарный файл Ansible и установить необходимые зависимости.
4. ПДУ и другие варианты
Как альтернативный вариант, можно использовать сетевые распределенные устройства (PDU), которые могут давать возможность включения и выключения всей группы серверов путем управления сетевыми портами. Это, однако, менее элегантный и менее безопасный способ управления.
Заключение
Управление несколькими серверами одновременно может быть достигнуто различными методами, каждый из которых подойдет в зависимости от ваших нужд. Используйте iLO и IPMI для управления на уровне аппаратного обеспечения, а также рассмотрите Ansible для автоматизации и упрощения процессов. Успехов в управлении вашим рендер-фермом!