Вопрос или проблема
С ноября 2018 года у нас есть проблемы с производительностью Zabbix 3.4.10. С тех пор мы выполнили настройку для TCP-соединений, настройку в ОС (CentOS 6.9), настройку в конфигурации MariaDB, настройку в конфигурации Zabbix Server и настройку в конфигурации Zabbix Proxies.
Следующая проблема остается:
Два раза в день (в 17:22 и 20:22, у нас были разные часы в прошлом) History Syncer достигает 100%, и прокси становятся “NoDataProcessing”. В то время как history syncer находится на уровне 100%, начинают появляться несколько тревог “NoData”. Для восстановления мы останавливаем 2 основных прокси, перезагружаем сервер и поднимаем 2 прокси с временным интервалом.
Количество хостов 6679 Количество элементов 732813 Количество триггеров 358638 Требуемая производительность сервера, новые значения в секунду 2695.54
Аппаратные средства (VM):
-
Сервер: CPU: 4 CPU Память: 24GB
-
База данных (Версия 15.1 Distrib 10.3.4-MariaDB, для Linux (x86_64) с использованием readline 5.1): CPU: 8 CPU Память: 64GB Диск: SSD
Инфраструктура:
1 Zabbix Server версия 3.4.10 (lx-all-mon-zserver-01)
1 База данных Версия 15.1 Distrib 10.3.4-MariaDB (lx-all-mon-zdb-03)
6 прокси для машин
1 прокси для мониторинга баз данных
1 прокси для веб-проверок
Решение:
- My.cnf был изменен на следующие настройки:
[client-server]
[mysqld]
datadir = /opt/timwe/data/mysql
innodb_log_group_home_dir = /opt/timwe/data/mysql/innodblog
log-bin = /opt/timwe/data/mysql/binlog
log_error = /opt/timwe/log/mysql_error.log
slow_query_log_file = /opt/timwe/log/slow_query.log
tmpdir=/opt/timwe/data/mysql/tmpfs
innodb_autoextend_increment = 256
innodb_buffer_pool_instances = 12
innodb_buffer_pool_size = 48G
innodb_concurrency_tickets = 5000
innodb_file_per_table = 1
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
innodb_log_file_size = 512M
innodb_log_files_in_group = 8
innodb_old_blocks_time = 1000
innodb_open_files = 2048
innodb_stats_on_metadata = OFF
innodb_force_recovery = 0
skip-name-resolve
bind-address = 0.0.0.0
default_storage_engine = innodb
event_scheduler = ON
binlog-row-event-max-size = 8192
binlog-format = MIXED
character_set_server = utf8
collation_server = utf8_bin
expire_logs_days = 1
join_buffer_size = 262144
max_allowed_packet = 32M
max_connect_errors = 10000
max_connections = 5000
max_heap_table_size = 134217728
port = 3306
query_cache_type = 1
query_cache_size = 268435456
slow-query-log = ON
table_open_cache = 2048
thread_cache_size = 512
tmp_table_size = 134217728
user = mysql
wait_timeout = 86400
[mysql_safe]
log-error=/opt/timwe/log/mysqld_safe_error.log
pid-file=/var/run/mysqld/mysqld.pid
Ответ или решение
Проблема производительности Zabbix: 100% загрузка History Syncer
С момента внедрения Zabbix 3.4.10 в ноябре 2018 года ваша система сталкивается с серьезными проблемами производительности. Мы видим, что вы предпринимали различные усилия по оптимизации, включая настройку TCP-соединений, параметры ОС (CentOS 6.9), конфигурации MariaDB и Zabbix Server, однако критическая проблема продолжает возникать в виде 100% загрузки History Syncer дважды в день, что приводит к отсутствию данных на прокси и увеличению количества "NoData" тревог. Рассмотрим подробно возможные пути решения этой проблемы.
Анализ текущей конфигурации
Аппаратные ресурсы
Доступные аппаратные ресурсы весьма ограничены для такой большой конфигурации:
- Zabbix Server:
- 4 CPU
- 24 GB RAM
- База данных:
- 8 CPU
- 64 GB RAM
- SSD для хранения данных
С учетом 6679 хостов и 732813 элементов, необходимое количество получаемых значений в секунду составляет 2695.54. Это может быть слишком высоким показателем для вашего сервера Zabbix, учитывая его аппаратные ограничения. Поэтому, возможно, стоит рассмотреть увеличение ресурсов сервера.
Настройки MariaDB
Вы предоставили настройки MariaDB, которые выглядят достаточно хорошо оптимизированными для использования InnoDB. Однако вам следует проверить следующие настройки:
- Убедитесь, что значение
innodb_buffer_pool_size
не превышает 75% от доступной оперативной памяти. В вашем случае значение в 48GB довольно близко к пороговому значению для базы данных, поскольку у вас на сервере 64GB RAM. Здорово, если вы оставите 16GB для других процессов. - Обратите внимание на значение
max_connections
, которое установлено на 5000. Однако такая высокая настройка может не всегда быть целесообразной, особенно если вы не ожидаете такого количества одновременных подключений. - Убедитесь, что выполняемые запросы к базе данных оптимизированы и не вызывают задержек.
Проблемы с History Syncer
History Syncer загружает базу данных для синхронизации данных с прокси. Проблема высоких нагрузок может быть связана с:
- Большим объемом данных: Ваша система генерирует значительное количество данных, что ведет к увеличению нагрузки на базу данных в заранее заданные времена.
- Параллельными процессами: Возможно, у вас есть конкурирующие процессы, которые требуют значительных ресурсов одновременно. Проверьте, нет ли запланированных задач (например, бэкапов или других jobs), которые могут совпадать по времени с загрузкой History Syncer.
- Оптимизация запрашиваемых данных: Рассмотрите возможность уменьшения количества обрабатываемых данных в час пик, например, снизив количество элементов, возвращаемых за раз.
Рекомендации по улучшению
-
Увеличение ресурсов сервера Zabbix: Увеличение количества доступных CPU и RAM на сервере Zabbix, что может значительным образом повлиять на общий throughput.
-
Оптимизация исполнения Job’ов: Пересмотрите время запусков задач, используемых в вашей инфраструктуре, чтобы избежать конфликтов с ресурсами. Например, не выполняйте тяжелые задачи одновременно с пиковыми комиссиями History Syncer.
-
Параметры конфигурации Zabbix: Проверьте настройки
StartHistorySyncers
иHistorySyncerFrequency
. Попробуйте увеличить количество syncer’ов или уменьшить частоту их запуска. -
Настройка индексов в MariaDB: Проверьте индексы для всех таблиц, на которые ссылаются запросы в Zabbix, и удостоверьтесь, что они настроены должным образом для ускорения выполнения.
-
Мониторинг и логирование: Используйте инструменты мониторинга и логирования, такие как
slow_query_log
, для идентификации медленных запросов и их последующей оптимизации.
Следуя вышеуказанным рекомендациям, вы сможете улучшить производительность вашего решения Zabbix и последствия 100% загрузки History Syncer. Если проблемы продолжатся, возможно, стоит рассмотреть возможность обновления до более новой версии Zabbix, где улучшена производительность и дополнительные функции, которые могут помочь в управлении нагрузками.