IPMI на кончиках пальцев: управление серверным парком со смартфона для продвинутых

Можно сколь угодно долго спорить об ис­поль­зо­ва­нии бес­про­вод­ных тех­но­ло­гий для уда­лен­но­го уп­рав­ле­ния сер­вер­ным пар­ком, но не­льзя иг­но­ри­ро­вать сам факт — Wi-Fi и 3G проч­но вро­с­ли в IT-ин­фра­ст­рук­ту­ру и ста­ли аген­та­ми вли­я­ния в да­та-цен­т­рах. В ка­че­ст­ве при­ме­ра до­ста­точ­но вспом­нить хо­тя бы стре­ми­тель­ный рост бес­про­вод­ных ре­ше­ний ком­па­нии Aruba.

Разбираясь с тем, как мобильное приложение IPMIView помогает управлять серверами Supermicro, мы стол­к­ну­лись с тон­кой, буквально точечной, установкой параметров удаленного управления с помощью смартфона. Два ас­пек­та этого подхода тре­бу­ют ответа: когда стоит рас­счи­ты­вать на помощь мобильной платформы Android (или iPhone) и кому эта по­мощь по­на­до­бит­ся?

IPMI на кончиках пальцев: управление серверным парком со смартфона для продвинутых

 

Ограниченная функциональность мо­биль­но­го ин­тер­фей­са говорит о том, что подобные без­от­ла­га­тель­ные ме­ры на­целены на поддержание живучести и сохранение работоспособности серверной платформы. Из этого следует, что ес­ли не­до­ступ­ны блага при­выч­ной ком­пью­тер­ной ин­фра­ст­рук­ту­ры, только кри­зис-ме­нед­же­ру при­дет­ся при­бег­нуть к ус­лу­гам мо­биль­но­го приложения, да и то в полевых условиях. Кар­ди­наль­ным ди­аг­но­с­ти­че­ским сред­ст­вом для него ста­нет ре­жим ко­манд­ной стро­ки, до­ступ­ный в мобильной версии IPMIView.

В открытом доступе инструкций по ис­поль­зо­ва­нию Raw Com­mand до обидного мало, и нам пришлось изрядно по­тру­дить­ся, чтобы расшить это узкое место в системе удаленного управления серверами Super­micro. По­де­лим­ся не­ко­то­ры­ми на­ход­ка­ми с тем, чтобы выжать максимум из ­­IPMIView.

Вычислить по IP

Для начала определимся, с какой из платформ серверного пула мы хотим общаться по IPMI. Мо­биль­ное при­ло­же­ние предлагает нам удобный интерфейс для этого, параллельно информируя о BMC-конт­рол­ле­ре, ре­а­ли­зу­ю­щем уда­лен­ный интерфейс. В нашем случае SuperMicro X11SCL-F с локальным IP-ад­ре­сом 192.168.1.42 оснащен чипом AST2500 c пол­ным набором IPMI-сервисов.

По IP-адресу выбираем серверную платформу, которая нуждается в управлении и настройке

 

Первой выполним шестандцатеричную raw-последовательность 0x06 и 0x37:

Raw Command Get UUID

 

В ее начале легко угадывается ASCII-строка "3401MS", за которой следует ни что иное, как MAC-адрес ac:1f:6b:f9:5c:fa, дополненный нулями справа. Весь ответ BMC-контроллера представляет собой один из ва­ри­ан­тов уни­вер­саль­но­го уни­каль­но­го иден­ти­фи­ка­то­ра, по­лу­чен­ный по запросу «Get System GUID». А Com­ple­tion Code: 00 — код воз­вра­та, сви­де­тель­ст­ву­ю­щий об ус­пеш­ном вы­пол­не­нии за­про­са. Заметим, что под­ст­ро­ка ac:1f:6b яв­ля­ет­ся вендорским кодом Super Micro Computer в системе ко­ди­ро­ва­ния MAC-адресов.

Тем, кто знаком с син­так­си­сом ко­манд­ной стро­ки в Linux, вероятно, известно, что запрос ipmitool raw 0x06 0x37 то­ж­де­ст­ве­нен запросу ipmitool bmc guid. Проверим это предположение в Windows, ис­поль­зуя SMC­IPMI­Tool — про­при­е­тар­ную утилиту от Supermicro.

Запрос «Get System GUID» по IPMI-интерфейсу, выполненный с помощью утилиты IPMITool

 

Структура запроса в SMC­IPMI­Tool не­сколь­ко от­ли­ча­ет­ся от фор­ма­та ввода Raw Command, ис­поль­зу­е­мой в мо­биль­ном приложении IPMIView. Смартфон заранее «знает» IP-адрес адресата, сле­до­ва­тель­но, ло­гин и па­роль по­втор­но ука­зы­вать нет нужды.

Запрос, функция, команда

