Когда нужно обеспечить быстродействие и надежность дисковой системы, а также возможность горячей замены дисков без выключения сервера, большую помощь окажут дисковые контроллеры с кэш памятью и защитным аккумулятором, такие как MegaRAID. Новые версии этих контроллеров есть на сайте https://www.broadcom.com/products/storage/raid-controllers. Для надежной работы дисковой системы сервера необходимо настроить мониторинг контроллера и подключенных к ним дисков. В этой статье вы найдете практическое руководство, которое позволит вам организовать такой мониторинг для контроллера MegaRAID с помощью Zabbix. При этом вы будете использовать программу zabbix_sender, с помощью которой, без преувеличения, можно настроить мониторинг практически чего угодно. В данном случае для получения данных мониторинга мы будем использовать программу MegaCli. Приемы, описанные в этой статье, вы сможете использовать для мониторинга других контроллеров или устройств, если не найдете для них готовых шаблонов на сайте https://www.zabbix.com/integrations. Вы можете загрузить архив с программой 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, нужно подключить репозиторий le-vert.net. Для этот добавьте в файл /etc/apt/ sources.list следующую строку:   После этого добавьте ключ, обновите пакеты и установите программу:   После установки проверьте версию программы:   Обратите внимание, что мы запускаем программу megacli, а не MegaCli. После установки можно отключить репозиторий. Для этого закройте в файле /etc/apt/sources.list символом комментария добавленную строку и обновите пакеты: Если нужно установить программу MegaCli в CentOS, прежде всего скачайте нужный пакет:   Далее установите утилиту unzip, если ее нет на сервере:   Распакуйте пакет и установите программу megacli следующим образом:   Проверьте версию установленной программы:   Выполните установку MegaCli из портов ОС FreeBSD. Для этого сначала обновите порты:   Затем установите программу MegaCli следующим образом:   Проверьте версию установленной программы:   Обратите внимание, что в отличие от Debian и CentOS, в командном приглашении FreeBSD нужно запускать команду MegaCli, а не megacli.   Прежде чем мы займемся настройкой мониторинга дискового массива RAID с контроллером MegaRAID с помощью Zabbix, выполним основные процедуры диагностики вручную из командной строки.   Для проверки массива RAID, созданного контроллером как виртуальное дисковое устройство, используйте команду megacli с параметром -LDInfo (в ОС FreeBSD запустите команду MageCli):   Эта команда покажет важную информацию о виртуальном дисковом устройстве (RAID-массиве):   В данном случае сконфигурировано зеркало из двух дисков объемом 557.861 ГБайт каждый. Если массив находится в оптимальном состоянии, и данные останутся в сохранности при выходе из строя одного из дисков, то значение параметра State будет равно Optimal. Также обратите внимание на параметр политики кэширования Current Cache Policy.  Если ваш контроллер оснащен аккумулятором, защищающим кэш-память контроллера от внезапного отключения электропитания, то по умолчанию при нормальном заряде и емкости аккумулятора контроллер использует отложенный режим записи WriteBack.  В этом случае контроллер сообщает о том, что данные записаны, сразу после того, как они оказываются в кэше контроллера, еще до завершения фактической записи данных на диск. Этот режим сильно ускоряет запись данных, но он безопасен только при нормальном состоянии аккумулятора. Если аккумулятор контроллера разряжен в результате запуска периодической тренировки или в результате исчерпания ресурса, то режим отложенной записи WriteBack отключается и включается режим прямой записи WriteThrough: В этом режиме контроллер будет дожидаться завершения процесса записи на диск перед тем, как сообщить программе о завершении операции записи. Политика дискового контроллера Default Cache Policy, установленная по умолчанию, предполагает отключение кэша записи при неисправном или разряженном аккумуляторе. Если кэш не отключить, что в случае аварии с электропитанием можно потерять данные, находящиеся в кэше, но еще не записанные на диск. В этом случае велика вероятность повреждения файловой системы. Дисковый контроллер MegaRAID может быть оснащен блоком батарейного (на самом деле аккумуляторного) питания (рис. 1).    На рис. 2 показан литий-ионный аккумулятор упомянутого выше блока. Новые версии контроллеров оснащаются не литий-ионными аккумуляторами, а супер-конденсаторами (ионисторами), имеющими большой срок службы.   Для проверки состояния аккумулятора используйте следующую команду:   Эта команда выведет на консоль довольно обширную информацию. На что нужно обратить внимание в первую очередь? Прежде всего, параметр Battery State должен быть равен Optimal. Если это не так, то с контроллером что-то случилось. В лучшем случае поможет запуск обучения аккумулятора, в худшем — блок аккумулятора придется заменить. Если контроллер по какой-то причине не запустил автоматическое обучение, может появиться строка с сообщением о необходимости запуска обучения вручную: В этом случае запустите обучение с помощью такой команды:   Если обучение запустилось, вы увидите сообщение на консоли:   Теперь чтобы отслеживать процесс обучения, время от времени выдавайте команду «megacli -AdpBbuCmd -aAll». Контролируйте состояние заряда или разряда аккумулятора Charging Status, запрос цикла обучения Learn Cycle Requested, его активность Learn Cycle Active и текущее состояние обучения Learn Cycle Status:   Заметим, что обучение может выполняться долго, не один час, так что запаситесь терпением. Со временем, после того как аккумулятор в процессе обучения полностью разрядится, начнется его зарядка.  Статус Charging Status изменится на Charging. Еще один важный параметр аккумуляторного блока, это количество циклов обучения Cycle Count. Его можно посмотреть так: Этот параметр показывает степень износа аккумуляторов. В приведенном выше примере аккумуляторный блок давно нужно было заменить.   Следующая команда выведет на консоль информацию обо всех дисковых контроллерах MegaRAID, установленных на сервере:   Здесь можно увидеть название контроллера Product Name и его серийный номер Serial No, что может пригодиться при обращении в сервис. Вы можете узнать, оснащен ли контроллер блоком аккумуляторов (поле BBU) и определить размер кэш памяти, количество и состояние сконфигурированных виртуальных дисков Virtual Drives, количество и состояние физических дисков Disks, возможности контроллера и его параметры по умолчанию. Подробное описание этой информации выходит за рамки нашей статьи. Хорошее описание команды megacli можно найти в руководстве MegaRAID SAS Software User Guide, доступном по адресу https://docs.broadcom.com/docs/12353236. Со временем жесткие диски, как и диски SSD, могут выходить из строя. Если на сервере установлен контроллер MegaRAID, то список подключенных физических дисков и их состояние можно легко узнать так:   После запуска команды на консоли появится множество различных параметров и их значения. Параметр Enclosure Device ID содержит идентификатор места расположения, по которому вы сможете адресоваться к диску при выполнении с ним различных операций. Вам также потребуется номер слота Slot Number. Ниже мы показали команды, с помощью которых можно быстро узнать упомянутый выше идентификатор и номер: Параметр Firmware state очень важен — анализируя его, можно узнать состояние диска:   Здесь видно, что первый диск, для которого Enclosure Device ID равен 252, а номер слота Slot Number находится в аварийном состоянии и не сконфигурирован для работы в массиве. Остальные два диска работают нормально. Если вам нужен новый диск на замену, то типы дисков, подключенных к контроллеру, можно узнать так: Как видите, используются диски Seagate, указана модель и серийный номер. Для замены нужно приобрести такой же или совместимы диск. Чтобы посмотреть детальную информацию о диске, укажите следующей команде идентификатор Enclosure Device ID и номер слота Slot Number: Будет полезной информация о количестве ошибок на диске:   Если появились такие ошибки, то диск скоро может выйти из строя. Контроллер время от времени запускает тестовое чтение дисков (Patrol Read) с целью обнаружения потенциальных проблем. С помощью следующих двух команд вы можете инициировать запуск тестового чтения и посмотреть его состояние: Если вы заменили вышедший из строя диск, контроллер автоматически запускает перенос на него данных. Эта операция называется CopyBack, а ее состояние можно узнать следующим образом:   Также может оказаться полезной команда добавления диска в горячий резерв:   При выходе из строя одного из дисков массива его роль будет играть резервный диск, причем копирование данных на него запустится автоматически. И, наконец, приведем еще одну полезную команду — чтение журнала контроллера: Содержимое журнала будет записано в файл, который можно проанализировать или отдать для анализа в сервис.   Программа с названием zabbix_sender позволяет передавать данные на сервер Zabbix без использования агента zabbix_agent. Если подготовить для нее данные в виде текстового файла, то она сможет передать сразу несколько элементов данных на сервер Zabbix через порт 10050.   Во второй статье нашей серии про Zabbix мы рассказывали о том, как установить программу zabbix_sender. Нужно установить репозиторий Zabbix, а затем выполнить установку:   После установки проверьте версию zabbix_sender:   Если на сервере установлена ОС FreeBSD, то программа zabbix_sender будет установлена вместе с агентом Zabbix из порта /usr/ports/net-mgmt/zabbix6-agent.   Если вам нужно передать на сервер Zabbix несколько элементов данных, то нужно подготовить текстовый файл такого вида:   Здесь в каждой строке следует указать через пробел имя хоста, как оно было задано при добавлении в мониторинг, далее имя элемента данных, указанное в шаблоне, созданном для мониторинга этих элементов данных, а также значение элемента данных. В данном случае в файл записаны данные, полученные от контроллера MegaRAID с помощью утилиты megacli и скрипта, составленного на языке Perl. Для запуска программы zabbix_sender с целью передачи содержимого файла со значениями параметров мы используем следующую команду:   Здесь вместо xxx.xxx.xxx.xxx в параметре -z нужно указать адрес IP вашего сервера Zabbix. Параметр -vv позволяет при запуске программы увидеть на консоли детали выполнения операции. И, наконец, параметр -i задает путь к файлу со значениями элементов данных.   Чтобы получить данные от контроллера MegaRAID, сформировать текстовый файла с результатами мониторинга и отправить эти данные на сервер Zabbix с помощью программы zabbix_sender, мы подготовили программу check_lsi.pl.  Эту программу, а также соответствующий шаблон check_lsi.xml для Zabbix вы найдете на GitHub по адресу https://github.com/AlexandreFrolov/shop2you_zabbix_monitoring. Расскажем кратко о программе check_lsi.pl. На этапе инициализации программа check_lsi.pl получает первые три параметра командной строки:   Через первый параметр программе передается адреса IP серверов Zabbix, на которые нужно отправить данные мониторинга контроллера MegaRAID и подключенных к нему дисков. Если серверов Zabbix несколько, разделите адреса запятой. Второй параметр задает имя хоста, к которому подключен контроллер. Это имя должно совпадать с именем соответствующего хоста на сервере Zabbix. И, наконец, третий параметр позволяет включить вывод отладочной информации на консоль, и при обычном запуске он не используется. Также при инициализации программа check_lsi.pl определяет версию ОС, на которой ее запустили. В зависимости от версии программа записывает в переменную $zabbix_sender различные пути для Linux и FreeBSD. На этапе получения состояния контроллера и дисков программа выдает команду megacli с параметром -LDInfo, о которой мы говорили выше:   Здесь программа проверяет, находится ли дисковый массив в оптимальном состоянии, и используется ли режим отложенной записи. Результат сохраняется в переменных isOptimal и WriteBack, соответственно.   Далее программа выдает команду megacli с параметром -PDList для получения информации обо всех дисках:   В программе определяются переменные:   Программа предпринимает несколько попыток выдачи команды -PDList:   Если команда выполнилась успешно, программа анализирует полученные от нее данные и устанавливает соответствующим образом состояние перечисленных выше переменных:   Для получения состояния блока аккумуляторов, установленных на контроллере MegaRAID, программа выдает команду megacli с параметром -AdpBbuCmd:   По результатам анализа программа записывает в переменную BatteryReplacementRequired строку «Yes», если есть необходимость замены блока аккумуляторов. В переменная RemainingCapacityLow будет записано предупреждение, если емкость аккумуляторной батареи стала низкой. Что касается переменной CycleCount, то в ней сохраняется текущее значение счетчика циклов обучения аккумуляторного блока. Теперь, когда все данных подготовлены, программа check_lsi.pl записывает их в файл:   После этого файл отправляется на все серверы Zabbix, адреса которых были заданы в командной строке через запятую:   Для запуска программы check_lsi.pl мы используем crontab. В этом примере проверка запускается каждый час:    В командной строке заданы адреса IP двух серверов Zabbix, на которые отправляются данные, а также имя хоста, на котором установлен контроллер MegaCLI.   Шаблон для программы check_lsi.pl вы найдете по адресу https://github.com/AlexandreFrolov/shop2you_zabbix_monitoring/blob/main/check_lsi.xml. Вам необходимо подключить этот шаблон к серверу, на котором установлен контроллер MegaCLI. На рис. 3 показаны элементы данных, определенных в этом шаблоне. Как видите, здесь имеются все элементы, которые получает и отправляет на сервер Zabbix только что описанная программа check_lsi.pl. В шаблоне также определены триггеры (рис. 4). Очень высокая степень важности (High) задана для триггеров, указывающих на деградацию массива RAID, а также на снижение количества дисков в состоянии Online ниже двух (в нашем случае используется зеркало из двух дисков и третий диск горячего резерва). Менее важные триггеры указывают на необходимость замены блока аккумуляторов. Также обратите внимание на триггер No LSI heartbeats within last 1.5 hour, для срабатывания которого проверяется следующее выражение: Триггер срабатывает, если данные мониторинга не приходили от сервера дольше чем полтора часа. Так как мы запускаем программу check_lsi.pl через задание crontab раз в час, то этот триггер сообщит нам, что по какой-то причине мониторинг состояния контроллера и дисков не отработал. Для других триггеров установлена минимальная степень важности Information. Например, триггеры BBU Remaining Capacity Low и Mode changed from WriteBack to WriteThrough могут срабатывать при периодическом выполнении цикла обучения, когда аккумулятор сначала разряжается, а потом снова заряжается. Нет необходимости обращать внимание системного администратора на запуск процесса обучения. Если сработал триггер Predictive Failure Count, то это также не приведет к немедленному риску потери информации, однако является поводом для более глубокого анализа состояния контроллера и массива. Аналогично, сообщение Some Raid Drives has Errors сообщает, что на дисках есть ошибки, но сами по себе диски с ошибками могут работать довольно долго (а могут и быстро выйти из строя). Разумеется, для мониторинга своей системы вы можете установить другие степени важности триггеров, а также выбрать другую периодичность запуска программы check_lsi.pl. Автор: Александр Фролов. НЛО прилетело и оставило здесь промокод для читателей нашего блога: — 15% на все тарифы VDS (кроме тарифа Прогрев) — HABRFIRSTVDS.  Маркетолог