Pull to refresh

Автоматизация проверки на целостность рейд-массива на сервере Dell

Reading time 3 min
Views 22K
Привет, %хабрачитатель%!

Несколько месяцев назад у нас возникли проблемы с одной виртуальной машиной, запущенной на сервере Dell PowerEdge R720 с ESXi 5.5. Перезагрузка этой VM длилась довольно долго и вызвала сильное падение производительности на самом хосте.
Lifecycle-лог на сервере был наполнен сообщениями вида:
PDR47
A block on Disk 0 in Backplane 1 of Integrated RAID Controller 1 was
punctured by the controller.

PDR64
An unrecoverable disk media error occurred on Disk 0 in Backplane 1 of
Integrated RAID Controller 1.

Гугление привело к неутешительному выводу: рейд-массив поврежден и восстановить его невозможно. А именно — повредились данные, относящиеся к одному блоку (страйпу), сразу на нескольких дисках (double fault):

К счастью, делловские RAID-контроллеры обладают фичей продолжать работу, несмотря на неконсисентное состояние массива — puncture (https://www.dell.com/support/Article/us/en/04/438291/EN#Unique-Hyphenated-Issue-Here-2), что позволяет сохранить хотя бы ту часть данных, которая не повредились. Это, конечно, не никак отменяет необходимость последующей замены дисков и пересборки рейд-массива «с нуля».
Для предотвращения подобных ситуаций Dell рекомендует запускать проверку целостности массива не реже одного раза в месяц. Увы, но мы об этом узнали слишком поздно.

Такую проверку можно запускать как через веб-интерфейс Dell OpenManage Server Administrator (http://www.dell.com/support/contents/us/en/19/article/Product-Support/Self-support-Knowledgebase/enterprise-resource-center/Enterprise-Tools/OMSA/), так и через утилиты omconfig/omreport, входящие в OMSA. И, если бы разработчики из Dell не «забыли» включить эти утилиты в OpenManage для ESXi, то проблем с автоматизацией бы не возникло, т.к. понятно, что ручная проверка целостности массива на каждом сервере, совершенно не IT-way. Не говоря уже о том, что интерфейс OMSA очень медленный и работать с ним удовольствие еще то.
Ребята из Dell «поработали на славу» и простым способом автоматизировать проверку (например, через открытие в cURL заранее подготовленной ссылки) невозможно, т.к. веб-интерфейс генерируется динамически и постоянные ссылки в нем отсутствуют.

Что же делать?

Пришлось немного повозиться и написать утилиту проверки самому. Встречайте: Consistency Check Task Automation Tool for Dell servers with iDRAC (https://github.com/jazzl0ver/dell_raid_cc). Утилита написана с помощью фреймворка CasperJS, который позволяет автоматизировать работу как раз с подобными динамическими сайтами.

Для использования dell_raid_cc необходимо:
1. Сервер с установленным OMSA (см. ссылку выше)
2. Скачать и установить phantomjs (http://phantomjs.org/download.html)
3. Скачать и установить casperjs (http://docs.casperjs.org/en/latest/installation.html)
4. Вытащить утилиту из git:
git clone https://github.com/jazzl0ver/dell_raid_cc
5. Создать файл с параметрами доступа (например, creds.txt):
export OMSAHOST=192.168.1.191
export OMSAPORT=1311
export USERNAME=root
export PASSWORD=password
export DELLHOST=192.168.1.30

6. Загрузить его и можно запускать утилиту или ставить ее запуск в кронтаб:
source creds.txt
casperjs --ignore-ssl-errors=true --cookies-file=/tmp/dell_raid_cc_cookie.jar dell_raid_cc.js

Если все в порядке, то вывод будет примерно такой:
Found: Virtual Disk 0 [state: Ready; layout: RAID-10; size: 1,862.00GB]
CC for Virtual Disk 0 has been started
Found: Virtual Disk 1 [state: Ready; layout: RAID-1; size: 931.00GB]
CC for Virtual Disk 1 has been started

Если запустить еще раз, можно увидеть прогресс проверки, например:
Found: Virtual Disk 0 [state: Resynching; layout: RAID-6; size: 5,026.50GB]
CC for Virtual Disk 0 is still running, progress: 19% complete

Стоит сказать, что утилита не поддерживает многоконтроллерные системы (у меня просто таких нет и протестировать, соответственно, не на чем).

Надеюсь, утилита окажется полезной не только мне.

UPD. Как подсказали коллеги в комментариях, более правильно настроить запуск проверки на целостность по расписанию с помощью утилиты megacli. Например:
./MegaCli -AdpCcSched -SetStartTime 20140822 04 -aALL

Инструкции по установке на сервер с CentOS/RedHat — здесь
Настройка расписания CC — здесь

Под ESXi также легко устанавливается. Можно поставить vib напрямую, либо сделать из него bundle и поставить в качестве обновления через vCenter.

UPD. #2 Контроллеры Perc5 не поддерживают настройку расписания через MegaCli:
cd /opt/lsi/MegaCLI; ./MegaCli -AdpCcSched -Info -aALL

Adapter 0: Scheduled Chceck Consistency is not supported.

Exit Code: 0x01

Для них использование dell_raid_cc — единственный способ автоматизации.
Tags:
Hubs:
+5
Comments 14
Comments Comments 14

Articles