Перейти к содержанию

Резервное копирование

Данные для резервного копирования

При выполнении процедуры резервного копирования AW необходимо включить в состав резервной копии следующие данные:

  • Файлы конфигурации (пути к файлам и директориям указаны относительно директории с установленной AW, по умолчанию /opt/aw/app):
    • docker - директория, cодержащая файлы настроек для различных сервисов из состава AW, таких как ClickHouse, RabbitMQ, PostgreSQL и др.;
    • .env - файл с настройками AW;
    • docker-compose.yml и docker-compose.prod.yml - файлы со списком сервисов для запуска.
  • База данных AW:
    • db/postgres - файлы БД, содержащие данные об объектах, созданных в процессе работы с AW (пользователи, источники, модели, информационные панели и т.п.).
  • Файловые источники, загруженные драйвера, изображения и т.п.:
    • file_storage/api/
    • file_storage/minio
    • file_storage/jars
    • file_storage/file_puller

Резервное копирование файлов конфигурации

Для выполнения операции резервного копирования файлов конфигурации AW выполните следующие действия:

  1. выполните подключение к серверу приложения по SSH;
  2. перейдите в рабочую директорию приложения (по умолчанию - /opt/aw/app ):
cd /opt/aw/app

выполните резервное копирование файлов - конфигурации:

tar -czf aw-conf-$(date "+%Y-%m-%d").tar.gz ./.env ./docker ./docker-compose.yml ./docker-compose.prod.yml

В результате выполнения команды будет создан архив с текущей датой в имени, например:

aw-conf-2024-10-27.tar.gz

Переместите архив в резервное хранилище.

Резервное копирование БД AW

Файловое копирование БД AW (требует остановки сервиса)

Для резервного копирования БД Системы выполните следующие действия:

  1. выполните подключение к серверу приложения по SSH;
  2. перейдите в рабочую директорию приложения ( по умолчанию - /opt/aw/app ):
cd /opt/aw/app
  1. остановите приложение ( это необходимо, чтобы обеспечить консистентность файлов БД ):
docker compose down -v

выполните резервное копирование файлов БД:

tar -czf aw-db-$(date "+%Y-%m-%d").tar.gz ../db/postgres

В результате выполнения команды будет создан архив с текущей датой в имени, например:

aw-db-2024-10-27.tar.gz
  1. запустите приложение:
docker compose up -d

Переместите архив в резервное хранилище.

SQL копирование БД AW (НЕ требует остановки сервиса)

Для резервного копирования БД Системы выполните следующие действия:

  1. выполните подключение к серверу приложения по SSH;
  2. перейдите в рабочую директорию приложения ( по умолчанию - /opt/aw/app ):
cd /opt/aw/app
  1. выполните резервное копирование БД:

docker compose exec db pg_dump -d workspace -U analytic -W | gzip - -c > ./aw-db-$(date "+%Y-%m-%d").sql.gz
Команда запросит пароль пользователя для подключения к БД.

В результате выполнения команды будет создан архив с текущей датой в имени, например:

aw-db-2024-10-27.sql.gz

Переместите архив в резервное хранилище.

Резервное копирование ClickHouse (без остановки сервера)

