MariaDB Zabbix monitoring
Last updated
Last updated
https://habr.com/ru/companies/first/articles/689138/
От правильной настройки и надежной работы сервера СУБД зависит работоспособность и быстродействие интернет-магазинов, работающих на сервисе SAAS. То же самое относится к любым сайтам, если им нужна база данных.
Очень часто в качестве СУБД используется MySQL или MariaDB.
Из нашей статьи вы узнаете, как установить сервер MariaDB в ОС Debian 11, как оптимизировать его параметры сразу после установки и как контролировать работу MariaDB вручную и с помощью Zabbix.
Cразу после установки конфигурация сервера MySQL или MariaDB обычно сильно отличается от оптимальной и требует обязательной настройки. В процессе работы могут появляться новые базы данных, новые таблицы и запросы. При этом может потребоваться дополнительная настройка параметров работы СУБД.
Отличия MariaDB от MySQL рассмотрены здесь. А в этой статье рассказано о совместимости. В плане настройки конфигурации и мониторинга для MySQL и MariaDB используются схожие процедуры.
Если на сервере есть панель управления, такая как ISPmanager или Hestia Control Panel, то сервер MariaDB или MySQL у вас, скорее всего, уже установлен. Обычно MariaDB устанавливается вместе с панелью, если это задано при установке. Некоторые панели, например, ISPmanager, позволяют добавить MySQL или MariaDB уже после установки панели.
Если панель не используется, установите MariaDB вручную следующими командами:
После установки сервиса проверьте, что он запустился и находится в состоянии enabled, то есть будет запущен автоматически после перезагрузки ОС:
Для оценочной проверки параметров MariaDB или MySQL можно использовать утилиту MySQLTuner, опубликованную на Github.
После того как вы добавили на сервер базы данных пользователей и сервер проработал хотя бы сутки, загрузите утилиту MySQLTuner и запустите ее следующим образом:
Если вы запускаете эту утилиту в Debian 11 от пользователя root, то вам не нужно указывать пароль root сервера MariaDB.
Через некоторое время утилита после запуска выведет на консоль подробный отчет. Внимательно просмотрите его, особенно уделите внимание строкам, отмеченным восклицательными знаками:
В конце отчета вы найдете раздел рекомендаций:
Здесь указаны изменения, которые нужно внести в файл конфигурации MariaDB. Обратите внимание, что если сервер СУБД проработал менее 24 часов, то рекомендации могут быть неточными.
Настройки в файле конфигурации MariaDB могут очень сильно повлиять на работоспособность и производительность сайтов, работающих с базами данных.
Для повышения производительности в первую очередь необходимо правильно задать размер буферов. При этом нужно сделать так, чтобы общий объем памяти, потребляемый MariaDB, не превысил разумных значений. Иначе памяти может не хватить, и сервис MariaDB завершит свою работу аварийно, либо вообще не сможет стартовать.
Ни в коем случае не изменяйте значения параметров, не разобравшись предварительно, на что они влияют. Даже если вы получили такие рекомендации от утилиты MySQLTuner.
Конфигурация сервиса MariaDB находится в файле /etc/mysql/mariadb.conf.d/50-server.cnf. Перед изменениями сделайте копию файла конфигурации, например, в своем рабочем каталоге. Тогда, если с измененной конфигурацией сервер не запустится, вы всегда сможете восстановить старый вариант.
После редактирования файла конфигурации перезапустите MariaDB и убедитесь, что сервис запустился:
Если сервис mariadb не запустился, посмотрите журнал ошибок и найдите там возможную причину.
Чтобы понять, где находится файл журнала ошибок, откройте файл /etc/mysql/mariadb.conf.d/50-server.cnf и проверьте параметр log_error:
В новых версиях MariaDB этот параметр закрыт символом комментария. Это означает, что для журнала используется сервис journald.
В этом случае содержимое журнала MariaDB можно посмотреть так:
Хорошую статью по использованию journalctl можно найти здесь.
Теперь, когда вы знаете, как редактировать конфигурацию MariaDB и где смотреть журнал ошибок, перейдем к оптимизации параметров.
Для того чтобы сервис не тратил время на поиск адреса IP клиента в DNS, добавьте в файл конфигурации следующую строку:
Это позволит увеличить производительность при большом количестве запросов со стороны клиентов с разных адресов IP.
Если в ваших базах данных используются таблицы типа MyISAM, нужно настроить размер буфера для индексных блоков. Этот размер задается параметром key_buffer_size и по умолчанию составляет всего 128 Мбайт.
Оптимальный размер этого буфера позволяет исключить обращения к диску для чтения блоков индекса.
Чтобы узнать текущий размер буфера, введите в консольном приглашении MariaDB такую команду:
В документации MariaDB рекомендуется установить размер key_buffer_size равной примерно четверти объема памяти, доступной на сервере: https://mariadb.com/kb/en/optimizing-key_buffer_size/.
Для более точной установки размера буфера нужно сравнить значения переменных key_read_requests и key_reads. Первая из них содержит общее количество запросов на чтение индекса, а вторая — количество запросов, для выполнения которых пришлось читать данные с диска.
Значение переменных можно посмотреть так:
Чем меньше отношение значения key_reads к значению key_read_requests, тем лучше. Отношение 1:100 еще приемлемо, а вот отношение 1:10 уже очень плохое — нужна оптимизация размера key_buffer_size.
При выделении памяти учтите, что на сервере работают и другие сервисы, помимо СУБД, которым также требуется память.
Если вы проверяете настройки при помощи утилиты mysqltuner.pl, то при недостатке свободной памяти на сервере для реализации текущих настроек MariaDB вы получите такое предупреждение:
В этом случае нужно или добавить памяти на сервер, или выполнить дополнительную оптимизацию параметров, влияющих на потребление памяти.
Например, если вы не используете таблицы MyISAM, то для key_buffer_size можно установить минимальное значение 64 Кбайт или использовать значение по умолчанию.
Если ваши базы данных содержат таблицы InnoDB, нужно установить буферный пул для кэширования и индексирования данных. Этот размер задается при помощи параметра innodb_buffer_pool_size.
По умолчанию для MariaDB размер буферного пула составляет всего 128 Мбайт, поэтому его нужно увеличить, например:
Используйте здесь от четверти до половины общего объема памяти, установленной на сервере, но с учетом требований к памяти других сервисов.
Также установите размер файла журнала, равный четверти от размера innodb_buffer_pool_size:
Еще нужно установить значение параметра innodb_buffer_pool_instances, равное количеству гигабайт памяти , выделенных для буферного пула:
Чтобы определить необходимый размер буферного пула innodb_buffer_pool_size, сравните количество запросов из буферного пула Innodb_buffer_pool_read_requests с количеством операций чтения с диска Innodb_buffer_pool_reads:
В идеале количество чтений Innodb_buffer_pool_reads должно составлять не более 1% от общего количества запросов Innodb_buffer_pool_read_requests.
Также убедитесь, что в параметре Innodb_buffer_pool_wait_free находится нулевое значение.
В противном случае размер буферного пула нужно увеличить.
Очень внимательно стоит отнестись к изменению размеров следующий буферов:
read_buffer_size
read_rnd_buffer_size
join_buffer_size
Параметры read_buffer_size и read_rnd_buffer_size задают размеры буферов чтения и размер буфера случайного чтения, соответственно.
Параметр join_buffer_size задает размер буфера для операций объединения таблиц без использования индексов.
Следует учитывать, что буферы, задаваемые этими параметрами, создаются для каждого соединения с MariaDB. Максимальное количество соединений задается так:
Когда создается много соединений, для указанных буферов может потребоваться очень много памяти. Подробнее об этом можно прочитать здесь.
Для приблизительной оценки влияния настроек MySQL и MariaDB на потребление памяти можно использовать калькулятор MySQL Calculator (рис. 1).
Рис. 1. Калькулятор MySQL Calculator
Задавая значения настроек, вы можете наблюдать в поле Totals изменение объема памяти, необходимого для работы СУБД.
Если на сервере работает очень много сайтов, то в журнале MariaDB могут появиться сообщения о невозможности открыть файл базы данных.
По умолчанию MariaDB может открыть 16384 файла. Чтобы увеличить это количество, например, вдвое, отредактируйте файл /etc/systemd/system/mariadb.service.d/nofile.conf, добавив в него строки:
Далее перезапустите сервис и проверьте результат:
В интернете есть немало статей, посвященных оптимизации параметров MySQL и MariaDB, вот, например, несколько ссылок, которые могут быть вам полезны:
И, конечно, читайте документацию MariaDB.
Учтите, что нет универсальной инструкции или конфигурации, подходящей для любого случая. Настройка параметров MariaDB (как и любой другой СУБД) должна выполняться индивидуально для каждой конкретной ситуации.
Если на сервере, где установлена СУБД MySQL или MariaDB, есть Zabbix agent 2, то вы сможете очень просто организовать мониторинг СУБД. Используйте для этого плагин MySQL by Zabbix agent, описанный здесь.
Откройте страницу Host в Web-интерфейсе Zabbix для узла, на котором нужно контролировать работу MariaDB. Затем добавьте к хосту шаблон MySQL by Zabbix agent 2.
Чтобы этот шаблон заработал, нужно создать пользователя, с правами которого будет выполняться мониторинг, и настроить соответствующим образом макросы шаблона.
Так как утилита mysql запущена от имени root в Debian, пароль root для подключения к MariaDB указывать не нужно.
Создайте пользователя zbx_monitor и укажите необходимые права доступа:
Здесь вместо символов ‘********’ укажите пароль.
Создав пользователя, добавьте для хоста, где работает сервис MariaDB, три макроса шаблона MySQL by Zabbix agent 2.
В макросе {$MYSQL.DSN} задайте адрес и порт для подключения к MariaDB как tcp://localhost:3306, а в макросах {$MYSQL.USER} и {$MYSQL.PASSWORD} задайте, соответственно, имя пользователя zbx_monitor и его пароль (рис. 2).
Рис. 2. Настройка макросов для шаблона MySQL by Zabbix agent 2
Такие настройки нужно сделать для всех хостов с контролируемым сервисом MariaDB, при этом имеет смысл использовать на разных хостах для пользователя zbx_monitor разные пароли.
На рис. 3 приведены все макросы шаблона MySQL by Zabbix agent 2.
Рис. 3. Макросы шаблона MySQL by Zabbix agent 2
Многие из этих макросов используются в условиях триггеров. Вы можете их изменять, если требуется настроить какие-либо из условий.
В шаблоне MySQL by Zabbix agent 2 вы найдете очень большое количество метрик, с помощью которых можно оценить состояние СУБД, узнать размеры баз данных и получить другую важную информацию. Небольшая часть метрик (часть одной из трех страниц) представлена на рис. 4.
Рис. 4. Метрики шаблона MySQL by Zabbix agent 2
Для каждой метрики строится график, с помощью которого можно отслеживать изменения соответствующей метрики. Например, на рис. 5 показано количество команд SELECT, выполненных сервером за одну секунду.
Рис. 5. Количество выполненных команды SELECT за одну секунду
На рис. 6 показаны триггеры, определенные в шаблоне MySQL by Zabbix agent 2.
Рис. 6. Триггеры шаблона MySQL by Zabbix agent 2
Обратите внимание, что в условиях срабатывания используются макросы, упомянутые выше.
Самый большой уровень серьезности High назначен триггеру MySQL: Service is down. Он срабатывает, когда сервис СУБД не работает, и нужно срочно разбираться, в чем проблема.
Средний уровень серьезности Average у триггеров MySQL: Refused connections и MySQL: Server has aborted connections. Если сработали эти триггеры, сервис не успевает обрабатывать все соединения от клиентов.
Что касается триггеров с уровнем серьезности Warning, то они предупредят системного администратора о недостаточном использовании буферного пула, о слишком высокой скорости создания временных таблиц в памяти и на диске, о слишком высокой скорости создания временных файлов, а также о наличии медленных запросов. В этом случае имеет смысл заняться оптимизацией настройки MariaDB или приложений.
Триггеры с низким уровнем серьезности Information предупредят об изменении версии и перезапуске сервиса СУБД, а также о проблемах с получением данных от агента.
Мониторинг состояния MariaDB с помощью Zabbix поможет выявить ряд проблем, связанных с работоспособностью и производительностью сервиса СУБД. Однако для более детального анализа ситуации и для оптимизации параметров работы потребуется анализ метрик и текущих значений параметров работы MariaDB.
Автор: Александр Фролов