[Системное администрирование, IT-инфраструктура] Как ускорить миграцию Zabbix на TimescaleDB

Автор Сообщение
news_bot ®

Стаж: 7 лет 2 месяца
Сообщений: 27286

Создавать темы news_bot ® написал(а)
29-Мар-2021 12:32


После того, как в прошлой статье Как мигрировать Zabbix с MySQL на PostgreSQL с минимальным downtime я успешно перенес Zabbix с MySQL на PostgreSQL, встала необходимость сделать следующий шаг — мигрировать БД на TimescaleDB, т.к. ради нее все и затевалось.
У читателя может возникнуть вопрос: зачем нужна эта статья, если есть простой и понятный мануал?
Но проблема, как и в прошлой статье, скрыта в downtime. В мануале ясно написано:
The migration of existing history and trend data may take a lot of time. Zabbix server and frontend must be down for the period of migration.
Исходные данные следующие:

Я всячески игрался с тюнингом PostgreSQL, добавлял ресурсы на виртуальную машину с PostgreSQL. Испытанный максимум ресурсов — 24 CPU, 64 GB RAM. Но, очевидно, скрипт миграции упирается в дисковую производительность. В итоге при моей базе данных размером в ~350 Гб миграция занимала 15 часов. Все это время мониторинг отключен.
Я пошел читать документацию TimescaleDB по миграции данных и нашел такой способ, обозначенный как "Faster Method":
  • выбираем таблицу, которую хотим мигрировать в гипертаблицу. Например, history
  • создаем новую таблицу, аналогичную старой, при этом исключая индексы
    CREATE TABLE history_new (LIKE history INCLUDING DEFAULTS INCLUDING CONSTRAINTS EXCLUDING INDEXES);
  • конвертируем новую таблицу в гипертаблицу
    SELECT create_hypertable('history_new', 'clock', chunk_interval => 86400);
  • перемещаем все данные из history в history_new
    INSERT INTO history_new SELECT * FROM history;
  • удаляем старую таблицу history
    DROP TABLE IF EXISTS history;
  • переименовываем history_new в history
    ALTER TABLE IF EXISTS history_new RENAME TO history;
  • создаем индекс (как — описано в файле схемы БД schema.sql)
    CREATE INDEX history_1 in history (itemid,clock);

И так надо сделать для таблиц:
  • history
  • history_log
  • history_str
  • history_text
  • history_uint
  • trends
  • trends_uint

Для ускорения процесса я поместил команды для каждой таблицы в отдельные файлы, чтобы запускать их параллельно.
Ссылка на github репозиторий со скриптами:
https://github.com/niklep/zabbix_timescaledb_scripts
Скрипт finish.sql необходимо выполнить уже после завершения миграции всех таблиц.
В итоге миграция таблиц в гипертаблицы TimescaleDB в моем случае заняла 5 часов, что сильно меньше изначальных 15.
PROFIT.
===========
Источник:
habr.com
===========

Похожие новости: Теги для поиска: #_sistemnoe_administrirovanie (Системное администрирование), #_itinfrastruktura (IT-инфраструктура), #_monitoring (мониторинг), #_zabbix, #_timescaledb, #_sistemnoe_administrirovanie (
Системное администрирование
)
, #_itinfrastruktura (
IT-инфраструктура
)
Профиль  ЛС 
Показать сообщения:     

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы

Текущее время: 26-Апр 22:32
Часовой пояс: UTC + 5