Русский
Русский
English
Статистика
Реклама

Как ускорить миграцию Zabbix на TimescaleDB

image


После того, как в прошлой статье Как мигрировать 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
К списку статей
Опубликовано: 29.03.2021 10:21:19
0

Сейчас читают

Комментариев (0)
Имя
Электронная почта

Системное администрирование

It-инфраструктура

Мониторинг

Zabbix

Timescaledb

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru