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

Предисловие

Одним из важных нововведений в версии 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  или скриптом-установщика 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), который выполняет несколько действий:

  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) - Создание дампа баз данных 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

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

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

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

На случай непредвиденных проблем, скрипт выполняет полное копирование базы данных в отдельный 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




  • Нет меток