Дерево страниц
Перейти к концу метаданных
Переход к началу метаданных

Одними из важных нововведений в версии 1.7 в ECCM являются обновление версии Postgres c 12.5 на 14.2 и перевод таблиц для хранения метрик на движок TimesacaleDB2.6. 

В связи с этим требуется перенос данных из старой версии в новую. Для того чтобы сделать это проще и безопаснее, в данном разделе представлен скрипт переноса данных и инструкция для обновления проекта с версии 1.6 на 1.7.

Обновление будет состоять из нескольких операций:

  1. Остановка старой версии ECCM 1.6
  2. Обновление базы данных
  3. Запуск новой версии 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 из каталогов с файлами запуска ECCM 1.6:

Остановка 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

Далее необходимо обновить БД.

Обновление БД

Для удобства обновления БД в состав файлов для запуска 1.7 добавлен скрипт postgres-upgrade.sh (находится в ./db-tools/postgres-upgrade.sh), который выполняет несколько действий:

  1. запуск вспомогательного контейнера с Postgres12.5 для выполнения действий с существующей БД;
  2. вычисление объема данных, хранимых в БД;
  3. проверка свободного места на диске;
  4. создание дампа существующих данных в БД (в зависимости от объема данных и мощности сервера время выполнения может отличаться) в /tmp/eccm-dump/eccm-postgres-upgrade-dump.tar.gz;
  5. создание копии существующего docker-хранилища для Postgres (используемого базой данных) с названием postgres_eccm-postgres-dump;
  6. пересоздание хранилища и контейнера Postgres на новой версии;
  7. загрузка дампа данных, созданного на 4 шаге, в новую БД.

Использование скрипта

Перед запуском скрипта обновления нужно остановить работу ECCM предыдущей версии (1.6).

Для запуска перейдите в директорию со скриптом. Он должен находиться в ./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) — cоздание дампа баз данных Zabbix позволяет перенести накопленные данные со старой версии Postgres в новую. Актуально, если будет продолжать использоваться старый движок опроса.

(n) — исключение данных 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

Для запуска проекта на новой версии нужно перейти в директорию с файлами установочного архива новой версии и выполнить команду:

sudo ./compose-tools.sh --start <ECCM ADDRESS>

Перезапуск проекта на старой версии БД

На случай непредвиденных проблем, скрипт выполняет полное копирование базы данных в отдельный docker-volume с названием postgres_eccm-postgres-dump. Это позволяет быстро перезапустить проект на предыдущей версии БД и сервисов.

Для этого нужно скорректировать название используемого volume для баз данных в файлах запуска версии 1.6 в файле 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

  • Нет меток