После первого знакомства с HEX-кодами IPMI-интерфейса на­ста­ло вре­мя раз­об­рать­ся в структуре его ко­манд. Не­смо­т­ря на то, что их синтаксис описан в спецификации IPMI v2.0, прикладное при­ме­не­ние, с уче­том осо­бен­но­с­тей ре­а­ли­за­ции Supermicro, не вполне очевидно.

IPMI-интерфейс предполагает удаленный доступ в формате запросов, состоящих из команд. Команды уни­фи­ци­ро­ва­ны по син­так­си­су и содержат набор обязательных и оп­ци­о­наль­ных полей, следующих в стро­гой оче­ред­но­с­ти:

  • NetFn (Network Function) — сетевая функция, объединяющая функциональные наборы команд по типам — ее млад­шие шесть битов являются индикатором функции, а старшие два бита — полем LUN, обес­пе­чи­ва­ю­щим до­пол­ни­тель­ную суб­ад­ре­са­цию внутри платформы; тем не менее, точный формат функции за­ви­сит от ре­а­ли­за­ции кон­к­рет­но­го уст­рой­ст­ва, за исключением сущ­но­стей, определенных спецификацией IPMI.
  • cmd — уникальная команда в рамках указанной сетевой функции NetFn.
  • subcmd — необязательное поле, которое в некоторых случаях используется, как рас­ши­ре­ние уп­рав­ля­ю­щей ко­ман­ды cmd.
  • Request Data — одно или несколько необязательных полей, структура которых диктуется па­рой cmd|subcmd; ва­рь­и­ру­ет­ся от пустого поля до цепочки data0...data7.
  • Response Data — поля результатов.

Двухбайтовый запрос

Прежде чем перейти к экспериментам со слож­ны­ми HEX-командами, рас­смот­рим еще одну про­с­тень­кую двух­бай­то­вую конструкцию 0x30 и 0x0d:

Raw Command Enable UID

 

Как видим, команда 0x0d относится к иному классу функ­ций (0x30) и поле ее ре­зуль­та­тов не со­дер­жит дан­ных (за ис­клю­че­ни­ем обя­за­те­ль­но­го кода возврата Completion code). За­дей­ст­во­вав ее, поль­зо­ва­тель по­лу­ча­ет воз­мож­ность уп­рав­лять серверным пулом с помощью UID Control, как это описано в ранее опуб­ли­ко­ван­ной статье «Управление плат­фор­ма­ми Supermicro по IPMI». В отличие от предыдущей функции «Get System GUID», уп­рав­ле­ние све­то­ди­о­да­ми при­но­сит хотя бы какую-то пользу :)

Трехбайтовый запрос

Возьмем команду в трехбайтовом формате, ответственную на платформе SuperMicro X11SCL-F за ряд прин­ци­пи­аль­ных обязанностей:

Raw Command Get and Set Fan Mode

 

Функция 0x30 в сопряжении с командой 0x45 уп­рав­ля­ет сце­на­ри­я­ми ис­поль­зо­ва­ния вен­ти­ля­то­ров. В ее фор­ма­те от­сут­ст­ву­ет поле subcmd, а параметр 00 в поле data0 — запрос на информирование о ре­жи­ме ох­лаж­де­ния. BMC-конт­рол­лер вернул значение 02, для интерпретации которого требуется сле­ду­ю­щая рас­шиф­ров­ка:

  1. Standard
  2. Full
  3. Optimal
  4. PUE (Power Use Efficiency)
  5. Heavy IO

Указав в поле data0 параметр 01, мы можем в обязательном уже поле data1 выбрать требуемый уровень на­груз­ки из приведенного вы­ше списка, и послать этот запрос на выполнение. Команда 0x30 0x45 0x01 0x04, на­при­мер, ус­та­но­вит самый нагруженный режим (Heavy IO) работы вентиляторов. Подытожим: «ноль» в по­ле data0 — оз­на­ча­ет, как пра­ви­ло, get, «единица» — set.

Четырехбайтовый запрос

Фактически, мы выше уже рас­смот­ре­ли че­ты­рех­бай­то­вый запрос к BMC-контроллеру через ввод Raw Com­mand в мо­биль­ном при­ло­же­нии IPMIView. Более полную картину можно получить, ознакомившись с прин­ци­пи­аль­но важными для управления командами IPMI-интерфейса. Начнем самого важного из них — запроса «IPMI LAN Mode».

Raw Command IPMI LAN Mode

 

Здесь впервые мы встречаем поле subcmd, которое для «IPMI LAN Mode» равно 0x0c. Следующий параметр data0, как ска­за­но ра­нее, означает режим запроса (get). Результат может принимать одно из трех значений:

  1. Dedicated
  2. OnBoard
  3. FailOver (в нашем примере)

Эта же команда в этом же функциональном наборе, но с расширением 0x60, информирует нас о параметрах се­те­во­го под­клю­че­ния:

Raw Command Get Network Link Status

 

