2009/08/26

Пример конфигурирования IPMI на сервере

IPMI - интеллектуальный интерфейс управления платформой, помогающий следить (и не только) за сенсорами состояния железа на сервере (температуры, напряжения, скоростью вращения вентиляторов, состоянием источников питания и т.п.).
Задача - сконфигурировать IPMI-интерфейс на сервере, с возможностью получать данные о сенсорах по сети. Операционная система RHEL/CentOS 5, сервер Intel S5000PAL.
Для начала нужно установить пакеты с модулями и необходимыми утилитами:
yum install OpenIPMI-tools OpenIPMI
chkconfig ipmi on && service ipmi start
Starting ipmi drivers: [ OK ]
Прежде чем приступать к конфигурированию, необходимо решить, на каком физическом сетевом адаптере сервер будет отвечать на IPMI-запросы. На языке IPMI, сетевой адаптер - это канал. Первый канал соответствует первому сетевому интерфейсу, но их mac-адреса отличаются, поэтому можно смело выбирать незанятую ip-сеть для IPMI-мониторинга и назначать выбранному каналу (сетевой плате) ip-адрес для использования IPMI.
Для примера я выбрал первый канал (первую сетевую плату).
ipmitool shell
ipmitool> lan set 1 ipaddr 10.10.16.115
Setting LAN IP Address to 10.10.16.115
ipmitool> lan set 1 defgw ipaddr 10.10.16.254
Setting LAN Default Gateway IP to 10.10.16.254
Открываем возможность использования IPMI по сети, а также говорим, что будем использовать MD5-хэширования при аутентификации:
ipmitool> lan set 1 access on
ipmitool> lan set 1 auth ADMIN MD5
Создаем пользователя, включаем его и назначем ему ADMINISTRATOR-права:
ipmitool> user set name 2 monuser
ipmitool> user set password 2 monpassword
ipmitool> user enable 2
ipmitool> channel setaccess 1 2 ipmi=on privilege=4
ipmitool> user list 1
ID Name Enabled Callin Link Auth IPMI Msg Channel Priv Limit
2 monuser true true false true ADMINISTRATOR
ipmitool>
Вот так выглядит первый канал, после всех приготовлений:
ipmitool> lan print 1
Set in Progress : Set Complete
Auth Type Support : NONE MD5 PASSWORD
Auth Type Enable : Callback :
: User :
: Operator :
: Admin : MD5
: OEM :
IP Address Source : BIOS Assigned Address
IP Address : 10.10.16.115
Subnet Mask : 255.255.255.0
MAC Address : 00:04:23:dc:12:d2
SNMP Community String :
IP Header : TTL=0x40 Flags=0x40 Precedence=0x00 TOS=0x10
BMC ARP Control : ARP Responses Enabled, Gratuitous ARP Enabled
Gratituous ARP Intrvl : 2.0 seconds
Default Gateway IP : 10.10.16.254
Default Gateway MAC : 00:00:00:00:00:00
Backup Gateway IP : 0.0.0.0
Backup Gateway MAC : 00:00:00:00:00:00
RMCP+ Cipher Suites : 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14
Cipher Suite Priv Max : XXXXXXXXXXXXXXX
: X=Cipher Suite Unused
: c=CALLBACK
: u=USER
: o=OPERATOR
: a=ADMIN
: O=OEM
ipmitool>
Теперь с monitoring-сервера можно обращаться к IPMI-интерфейсу и забирать информацию об интересующих сенсорах:
ipmitool -I lan -A MD5 -U monuser -P monpassword -H 10.10.16.115 power status
Chassis Power is on
ipmitool -I lan -A MD5 -U monuser -P monpassword -H 10.10.16.115 sensor
BB +1.2V Vtt | 1.197 | Volts | ok | na | 1.096 | 1.134 | 1.285 | 1.323 | na
BB +1.5V AUX | 1.474 | Volts | ok | na | 1.334 | 1.373 | 1.622 | 1.669 | na
BB +1.5V | 1.482 | Volts | ok | na | 1.326 | 1.365 | 1.625 | 1.677 | na
BB +1.8V | 1.795 | Volts | ok | na | 1.622 | 1.673 | 1.907 | 1.969 | na
BB +3.3V | 3.337 | Volts | ok | na | 2.941 | 3.027 | 3.578 | 3.681 | na
BB +3.3V STB | 3.388 | Volts | ok | na | 3.027 | 3.113 | 3.509 | 3.612 | na
BB +1.5V ESB | 1.505 | Volts | ok | na | 1.357 | 1.404 | 1.591 | 1.638 | na
BB +5V | 5.070 | Volts | ok | na | 4.446 | 4.576 | 5.408 | 5.564 | na
BB +12V AUX | 11.842 | Volts | ok | na | 10.416 | 10.726 | 13.144 | 13.578 | na
BB +0.9V | 0.902 | Volts | ok | na | 0.811 | 0.835 | 0.950 | 0.979 | na
Serverboard Temp | 28.000 | degrees C | ok | na | 5.000 | 10.000 | 61.000 | 66.000 | na
Ctrl Panel Temp | 22.000 | degrees C | ok | na | 0.000 | 5.000 | 44.000 | 48.000 | na
Fan 2 | 7267.000 | RPM | ok | na | 1720.000 | 1978.000 | na | na | na
Fan 4 | 5590.000 | RPM | ok | na | 1720.000 | 1978.000 | na | na | na
Fan 5 | 7316.000 | RPM | ok | na | 2046.000 | 2356.000 | na | na | na
PS1 AC Current | 0.434 | Amps | ok | na | na | na | 11.222 | 11.904 | na
PS2 AC Current | 0.434 | Amps | ok | na | na | na | 11.222 | 11.904 | na
PS1 +12V Current | 7.000 | Amps | ok | na | na | na | 66.000 | 70.000 | na
PS2 +12V Current | 7.000 | Amps | ok | na | na | na | 66.000 | 70.000 | na
PS1 +12V Power | 80.000 | Watts | ok | na | na | na | 792.000 | 840.000 | na
...
И это только сбор информации, а можно и питанием удалённо управлять, в обход операционной системы, так что будете аккуратны :)

