Предисловие
Одним из важных нововведений в версии 1.7 в ECCM является обновление версия Postgres c 12.5 на 14.2 и перевод таблиц для хранения метрик на движок TimesacaleDB2.6.
В связи с этим, требуется перенос данных из старой версии в новую, для того, чтобы сделать это проще и безопаснее, мы подготовили скрипт переноса данных и инструкцию, как правильно обновить проект с версии 1.6 на 1.7.
Обновление будет состоять из нескольких операций:
- Остановка старой версии ECCM 1.6
- Обновление базы данных
- Запуск новой версии ECCM 1.7
В конце статьи есть раздел, посвященный откату изменений с 1.7 до предыдущей версии 1.6.
Для удобства работы, рекомендуем предварительно разместить файлы для запуска новой версии в соседнюю директорию, от старой, например так:
$ tree -L 2 --dirsfirst . ├── 1.6 │ ├── eccm │ ├── identity-provider │ ├── postgres │ ├── README.md │ ├── compose-tools.sh │ └── technical_support.sh ├── 1.7 │ ├── db-tools │ ├── eccm │ ├── identity-provider │ ├── postgres │ ├── README.md │ ├── compose-tools.sh │ └── technical_support.sh
Остановка старой версии ECCM
Для обновления ECCM с версии 1.6 до версии 1.7 сперва нужно остановить запущенные сервисы средствами docker-compose или скриптом-установщика compose-tools.sh из каталогов с файлами запуска ECCM 1.6.
Остановка ECCM средствами скриптом-установщика compose-tools.sh:
cd <путь до каталога с файлами запуска ECCM 1.6> sudo ./compose-tools.sh --stop
Остановка ECCM средствами docker-compose:
- В каталоге identity-provider
cd <путь до каталога с файлами запуска ECCM 1.6>/identity-provider sudo docker-compose down
- В каталоге eccm
cd <путь до каталога с файлами запуска ECCM 1.6>/eccm sudo docker-compose down
- В каталоге postgres
cd <путь до каталога с файлами запуска ECCM 1.6>/postgres sudo docker-compose down
Далее переходим к обновлению БД Postgres
Обновление БД
Для простого обновления БД, в состав файлов для запуска 1.7, добавлен скрипт postgres-upgrade.sh (находится в ./db-tools/postgres-upgrade.sh), который выполняет несколько действий:
- запуск вспомогательного контейнера с postgres12.5 для выполнения действий с существующей БД;
- вычисление объема данных, хранимых в БД;
- проверка свободного места на диске;
- создание дампа существующих данных в БД (в зависимости от объема данных и мощности сервера может выполняться различное время) в /tmp/eccm-dump/eccm-postgres-upgrade-dump.tar.gz;
- создание копии существующего docker-хранилища для postgres (используемого базой данных) с названием postgres_eccm-postgres-dump;
- пересоздание хранилища и контейнера postgres на новой версии;
- загрузка дампа данных, созданного на 4 шаге, в новую БД.
Использование скрипта
Для запуска нужно перейти в директорию со скриптом, он должен находиться в ./db-tools относительно корневой директории, в которую распаковали архив с файлами запуска.
Запуск командой
bash postgres-upgrade.sh
В процессе работы скрипта пользователю задаются уточняющие вопросы
Postgresql data will be recreated. Are you sure? [y/N]
Перед этим вопросом пользователю будет отображена информация об объеме данных, хранимых в БД и количестве свободного места на жестком диске, чтобы пользователь мог оценить возможность проведения операции.
(y) - продолжить процесс обновления
(N) - прервать процесс
Create the Zabbix database backup? [Y/n]
(Y) - Создание дампа баз данных Zabbix позволяет перенести накопленные данные со старой версии postgres в новую. Актуально в случае если будет продолжать использоваться старый движок опроса.
(n) - Bсключение данных Zabbix из дампа, что имеет смысл при переходе на новый движок опроса устройств в версии ECCM 1.7 и позволяет сэкономить время обновления баз данных (и требуемое место на диске).
Create the Polemarch log table backup? Be careful! If no, then all task logs will be lost! [Y/n]
Таблица содержит логи выполнения задач на устройствах, таких как "Синхронизация конфигурации", "Применение конфигурации", и "Обновление". Как правило, эта информация не востребована, но эти данные могут занимать значительный объем.
(Y) - сохранение логов выполнения задач в дамп
(n) - исключение данных таблицы с логами из дампа.
Пример выполнения скрипта
tester@tester:~/eccm-deploy/docker/run/db-tools$ ./postgres-upgrade.sh Postgresql docker-compose directory does not provided. Using /home/tester/eccm-deploy/docker/run/postgres. Error: No such volume: postgres_eccm-postgres-dump Start Postgresql upgrading: hub.eltex-co.ru/eccm/postgres:12.5 -> hub.eltex-co.ru/eccm/timescaledb:pg14. Deploying old Postgresql hub.eltex-co.ru/eccm/postgres:12.5... Creating volume "postgres_eccm-postgres-dump" with default driver Recreating postgres_postgres_1 ... done db_name | db_size -------------------------------------+--------- postgres | 7945 kB template1 | 7801 kB template0 | 7801 kB identity_provider_db | 8265 kB identity_provider_access_control_db | 9329 kB eccm | 14 MB zabbix | 25 MB polemarch-db | 11 MB (8 rows) Total databases size is 0.12207 GB. Upgrade requires 0.317382 GB. Disk have 43G free space available at /. Postgresql data will be recreated. Are you sure? [y/N] y Create the Zabbix database backup? [Y/n] y Create the Polemarch log table backup? Be careful! If no, then all task logs will be lost! [Y/n] n Creating backup file... Backup file successfully created. Creating backup volume... Backup volume successfully created. Stopping postgres_postgres_1 ... done Removing postgres_postgres_1 ... done Removing network postgres_default Deploying new Postgresql hub.eltex-co.ru/eccm/timescaledb:pg14... Creating network "postgres_default" with the default driver Creating volume "postgres_postgres" with default driver Pulling postgres (hub.eltex-co.ru/eccm/timescaledb:pg14)... Creating postgres_postgres_1 ... done Start dump uploading... Dump successfully uploaded. Stopping postgres_postgres_1 ... done Removing postgres_postgres_1 ... done Removing network postgres_default Postgresql successfully upgraded. Dump file stored in /tmp/eccm-dump. Dump volume saved as postgres_eccm-postgres-dump. tester@tester:~/eccm-deploy/docker/run/db-tools$
Запуск новой версии ECCM
Для запуска проекта на новой версии нужно перейти в директорию с файлами установочного архива новой версии и выполнить команду:
|
Перезапуск проекта на старой версии БД
На случай непредвиденных проблем, скрипт выполняет полное копирование базы данных в отдельный docker-volume с названием postgres_eccm-postgres-dump. Это позволяет быстро перезапустить проект на предыдущей версии БД и сервисов.
Для этого нужно поправить в файлах запуска версии 1.6 название используемого volume для баз данных в файле postgres/docker-compose.yml (можно полностью скопировать приложенную здесь конфигурацию) :
version: '3.7' services: postgres: image: hub.eltex-co.ru/eccm/postgres:12.5 ports: - 5432:5432 volumes: # - postgres:/var/lib/postgresql/data - postgres_eccm-postgres-dump:/var/lib/postgresql/data - ./data/postgresql.conf:/etc/postgresql/postgresql.conf environment: POSTGRES_DB: postgres POSTGRES_USER: ${POSTGRES_USER} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} TZ: ${POSTGRES_TIMEZONE} PGTZ: ${POSTGRES_TIMEZONE} shm_size: ${POSTGRES_SHM_SIZE:-8gb} restart: always command: - postgres - -c - config_file=/etc/postgresql/postgresql.conf labels: logger_type: postgres_default volumes: # postgres: postgres_eccm-postgres-dump: external: true