Ответ платформы на запрос «Get Network Link Status» выглядит уже весьма пространно. Поле data0, как и в пред­ы­ду­щем случае, дает нам статус «IPMI LAN Mode». Поле data1 информирует об использовании вы­де­лен­но­го се­те­во­го порта (0 — dedicate, 1 — share). Следующие четыре байта отданы для оценки со­сто­я­ния от сре­ды передачи — Me­dia In­de­pen­dent In­ter­face (MII):

  • Auto-negotiation: 1(On)/0(Off)
  • Duplex: 1(100M)/0(10M)
  • Physical LAN port status: 1(connected)/0(disconnected)
  • Speed: 1(100M)/0(10M)

Последние три байта демонстрируют состояние NCSI-интерфейса:

  • Auto-negotiation: 1(On)/0(Off)
  • Physical LAN port status: 1(connected)/0(disconnected)
  • Speed and duplex:
  1. Auto-negotiate is not complete
  2. 10Base-T with half duplex
  3. 10Base-T with full duplex
  4. 100Base-T with half duplex
  5. 100Base-T
  6. 100Base-T with full duplex
  7. 1000Base-T with half duplex
  8. 1000Base-T with full duplex
  9. 10G Base-T support
  10. Reserved

Воспользовавшись этой информацией, не составит труда выполнить наладку сетевого интерфейса.

IPMI-запросы сложной структуры

Существуют и более сложные конструкции, направляемые к BMC-контроллеру в виде HEX-кодов. Хорошей ил­лю­ст­ра­ци­ей в данном случае может быть запрос «BMC MAC Address».

Raw Command Get BMC MAC Address

 

Здесь нет никаких элементов новизны, кроме сложного синтаксиса. Прак­ти­че­ское при­ме­не­ние та­ко­го мно­го­э­таж­но­го кода тоже под вопросом: проще вос­поль­зо­вать­ся raw-по­сле­до­ва­тель­но­стью 0x06 и 0x37 («Get System GUID») для до­сту­па к MAC-адресу IPMI-интерфейса.

Гораздо важнее получить IP-адрес сетевого порта, принадлежащего BMC-контроллеру:

Raw Command Get BMC IP Address

 

Разберем синтаксис этого запроса. Функция 0x0c с командой 0x02 способны про­ин­фор­ми­ро­вать поль­зо­ва­те­ля про IP-адрес BMC, если в поле data0 указать номер канала, а в поле data1 — директиву get. Поля data2 и data3 по умолчанию нулевые.

А теперь интерпретируем полученные результаты. Сначала идет 0x11h — за­ре­зер­ви­ро­ван­ный префикс от­ве­та, а за­тем шест­над­ца­те­рич­ный код:

0xC0A8012Ah = 11000000.10101000.00000001.00101010 = 192.168.1.42

Заметая следы

Все настройки IPMI только тогда чего-нибудь стоят, если можно в один клик вернуть их к значениям по умол­ча­нию. Функ­ции вос­ста­нов­ле­ния стоят того, чтобы их всегда держать под рукой. Вот самые главные из них:

  • 0x30 0x40 ― Reset and factory default, preserve LAN and FRU settings
  • 0x30 0x41 ― Reset and factory default, erase LAN and FRU settings
  • 0x30 0x42 ― Reset and factory default, erase LAN but preserve FRU settings
  • 0x30 0x44 ― Reset Sensor Data Record to default

Последняя опция сброса информации от датчиков, хранящаяся в SDR-репозитарии, ― самая безобидная:

Raw Command «Reset SDR to Default»

 

Есть еще один запрос, восстанавливающий справедливость ― «Reset HTTP config to default»:

Raw Command «Reset HTTP config to default»

 

Теперь уж точно все должно работать! :)

Послесловие

Лабораторные работы с программными про­дук­та­ми Super­micro от­кры­ва­ют но­вые го­ри­зон­ты для ин­же­не­ров-прак­ти­ков, от­вет­ст­вен­ных за мо­ни­то­ринг и уп­рав­ле­ние сер­вер­ным пар­ком. На­ря­ду с деск­топ­ны­ми при­ло­же­ни­я­ми, мо­биль­ная вер­сия IPMI­View по­зво­ля­ет все­г­да быть в кон­так­те 24/7 с обо­ру­до­ва­ни­ем, что су­щест­вен­но важ­но, ког­да нет ино­го до­сту­па к ап­па­рат­ным плат­фор­мам. В этой си­ту­а­ции смарт­фон ста­но­вит­ся alter ego сис­тем­но­го ад­ми­ни­ст­ра­то­ра и его не­за­ме­ни­мым по­мощ­ни­ком.

Ссылки

  1. Управление платформами Supermicro по IPMI
  2. Удаленное управление платформами Supermicro с помощью утилиты IPMIView
  3. IPMIView: шифрование и безопасность
  4. Как мобильное приложение IPMIView помогает управлять серверами Supermicro

Благодарим компанию Onix за помощь в подготовке серии материалов
по использованию IPMI на платформах Supermicro