Ссылки:
  1. An introduction to IPMI (... to be completed)
  2. Configuring and Securing IPMI on Dell PowerEdge x8xx Hardware
  3. ipmitool manpage

2009/08/21

В помощь администратору: Autossh

Иногда необходимо иметь возможность удалённо управлять какими-то системами, которые находятся за firewall'ами, которые Вы не контролируете. В таких случаях помогают ssh-тунели с использованием перенаправления (forwarding) портов. Например, допустим имеется удалённая машина trick, которая находится за маршрутизатором в удалённой локальной сети, и вторая машина rose имеющая внешний ip-адрес. Для того, чтобы иметь возможность с rose заходить на trick (либо использовать какой-то сервис на trick), необходимо поднять туннель с использованием перенаправления удаленных портов (remote port forwarding):
ssh -f -N username@rose -R 3722:127.0.0.1:22
Получаем такую картину: на rose в списке открытых портов появляется порт 3722, который на самом деле перенаправляет все пакеты на 22-й порт trick-системы. После этого можно логиниться через ssh на trick из rose:
ssh username@127.0.0.0 -p 3722
А что делать, чтобы тунели были постоянно доступны? Ведь ssh-соединения бывают рвуться и тогда опять необходимо с trick-системы инициировать тунель. А если trick находится в 100 км от Вас? А если их таких у Вас 20? :) Вот тут-то и помогает замечательная вещь - autossh, утилитка занимающаяся тем, что поддерживает поднятые ssh-тунели в рабочем состоянии. Перед её запуском необходимо установить переменную AUTOSSH_PORT, указывающую номер порта, который будет использоваться для heartbeat-пакетов на предмет того - жив ли тунель.
Также, если тунели необходимо поднимать во время старта системы, советуют установить переменную AUTOSSH_GATETIME=0. Переменная AUTOSSH_DEBUG позволит получить из логов дополнительную информацию о ходе процесса.
export AUTOSSH_DEBUG=1
export AUTOSSH_GATETIME=0
export AUTOSSH_PORT=20037
autossh -f -N username@rose -R 3722:127.0.0.1:22
Без ключа -f апликация не отправляется в фон, поэтому данный режим полезен, чтобы разбираться с проблемами при установлении тунеля, если они возникают.
В приведенном выше примере кроме портов rose:3722 и trick:22 поднимается ещё 3 дополнительных (так как установлена переменная AUTOSSH_PORT) - trick:20037, rose:20037, trick:20038, связанных между собой в цепочку для прохождения heartbeat-пакета. Таким образом, что отправляя запрос на trick:20037, пакет приходит на rose:20037, который в свою очередь перенаправляет его дальше на trick:20038. Получается своеобразный "бумеранг", позволяющий следить за тунелем.

Links:
  1. Keeping your SSH connections alive with autossh