Очищення, оптимізація, настройка mysql бази Zabbix

  1. Вступ
  2. Як спланувати навантаження на Zabbix
  3. Очищення і зменшення mysql бази zabbix
  4. Оновлення та налаштування сервера mysql
  5. висновок
  6. Допомогла стаття? Є можливість віддячити автора
  7. Онлайн курс "DevOps практики і інструменти"

Я працюю з серверами малого і середнього бізнесу, невеликих компаній, де вимоги до обсягу і продуктивності бази даних не високі. Найчастіше вистачає дефолтних налаштувань, тому якогось особливого уваги бд я не приділяв. Але сьогодні я розберу питання великого розміру бази даних zabbix, розповім як її зменшити і як оптимізувати її роботу для збільшення швидкодії.

Якщо у вас є бажання навчитися будувати і підтримувати високодоступних і надійні системи, рекомендую познайомитися з онлайн-курсом «DevOps практики і інструменти» в OTUS. Курс не для новачків, для вступу потрібно пройти.

Вступ

У своїй інструкції по встановлення та налаштування zabbix я взагалі не торкаюся питання бази даних mysql або продуктивності сервера в цілому. Я просто беру дефолтні настройки mariadb, які йдуть з установкою і використовую їх. Коли у вас не дуже велика інфраструктура на моніторингу цього цілком достатньо, щоб нормально користуватися системою.

Якщо ви активно використовуєте zabbix і впроваджуєте його повсюдно в усі використовувані системи (а я рекомендую так робити), то ви рано чи пізно зіткнетеся з питанням продуктивності системи моніторингу та розміру бази даних zabbix.

Тема продуктивності zabbix дуже індивідуальна. Вона безпосередньо залежить від того, як ви його використовуєте, а схеми моніторингу можуть бути дуже різні. Одна справа моніторити кілька серверів, а інша справа навантажені свічі на 48 портів зі зніманням метрик з кожного порту раз в 30 секунд.

Щоб допомогти вам розібратися в цій темі і прикинути, до чого готуватися, я поділюся з вами своїм досвідом експлуатації заббікса, його навантаження, продуктивності і обслуговування бази даних mysql. Розповім, як можна зменшити розмір бази.

Як спланувати навантаження на Zabbix

Під невеликої структурою, згаданої на початку, я маю на увазі 50-100 вузлів (НЕ мережеве обладнання з десятками портів) мережі на моніторингу та приблизно 2000-4000 активних елементів даних, які записують 20-40 нових значень в секунду. Під таку мережу вам буде досить невеликий віртуальної машини з 2 ядрами і 4 гб пам'яті. База даних на переважно стандартних шаблонах буде рости приблизно на 2-4 Гб на рік. Далі ще менше, тому що буде автоматично очищатися.

Для моніторингу такої мережі можна взагалі не виконувати ніяких додаткових налаштувань. Моніторинг буде цілком нормально працювати. Якщо ж навантаження почне рости, то перше, з чим ви зіткнетеся - це з розміром і продуктивністю бази даних. База zabbix буде рости пропорційно підключенню до неї хостів. І з цим доведеться щось робити.

Для вирішення питання продуктивності потрібно буде рухатися в двох напрямках:

  1. Очищення бази від непотрібних даних.
  2. Збільшення продуктивності сервера mysql.

Кожен із зазначених питань багатогранний. Далі ми частково їх розглянемо і виконаємо найбільш прості, очевидні і результативні зміни.

Очищення і зменшення mysql бази zabbix

Почнемо з очищення бази даних zabbix від непотрібних даних. Розглянемо по пунктах в тій послідовності, в якій це потрібно робити.

  1. Насамперед треба уважно переглянути всі використовувані шаблони і відключити там все, що вам не потрібно. Наприклад, якщо вам не потрібен моніторинг мережевих з'єднань windows, вимкніть автовизначення мережевих інтерфейсів. Воно саме по собі знаходить десятки віртуальних з'єднань, які повертають нулі при опитуванні та не представляють ніякої цінності. Проте, всі ці дані збираються і зберігаються, створюючи зайве навантаження. Якщо ж вам потрібен моніторинг мережі в windows, зайдіть в кожен хост і відключіть руками зайві адаптери, які будуть знайдені. Цим ви істотно зменшите навантаження. З мого досвіду, в стандартних шаблонах windows моніторинг всіх мережевих інтерфейсів дає приблизно 2/3 всієї навантаження цих шаблонів.
  2. Відредагуйте в використовуваних стандартних шаблонах час опитування і зберігання даних. Можливо вам не потрібна та частота опитування і час зберігання, які задані. Там досить великі інтервали зберігання. Найчастіше їх можна зменшити. В цілому, не забувайте в своїх шаблонах ставити адекватні реальної необхідності параметри. Не потрібно зберігати роками інформацію, яка втрачає актуальність вже через тиждень.
  3. Після відключення зайвих елементів в шаблонах, потрібно очистити базу даних від значень неактивних ітемов. За замовчуванням, вони там залишаються. Можна їх очистити через web інтерфейс, але це погана ідея, тому що незручно і дуже довго. Найчастіше спроби очистити 50-100 елементів за раз будуть супроводжуватися помилками таймаута або зависанням web інтерфейсу. Далі розповім, як це зробити ефективніше.

Для очищення бази даних zabbix від значень неактивних ітемов, можна скористатися наступними запитами. Запускати їх можна як в консолі mysql сервера (максимально швидкий варіант), так і в phpmyadmin, кому як зручніше.

Даними запитами можна прикинути, скільки даних буде очищено:

SELECT count (itemid) AS history FROM history WHERE itemid NOT IN (SELECT itemid FROM items WHERE status = '0'); SELECT count (itemid) AS history_uint FROM history_uint WHERE itemid NOT IN (SELECT itemid FROM items WHERE status = '0'); SELECT count (itemid) AS history_str FROM history_str WHERE itemid NOT IN (SELECT itemid FROM items WHERE status = '0'); SELECT count (itemid) AS history_text FROM history_text WHERE itemid NOT IN (SELECT itemid FROM items WHERE status = '0'); SELECT count (itemid) AS history_log FROM history_log WHERE itemid NOT IN (SELECT itemid FROM items WHERE status = '0'); SELECT count (itemid) AS trends FROM trends WHERE itemid NOT IN (SELECT itemid FROM items WHERE status = '0'); SELECT count (itemid) AS trends_uint FROM trends_uint WHERE itemid NOT IN (SELECT itemid FROM items WHERE status = '0');

Якщо запити нормально відпрацьовують і повертають лічильник даних, які будуть видалені, далі можете їх видаляти з бази наступними sql запитами.

DELETE FROM history WHERE itemid NOT IN (SELECT itemid FROM items WHERE status = '0'); DELETE FROM history_uint WHERE itemid NOT IN (SELECT itemid FROM items WHERE status = '0'); DELETE FROM history_str WHERE itemid NOT IN (SELECT itemid FROM items WHERE status = '0'); DELETE FROM history_text WHERE itemid NOT IN (SELECT itemid FROM items WHERE status = '0'); DELETE FROM history_log WHERE itemid NOT IN (SELECT itemid FROM items WHERE status = '0'); DELETE FROM trends WHERE itemid NOT IN (SELECT itemid FROM items WHERE status = '0'); DELETE FROM trends_uint WHERE itemid NOT IN (SELECT itemid FROM items WHERE status = '0');

Даними запитами ви очистите базу даних zabbix від значень неактивних елементів даних. Але реально розмір бази даних у вас не зменшиться, тому що в дефолтной налаштування бази даних використовується формат innodb. Всі дані зберігаються в файлі ibdata1, який автоматично не очищається після видалення даних з бази.

Адмініструвати таку базу незручно. Потрібно як мінімум налаштувати зберігання кожної таблиці в окремому файлі. Цим ми далі і займемося, а заодно оновимо сервер бази даних до свіжої версії mariadb і реально очистимо базу, зменшивши її розмір.

Оновлення та налаштування сервера mysql

В даному прикладі я використовую сервер CentOS 7. Зі стандартних репозиторіїв встановлюється досить стара версія MariaDB 5.5. Для початку відновимо її до останньої стабільної на момент написання статті версії 10.2. Перед цим зробимо повний бекап бази даних zabbix, попередньо зупинивши сервер.

# Systemctl stop zabbix-server # / usr / bin / mysqldump --opt -v --databases zabbix -uzabbix -ppassword> /root/zabbix.sql

Тепер видалимо з сервера mysql всі бази даних, крім системних.

# Mysql -uroot -ppassword> show databases; + -------------------- + | Database | + -------------------- + | information_schema | | mysql | | performance_schema | | zabbix | + -------------------- +> drop database zabbix; > Drop database performance_schema;

Видаляємо старі файли бази zabbix.

# Rm / var / lib / mysql / ibdata1 # rm / var / lib / mysql / ib_logfile0 # rm / var / lib / mysql / ib_logfile1

Починаємо оновлювати сервер. Додаємо репозиторій MariaDB в систему. Для цього створюємо файл /etc/yum.repos.d/mariadb.repo такого змісту:

[Mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.2/centos7-amd64 gpgkey = https: //yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck = 1

Встановлюємо оновлення:

# Yum install MariaDB-server MariaDB-client

Далі пропоную свій варіант конфіга для mysql сервера. Покладіть його в директорію /etc/my.cnf.d.

# Cat /etc/my.cnf.d/zabbix.cnf [client] port = 3306 socket = /var/lib/mysql/mysql.sock default-character-set = utf8 [mysqld] character_set_server = utf8 collation-server = utf8_bin init_connect = "SET NAMES utf8 collate utf8_bin" port = 3306 socket = /var/lib/mysql/mysql.sock back_log = 50 skip-networking max_connections = 100 max_connect_errors = 10 table_open_cache = 2048 max_allowed_packet = 16M binlog_cache_size = 2M max_heap_table_size = 64M read_buffer_size = 4M read_rnd_buffer_size = 32M sort_buffer_size = 16M join_buffer_size = 16M thread_cache_size = 4 ft_min_word_len = 4 memlock default-storage-engine = InnoDB thread_stack = 240K transaction_isolation = REPEATABLE-READ tmp_table_size = 128M log-bin = mysql-bin binlog_format = mixed expire_logs_days = 5 log_warnings slow_query_log long_query_time = 10 server-id = 1 innodb_file_per_table = 1 innodb_file_format = barracuda innodb_buffer_pool_size = 4G # увагу на параметр! встановити приблизно в 2 рази менше обсягу оперативної пам'яті сервера innodb_buffer_pool_instances = 2 innodb_flush_log_at_trx_commit = 0 innodb_log_file_size = 512M innodb_log_files_in_group = 3 innodb_flush_method = O_DSYNC innodb_lock_wait_timeout = 120 [mysqldump] quick max_allowed_packet = 16M [mysql] no-auto-rehash safe-updates [myisamchk] key_buffer_size = 512M sort_buffer_size = 512M read_buffer = 8M write_buffer = 8M [mysqlhotcopy] interactive-timeout [mysqld_safe] open-files-limit = 8192

Відразу попереджаю, що універсальних налаштувань для mariadb не існує. Я не великий фахівець по тонкій настройці mysql і детально не вникав в оптимізацію роботи з zabbix. І тим більше не тестував продуктивність з різними параметрами. Даний приклад це набір рекомендацій, отриманих з різних джерел. Я сам використовую цей конфіг і якихось нарікань до нього у мене немає, тому ділюся з вами. Можливо, тут є щось, що зовсім не підходить і треба поміняти. Якщо ви побачите таке, прошу поділитися інформацією.

Буде взагалі здорово, якщо хтось запропонує свій найраціональніший конфиг для zabbix. Хоча я розумію, що настройки будуть сильно залежати від параметрів сервера (пам'ять і cpu в основному). Їх потрібно підбирати в кожному конкретному випадку. У ситуації зі стандартною установкою zabbix, коли проблем з продуктивністю немає, мені не хочеться цим займатися.

Запускаємо сервер mariadb.

# Systemctl start mariadb

Якщо сервер не стартує, а в балці / var / log / messages помилка:

[ERROR] Aria engine is not enabled or did not start. The Aria engine must be enabled to continue as mysqld was configured with --with-aria-tmp-tables

Видаліть файли aria_log.

# Rm /var/lib/mysql/aria_log.00000001 # rm / var / lib / mysql / aria_log_control

І знову запускайте mariadb. Перевірити статус запуску можна командою:

# Systemctl status mariadb

# Systemctl status mariadb

Сервер запустився. Є пару зауважень, ми їх пізніше виправимо. Тепер відновлюємо базу даних zabbix з вивантаження.

# Mysql -uroot -ppassword </root/zabbix.sql

Запускаємо утиліту mysql_upgrade для генерації нової бази performance_schema.

# Mysql_upgrade -uroot -ppassword --force

Перезапускаємо mariadb.

# Systemctl restart mariadb

Запускаємо сервер zabbix.

# Systemctl start zabbix-server

Перевіряємо роботу. За ідеєю, все повинно бути в порядку. Тепер база даних zabbix зберігається в директорії / var / lib / mysql / zabbix. Вона зменшилася в розмірі, і кожна таблиця зберігається в окремому файлі.

висновок

Не сподобалася стаття і хочеш навчити мене адмініструвати? Будь ласка, я люблю вчитися. Коментарі в твоєму розпорядженні. Розкажи, як зробити правильно!

Я описав простий спосіб очищення і невеликого збільшення продуктивності бази zabbix. Кардинально це питання вирішують за допомогою партіцірованія бази даних mysql. Детальніше про це можна почитати на сайті заббікса в wiki в розділі howto . Нічого складного в цьому немає, прикладів в мережі багато, але особисто я сам не налаштовував ніколи, не було необхідності.

Допомогла стаття? Є можливість віддячити автора

Онлайн курс "DevOps практики і інструменти"

Якщо у вас є бажання навчитися будувати і підтримувати високодоступних і надійні системи, навчитися безперервної поставки ПО, моніторингу та логування web додатків, рекомендую познайомитися з онлайн-курсом «DevOps практики і інструменти» в OTUS. Курс не для новачків, для надходження потрібні базові знання з мереж і установці Linux на виртуалку. Навчання триває 5 місяців, після чого успішні випускники курсу зможуть пройти співбесіди у партнерів. Перевірте себе на вступний тест і дивіться програму детальніше по.

Допомогла стаття?
Меню сайта
Мини-профиль
  • Регистрация Напомнить пароль?

    Бесплатно можно смотреть фильмы онлайн и не забудьте о шаблоны dle на нашем ресурсе фильмы бесплатно скачать c лучшего сайта
    Опросы
    Топ новости