Резервное копирование ClickHouse выполняется с помощью утилиты clickhouse-backup.

  1. Выполните установку clikсhouse-backup на тот сервер на котором запущена БД ClickHouse
  2. Если порты cliсkhouse-server не экспортированы - настраиваем экспорт TCP порта, для этого:
    1. редактируем файл .env, задаем значение переменной:
      AW_CLICKHOUSE_TCP_PORT_EXPORTED=9000
      
    2. Перезапускаем clickhouse-server:
      cd /opt/aw/app
      docker compose up -d clickhouse-server
      
  3. Выполняем настройку clickhouse-backup, для чего:
  4. создаем файл /etc/clickhouse-backup/config.yml
  5. заполняем файл:
     general:
         # тип удаленного хранилища
         remote_storage: sftp
         max_file_size: 0
         backups_to_keep_local: 0
         backups_to_keep_remote: 0
         log_level: error
         allow_empty_backups: false
         download_concurrency: 16
         upload_concurrency: 4
         upload_max_bytes_per_second: 0
         download_max_bytes_per_second: 0
         object_disk_server_side_copy_concurrency: 32
         allow_object_disk_streaming: false
         use_resumable_state: true
         restore_schema_on_cluster: ""
         upload_by_part: true
         download_by_part: true
         restore_database_mapping: {}
         restore_table_mapping: {}
         retries_on_failure: 3
         retries_pause: 5s
         watch_interval: 1h
         full_interval: 24h
         watch_backup_name_template: shard{shard}-{type}-{time:20060102150405}
         sharded_operation_mode: ""
         cpu_nice_priority: 15
         io_nice_priority: idle
         rbac_backup_always: true
         rbac_conflict_resolution: recreate
         retriesduration: 5s
         watchduration: 1h0m0s
         fullduration: 24h0m0s
     clickhouse:
         username: <имя пользователя для подключения к clickhouse>
         password: <пароль пользователя для подключения к ClickHouse>
         host: localhost
         port: 9000
         disk_mapping:
           default: /opt/aw/db/clickhouse # путь к директории где ClickHouse хранит данные
         skip_tables:
             - system.*
             - INFORMATION_SCHEMA.*
             - information_schema.*
             - _temporary_and_external_tables.*
         skip_table_engines: []
         timeout: 30m
         freeze_by_part: false
         freeze_by_part_where: ""
         use_embedded_backup_restore: false
         embedded_backup_disk: ""
         backup_mutations: true
         restore_as_attach: false
         check_parts_columns: false
         secure: false
         skip_verify: false
         sync_replicated_tables: false
         log_sql_queries: true
         # директория с конфигурационным файлом ClickHouse
         config_dir: /opt/aw/app/docker/clickhouse/
         # команда для перезапуска clickhouse-server
         restart_command: exec:cd /opt/aw/app && docker compose restart clickhouse-server
         ignore_not_exists_error_during_freeze: true
         check_replicas_before_attach: true
         default_replica_path: /clickhouse/tables/{cluster}/{shard}/{database}/{table}
         default_replica_name: '{replica}'
         tls_key: ""
         tls_cert: ""
         tls_ca: ""
         max_connections: 16
         debug: false
     # настройка для хранилища рез. копий, в данном случае копии передаются
     # в хранилище по протоколу sftp
     sftp:
         address: <IP-адрес или имя сервера>
         port: <SSH-порт>
         username: <имя пользователя для подключения по SSH>
         password: <пароль пользователя для подключения по SSH>
         key: ""
         path: <путь куда складывать рез. копии>
         object_disk_path: ""
         compression_format: tar
         compression_level: 1
         concurrency: 48
         debug: false
    
  6. Выполняем резервное копирование Clickhouse:
    sudo clickhouse-backup create
    
  7. Проверяем что рез. копия создалась:
    clickhouse-backup list
    #
    
  8. Отправляем рез. копияю в хранилище:
    sudo clickhouse-backup upload <имя рез. копии>
    

Резервное копирование Minio (без остановки сервера)

Резервное копирование Minio выполняется с помощью утилиты rclone. Утилита rclone выполняет удаленное подключение к S3-подобному сервису и позволяет оперировать объектами, например:

  • копировать файлы и директории с локального диска на удаленное объектное хранилище,
  • копировать объекты с удаленного хранилища на локальную ФС,
  • выполнять синхронизацию между двумя удаленными объектными хранилищами.

Дополнительные сведения можно найти на сайте проекта rclone.

Настройка rclone

Сведения по настройке rclone приведены в руководстве Установка и настройка утилиты rclone

Настройка minio

Для того чтобы rclone смог выполнить подключение к сервису Minio из состава AW, необходимо чтобы Minio экспортировал порт на котором работает S3 протокол. Для того чтобы открыть нужный порт, необходимо отредактировать значение переменной MINIO_PORT_S3 (значение по умолчанию 8181 или 19000) в файле .env в директории установки AW. Если значение переменной было отредактировано то нужно перезапустить сервис minio командой:

docker compose up -d

Выполнение рез. копирования minio

Для того чтобы выполнить копирование файлов из удаленного объектного хранилища AW на локальный диск выполните команды (rclone должен быть уже настроен):

# создаем директорию
mkdir -p AWS3/$(date "+%Y-%m-%d")
for i in $(rclone lsf awMinio:); do rclone --size-only copy <имя конфига AW Minio для rclone>:${i} AWS3/$(date "+%Y-%m-%d")/${i}; done

Резервное копирование файловых источников и проч.

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

  1. выполните подключение к серверу приложения по SSH;
  2. перейдите в рабочую директорию приложения ( по умолчанию - /opt/aw/app ):
cd /opt/aw/app
  1. выполните резервное копирование файлов:
tar -czf file-storage-$(date "+%Y-%m-%d").tar.gz ../file_storage/api ../file_storage/jars ../file_storage/file_puller

В результате выполнения команды будет создан архив с текущей датой в имени, например:

file-storage-2023-10-27.tar.gz

Восстановление БД AW из резервной копии

Для восстановления БД Системы из резервной копии выполните следующие действия:

  1. выполните подключение к серверу приложения по SSH;
  2. перейдите в рабочую директорию приложения (по умолчанию - /opt/aw/app );
  3. остановите приложение ( это необходимо, чтобы обеспечить консистентность файлов БД ):
docker compose down -v
  1. удалите или переместите в другое место текущие файлы БД AW в случае необходимости:
rm -rf ../db/postgres
  1. скопируйте резервную копию файлов БД AW на сервер в директорию на уровень выше директории установки AW (по умолчанию - /opt/aw);
  2. разархивируйте файлы БД из резервной копии:
tar -xzf aw-db-2023-10-27.tar.gz
  1. Запустите AW:
docker compose up -d -- force-recreate