огда нужно обеспечить быстродействие и надежность дисковой системы, а также возможность горячей замены дисков без выключения сервера, большую помощь окажут дисковые контроллеры с кэш памятью и защитным аккумулятором, такие как MegaRAID. Новые версии этих контроллеров есть на сайте https://www.broadcom.com/products/storage/raid-controllers.
Для надежной работы дисковой системы сервера необходимо настроить мониторинг контроллера и подключенных к ним дисков. В этой статье вы найдете практическое руководство, которое позволит вам организовать такой мониторинг для контроллера MegaRAID с помощью Zabbix.
При этом вы будете использовать программу zabbix_sender, с помощью которой, без преувеличения, можно настроить мониторинг практически чего угодно. В данном случае для получения данных мониторинга мы будем использовать программу MegaCli.
Приемы, описанные в этой статье, вы сможете использовать для мониторинга других контроллеров или устройств, если не найдете для них готовых шаблонов на сайте https://www.zabbix.com/integrations.
Установка программы MegaCli
Вы можете загрузить архив с программой MegaCli для многих платформ, включая Linux и Windows, на сайте https://www.broadcom.com, например, по этой ссылке: https://docs.broadcom.com/docs/12351587. Мы расскажем о том, как установить программу MegaCli в ОС Debian 11 из репозитория le-vert.net, где есть утилиты для различных контроллеров RAID. Также приведем инструкцию по установке для CentOS и FreeBSD.
Установка MegaCli в ОС Debian 11
Чтобы установить программу MegaCli в ОС Debian 11, нужно подключить репозиторий le-vert.net. Для этот добавьте в файл /etc/apt/ sources.list следующую строку:
deb http://hwraid.le-vert.net/debian bullseye main
После этого добавьте ключ, обновите пакеты и установите программу:
# wget -O - http://hwraid.le-vert.net/debian/hwraid.le-vert.net.gpg.key | apt-key add - # apt update # apt install megacli
После установки проверьте версию программы:
# megacli -v MegaCLI SAS RAID Management Tool Ver 8.07.14 Dec 16, 2013 (c)Copyright 2013, LSI Corporation, All Rights Reserved.
Обратите внимание, что мы запускаем программу megacli, а не MegaCli.
После установки можно отключить репозиторий. Для этого закройте в файле /etc/apt/sources.list символом комментария добавленную строку и обновите пакеты:
# apt update
Установка MegaCli в CentOS
Если нужно установить программу MegaCli в CentOS, прежде всего скачайте нужный пакет:
# wget --user=hetzner --password=download http://download.hetzner.de/tools/LSI/tools/MegaCLI/8.07.14_MegaCLI.zip
Далее установите утилиту unzip, если ее нет на сервере:
# yum install unzip
Распакуйте пакет и установите программу megacli следующим образом:
# unzip 8.07.14_MegaCLI.zip # cd Linux # rpm -i MegaCli-8.07.14-1.noarch.rpm # ln -s /opt/MegaRAID/MegaCli/MegaCli64 /usr/bin/megacli
Проверьте версию установленной программы:
# megacli -V MegaCLI SAS RAID Management Tool Ver 8.07.14 Dec 16, 2013 (c)Copyright 2013, LSI Corporation, All Rights Reserved.
Установка MegaCli в ОС FreeBSD
Выполните установку MegaCli из портов ОС FreeBSD. Для этого сначала обновите порты:
# portsnap fetch update
Затем установите программу MegaCli следующим образом:
# cd /usr/ports/sysutils/megacli # make install
Проверьте версию установленной программы:
# MegaCli -v
Обратите внимание, что в отличие от Debian и CentOS, в командном приглашении FreeBSD нужно запускать команду MegaCli, а не megacli.
Мониторинг состояния массива RAID с контроллером MegaRAID вручную
Прежде чем мы займемся настройкой мониторинга дискового массива RAID с контроллером MegaRAID с помощью Zabbix, выполним основные процедуры диагностики вручную из командной строки.
Проверка состояния массива RAID
Для проверки массива RAID, созданного контроллером как виртуальное дисковое устройство, используйте команду megacli с параметром -LDInfo (в ОС FreeBSD запустите команду MageCli):
# megacli -LDInfo -LALL -aALL
Эта команда покажет важную информацию о виртуальном дисковом устройстве (RAID-массиве):
Adapter 0 -- Virtual Drive Information: Virtual Drive: 0 (Target Id: 0) Name : RAID Level : Primary-1, Secondary-0, RAID Level Qualifier-0 Size : 557.861 GB Sector Size : 512 Mirror Data : 557.861 GB State : Optimal Strip Size : 64 KB Number Of Drives : 2 Span Depth : 1 Default Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU Current Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU Default Access Policy: Read/Write Current Access Policy: Read/Write Disk Cache Policy : Disabled Encryption Type : None Is VD Cached: No Number of Dedicated Hot Spares: 1 0 : EnclId - 4 SlotId - 2
В данном случае сконфигурировано зеркало из двух дисков объемом 557.861 ГБайт каждый.
Если массив находится в оптимальном состоянии, и данные останутся в сохранности при выходе из строя одного из дисков, то значение параметра State будет равно Optimal.
Также обратите внимание на параметр политики кэширования Current Cache Policy.
Если ваш контроллер оснащен аккумулятором, защищающим кэш-память контроллера от внезапного отключения электропитания, то по умолчанию при нормальном заряде и емкости аккумулятора контроллер использует отложенный режим записи WriteBack.
В этом случае контроллер сообщает о том, что данные записаны, сразу после того, как они оказываются в кэше контроллера, еще до завершения фактической записи данных на диск. Этот режим сильно ускоряет запись данных, но он безопасен только при нормальном состоянии аккумулятора.
Если аккумулятор контроллера разряжен в результате запуска периодической тренировки или в результате исчерпания ресурса, то режим отложенной записи WriteBack отключается и включается режим прямой записи WriteThrough:
Default Cache Policy: WriteBack, ReadAheadNone, Direct, No Write Cache if Bad BBU Current Cache Policy: WriteThrough, ReadAheadNone, Direct, No Write Cache if Bad BBU
В этом режиме контроллер будет дожидаться завершения процесса записи на диск перед тем, как сообщить программе о завершении операции записи.
Политика дискового контроллера Default Cache Policy, установленная по умолчанию, предполагает отключение кэша записи при неисправном или разряженном аккумуляторе. Если кэш не отключить, что в случае аварии с электропитанием можно потерять данные, находящиеся в кэше, но еще не записанные на диск. В этом случае велика вероятность повреждения файловой системы.
Проверка состояния аккумулятора
Дисковый контроллер MegaRAID может быть оснащен блоком батарейного (на самом деле аккумуляторного)
Для проверки состояния аккумулятора используйте следующую команду:
# megacli -AdpBbuCmd -aAll
Эта команда выведет на консоль довольно обширную информацию. На что нужно обратить внимание в первую очередь?
Прежде всего, параметр Battery State должен быть равен Optimal. Если это не так, то с контроллером что-то случилось. В лучшем случае поможет запуск обучения аккумулятора, в худшем — блок аккумулятора придется заменить.
Если контроллер по какой-то причине не запустил автоматическое обучение, может появиться строка с сообщением о необходимости запуска обучения вручную:
Battery State: Degraded(Need Attention) A manual learn is required.
В этом случае запустите обучение с помощью такой команды:
# megacli -AdpBbuCmd -BbuLearn -aAll
Если обучение запустилось, вы увидите сообщение на консоли:
Adapter 0: BBU Learn Succeeded.
Теперь чтобы отслеживать процесс обучения, время от времени выдавайте команду «megacli -AdpBbuCmd -aAll». Контролируйте состояние заряда или разряда аккумулятора Charging Status, запрос цикла обучения Learn Cycle Requested, его активность Learn Cycle Active и текущее состояние обучения Learn Cycle Status:
Charging Status : Discharging Learn Cycle Requested : Yes Learn Cycle Active : Yes Learn Cycle Status : OK
Заметим, что обучение может выполняться долго, не один час, так что запаситесь терпением. Со временем, после того как аккумулятор в процессе обучения полностью разрядится, начнется его зарядка. Статус Charging Status изменится на Charging.
Еще один важный параметр аккумуляторного блока, это количество циклов обучения Cycle Count. Его можно посмотреть так:
# megacli -AdpBbuCmd -aAll | grep "Cycle Count" Cycle Count: 4062
Этот параметр показывает степень износа аккумуляторов. В приведенном выше примере аккумуляторный блок давно нужно было заменить.
Просмотр свойств контроллера
Следующая команда выведет на консоль информацию обо всех дисковых контроллерах MegaRAID, установленных на сервере:
# megacli -AdpAllinfo -aAll
Здесь можно увидеть название контроллера Product Name и его серийный номер Serial No, что может пригодиться при обращении в сервис.
Вы можете узнать, оснащен ли контроллер блоком аккумуляторов (поле BBU) и определить размер кэш памяти, количество и состояние сконфигурированных виртуальных дисков Virtual Drives, количество и состояние физических дисков Disks, возможности контроллера и его параметры по умолчанию.
Подробное описание этой информации выходит за рамки нашей статьи. Хорошее описание команды megacli можно найти в руководстве MegaRAID SAS Software User Guide, доступном по адресу https://docs.broadcom.com/docs/12353236.
Просмотр свойств дисков
Со временем жесткие диски, как и диски SSD, могут выходить из строя. Если на сервере установлен контроллер MegaRAID, то список подключенных физических дисков и их состояние можно легко узнать так:
# megacli -PDList -aAll
После запуска команды на консоли появится множество различных параметров и их значения. Параметр Enclosure Device ID содержит идентификатор места расположения, по которому вы сможете адресоваться к диску при выполнении с ним различных операций. Вам также потребуется номер слота Slot Number.
Ниже мы показали команды, с помощью которых можно быстро узнать упомянутый выше идентификатор и номер:
# megacli -PDList -aAll | grep "Enclosure Device ID" Enclosure Device ID: 252 Enclosure Device ID: 252 Enclosure Device ID: 252 # megacli -PDList -aAll | grep "Slot Number" Slot Number: 0 Slot Number: 1 Slot Number: 2
Параметр Firmware state очень важен — анализируя его, можно узнать состояние диска:
# megacli -PDList -aAll | grep "Firmware state" Firmware state: Unconfigured(bad) Firmware state: Online, Spun Up Firmware state: Online, Spun Up
Здесь видно, что первый диск, для которого Enclosure Device ID равен 252, а номер слота Slot Number находится в аварийном состоянии и не сконфигурирован для работы в массиве. Остальные два диска работают нормально.
Если вам нужен новый диск на замену, то типы дисков, подключенных к контроллеру, можно узнать так:
# megacli -PDList -aAll | grep "Inquiry Data" Inquiry Data: SEAGATE ST3600057SS 00063SL098QA Inquiry Data: SEAGATE ST3600057SS 00063SL09XZ1 Inquiry Data: SEAGATE ST3600057SS 00063SL09EVP
Как видите, используются диски Seagate, указана модель и серийный номер. Для замены нужно приобрести такой же или совместимы диск.
Чтобы посмотреть детальную информацию о диске, укажите следующей команде идентификатор Enclosure Device ID и номер слота Slot Number:
# megacli -PDInfo -PhysDrv\[252:0] -aAll
Будет полезной информация о количестве ошибок на диске:
# megacli -PDInfo -PhysDrv\[252:0] -aAll | grep Error Media Error Count: 3 Other Error Count: 2
Если появились такие ошибки, то диск скоро может выйти из строя.
Контроллер время от времени запускает тестовое чтение дисков (Patrol Read) с целью обнаружения потенциальных проблем.
С помощью следующих двух команд вы можете инициировать запуск тестового чтения и посмотреть его состояние:
# megacli -AdpPR Start -aAll # megacli -AdpPR Info -aAll
Другие полезные команды
Если вы заменили вышедший из строя диск, контроллер автоматически запускает перенос на него данных. Эта операция называется CopyBack, а ее состояние можно узнать следующим образом:
# megacli -PDCpyBk -ShowProg -PhysDrv\[252:0] -aAll Copyback Progress on Device at Enclosure 4, Slot 0 Completed 28% in 192 Minutes.
Также может оказаться полезной команда добавления диска в горячий резерв:
# megacli -PDHSP -set -PhysDrv\[252:3\] -a0
При выходе из строя одного из дисков массива его роль будет играть резервный диск, причем копирование данных на него запустится автоматически.
И, наконец, приведем еще одну полезную команду — чтение журнала контроллера:
# megacli -AdpAlILog -aAll > lsi_log.txt
Содержимое журнала будет записано в файл, который можно проанализировать или отдать для анализа в сервис.