Миграция zabbix с mysql на timescaledb
Заббикс недавно анонсировал официальную поддержку postgres timescaledb, что должно решить одну из самых актуальных проблем, удаление устаревших исторических данных в заббикс.
Для этого используют и эффективно, партицирование. Но только для таблиц history* и trends*.
Если использовать партицирование для других таблиц, то это ведёт к разрушением целостности и связанности между таблицами и как следствие переход на новую версию становится проблематичным.
Чтобы решить эти проблемы, — использование timescaledb вместо партицирования mysql.
Это позволит не использовать партицирование, и эффективно работать с удалением данных заббикс.
В данной статья я расскажу, как протестировать миграцию быстро и безопасно.
Итак, исходная инфраструктура:
- Тестовый стенд, Centos 7, Docker, 32G ОЗУ, 1Tb DISK
- Заббикс mysql, настроена репликация master slave
- Версия zabbix 4.12 mysql, объём 1,5Tb
- Версия после миграции 4.4, pgsql,timescaledb
План миграции:
- Сделать дамп базы данных mysql со slave без таблиц history* и trends*
- Скопировать бекап на тестовый стенд:
mysqldump --host=127.0.0.1 --user=root --password=pass --single-transaction --events --triggers --routines --ignore-table=zabbix.history --ignore-table=zabbix.history_log --ignore-table=zabbix.history_str --ignore-table=zabbix.history_text --ignore-table=zabbix.history_uint --ignore-table=zabbix.trends --ignore-table=zabbix.trends_uint --skip-comments --quick --set-gtid-purged=OFF zabbix | ssh root@10.10.10.10 'cat > /var/lib/mysql/backup-zabbix-$(date +%F_%H-%M-%S).sql'
3. Развернуть тестовую mysql базу на стенде
mysql -u zabbix zabbix < /var/lib/mysql/backup-zabbix-2019-10-10.sql
4. Собрать в docker все необходимые для миграции инструменты:
cd /opt/
git clone https://github.com/bakaut/zbx2timescaledb.git
cd /opt/zbx2timescaledb/ztmp
Собрать pgloader (инструмент для миграции mysql pgsql)
cd ../pgloader/builder
make build
Из исходников zabbix-server 4.4 postgres “вытащить” базу create.sql.gz
cd ../zbx-source
make build
Разделить create.sql.gz на create и alter и добавить эти файлы в pgloader и добавить файл конфига zabbix.load
cd ../pgloader
make build
Пояснения файла zabbix.load
LOAD DATABASE
FROM mysql://zabbix:zabbix@127.0.0.1/zabbix
INTO postgresql://zabbix:zabbix@127.0.0.1/zabbix
WITH include no drop,
truncate,
create no tables,
create no indexes,
no foreign keys,
reset sequences,
data only
SET MySQL PARAMETERS
max_execution_time = '0'
SET maintenance_work_mem TO '1024MB', work_mem to '512MB'
ALTER SCHEMA 'zabbix' RENAME TO 'public'
EXCLUDING TABLE NAMES MATCHING ~/history.*/, ~/trend.*/
BEFORE LOAD EXECUTE create.sql;max_execution_time = '0' бесконечное время на select из mysql1. Создаём в pgsql схему из create.sql
2. Копируем из mysql данные в pgsql
3. Не копируем history и trend
Запускаем базу pgsql timescaledb и копируем alter.sql
cd ../pgsql/
make recreate
Запускаем миграцию с mysql на pgsql
cd ../pgloader
make run
Запускаем репликацию с mysql на pgsql
cd ../pgmigration
make build
make init
make run
Настройка под вашу инфраструктуру:
Поменять переменные в файлах:
pgloader/zabbix.load
pgmigration/default.yml
Поменяйте user password на ваши.
Чтобы запустить полностью миграцию, нужно:
cd /opt/
git clone https://github.com/bakaut/zbx2timescaledb.git
cd /opt/zbx2timescaledb/ztmp
bash resreate.sh