Перейти к основному содержимому

Автоматизированная установка компонента DBBR

примечание

Компонент DBBR включает следующие модули:

Модуль

Описание

API-gateway

Выступает в роли граничного прокси-сервера и предоставляет единую точку входа для остальных сервисов продукта. Включает конфигурацию и набор фильтров Envoy (или Nginx, или Platform V SynGX), которые в совокупности определяют его функциональность

Agent Manager

Управляет агентскими приложениями резервного копирования и их токенами доступа к инфраструктуре

Storage Manager

Отвечает за регистрацию и перерегистрацию хранилищ, их удаление, а также управление токенами доступа к инфраструктуре и метаданными резервных копий, хранящихся в этих хранилищах

Task Manager

Предоставляет сервис управления задачами резервного копирования, их планирования и мониторинга

Recovery Manager

Предоставляет интерфейс командной строки для взаимодействия пользователя с системой

Настоящая инструкция предназначена для автоматизированной установки компонента целиком. Если требуется установить только определенный модуль – воспользуйтесь инструкцией на этот модуль (перейдите по ссылке в таблице выше).

Предусловия​

Перед началом установки убедитесь, что выполнены следующие условия:

  1. Подготовлено окружение.
  2. Дистрибутив CopyWala распакован в соответствии с инструкцией, приведенной в разделе Установка, шаг Распаковка дистрибутива CopyWala.

Последовательность действий​

Выполните шаги в следующем порядке:

  1. Подготовка среды Ansible.
  2. Установка Ansible-коллекций.
  3. Генерация TLS-сертификатов.
  4. Подготовка inventory-файла и переменных ролей.
  5. Запуск установки.

Подготовка среды Ansible​

Рекомендуется запускать установку модулей компонента DBBR в виртуальной среде Python.

к сведению

Данный шаг выполняется на управляющем узле Ansible (control node) — машине, с которой запускаются Ansible-плейбуки.

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

  1. Создайте виртуальное окружение. Рекомендуется использовать Python 3.9:

    python3 -m venv .pbr
  2. Активируйте виртуальное окружение:

    source .pbr/bin/activate
  3. Установите необходимые пакеты:

    python3.9 -m pip install 'ansible==8.7.0'
  4. Проверьте, что установка Ansible прошла успешно: ansible --version. В результате вывод не должен содержать ошибок. Команда pip list должна вывести зависимости:

    ansible 8.7.0
    ansible-core 2.15.13
к сведению

После завершения установки компонентов виртуальную среду можно отключить. Выполните консольную команду: deactivate.

Установка Ansible-коллекций​

к сведению

Данный шаг выполняется на управляющем узле Ansible (control node) — машине, с которой запускаются Ansible-плейбуки.

Установите или обновите Ansible-коллекции с помощью ansible-galaxy. Необходимые зависимости:

Название Ansible-коллекции

Версия

Установка

sbt-pbr (поставляется в составе дистрибутива продукта CopyWala)

1.0.0

Перейдите в директорию с распакованным дистрибутивом любого компонента CopyWala и запустите команду:

ansible-galaxy collection install package/scripts/Ansible/collections/sbt-pbr-1.0.0.tar.gz

Community.Postgresql (устанавливается из внешнего репозитория Ansible Galaxy)

3.9.1

ansible-galaxy collection install community.postgresql:3.9.1

Community.Library_Inventory_Filtering_V1 (устанавливается из внешнего репозитория Ansible Galaxy)

1.0.2

ansible-galaxy collection install community.library_inventory_filtering_v1:1.0.2

Генерация TLS-сертификатов​

Сгенерируйте TLS-сертификаты, необходимые для работы модулей компонента DBBR с шифрованием.

Для генерации используйте Ansible-роль certs. Работа с ролью описана в дополнительной документации для автоматизированного варианта установки (с помощью Ansible) в разделе Генерация сертификатов с помощью Ansible-роли certs.

Подготовка inventory-файла и переменных ролей​

  1. Перейдите в директорию со скриптами установки. Например, если дистрибутив был распакован в /path_to_dir/distrib/:

    cd /path_to_dir/distrib/pbr/owned/dbbr/package/scripts/Ansible
  2. Создайте inventory-файл на основе inventory_example.yml и укажите IP-адреса узлов для соответствующих модулей:

    • Секция dbbr.hosts — хосты для установки модулей: api_gateway, agent_manager, storage_manager и task_manager.
    • Секция recovery.hosts — хосты для установки модуля recovery_manager.

    Пример inventory-файла:

    Пример inventory-файла

    dbbr:
    hosts:
    dbbr_api:
    ansible_host: "<dbbr_ip_address>"

    recovery:
    hosts:
    recovery-host:
    ansible_host: "<recovery_manager_ip_address>"

    Подсказка

    Если модули необходимо установить на несколько хостов, добавьте дополнительные секции в inventory-файл по примеру ниже:

    Пример inventory-файла

    dbbr:
    hosts:
    dbbr_api1:
    ansible_host: "<dbbr_ip_address_1>"

    dbbr_api2:
    ansible_host: "<dbbr_ip_address_2>"

    # КОД ПРОПУЩЕН: секции с IP-адресами остальных хостов

    recovery:
    hosts:
    recovery-host1:
    ansible_host: "<recovery_manager_ip_address_3>"

    recovery-host2:
    ansible_host: "<recovery_manager_ip_address_4>"

    # КОД ПРОПУЩЕН: секции с IP-адресами остальных хостов

  3. Задайте переменные следующих ролей, используемых для установки и настройки модулей компонента DBBR:

    • api_gateway
    • agent_manager
    • storage_manager
    • task_manager
    • recovery_manager
    к сведению

    Каждая роль отвечает за установку и настройку соответствующего модуля компонента DBBR. Для установки используются RPM-пакеты, пути к которым задаются в переменных ролей с суффиксом *_package_path, где * — префикс, соответствующий имени модуля.

    При выполнении роли RPM-пакет копируется на целевой узел, после чего устанавливается.

    Путь к RPM-пакету можно указать вручную или определить автоматически с помощью роли common.

    Задайте все обязательные переменные (для которых в столбце «Обязательность заполнения» указано Да). При необходимости задайте значения необязательных переменных.

    примечание
    • Если переменная не задана явно в плейбуке, для нее используется значение по умолчанию, определенное в файле defaults/main.yml роли.

    • Из необязательных переменных рекомендуется заполнять секцию *_tls, где * — это префикс с именем модуля. Например, для Storage Manager секция будет выглядеть так:

      storage_manager_tls:
      rootca:
      local_path: /path/to/certs/certificates/rootCA.crt
      cert:
      local_path: /path/to/certs/certificates/storage-manager.crt
      key:
      local_path: /path/to/certs/certificates/storage-manager.key
Переменные Ansible-роли api_gateway

Название переменной

Описание

Значение по умолчанию

Обязательность заполнения

api_gateway_rpm_path

Путь к RPM-файлу установщика Syngx

''

Да или использовать роль common. При использовании роли common задавать эту переменную не требуется

api_gateway_server_name

Адрес, на который направляются запросы для последующей обработки Syngx

localhost

Нет

api_gateway_config_dir

Директория для конфигурационного файла

/opt/syngx/conf

Нет

api_gateway_port

Порт, на котором Syngx будет принимать входящие запросы

29000

Нет

api_gateway_admin_port

Порт, на котором будет доступна служебная информация

29001

Нет

api_gateway_agent_manager_ip

IP-адрес, на котором доступен Agent Manager

10.0.0.1

Нет

api_gateway_agent_manager_port

Порт, на котором доступен API Agent Manager

29010

Нет

api_gateway_agent_manager_ws_port

Порт, на котором доступен WebSocket Agent Manager

29015

Нет

api_gateway_agent_manager_tls

Использование tls-шифрования для подключения к Agent Manager

false

Нет

api_gateway_agent_manager_mtls

Использование взаимной аутентификации с помощью сертификатов для подключения к Agent Manager

false

Нет

api_gateway_storage_manager_ip

IP-адрес, на котором доступен Storage Manager

10.0.0.5

Нет

api_gateway_storage_manager_port

Порт, на котором доступен Storage Manager

29030

Нет

api_gateway_storage_manager_tls

Использование tls-шифрования для подключения к Storage Manager

false

Нет

api_gateway_storage_manager_mtls

Использование взаимной аутентификации с помощью сертификатов для подключения к Storage Manager

false

Нет

api_gateway_task_manager_ip

IP-адрес, на котором доступен Task Manager

10.0.0.3

Нет

api_gateway_task_manager_port

Порт, на котором доступен Task Manager

29020

Нет

api_gateway_task_manager_tls

Использование tls-шифрования для подключения к Task Manager

false

Нет

api_gateway_task_manager_mtls

Использование взаимной аутентификации с помощью сертификатов для подключения к Task Manager

false

Нет

api_gateway_upstream_rootca

Путь к сертификату, с помощью которого производится проверка валидности сертификатов у компонентов Copywala при перенаправлении запросов

''

Нет

api_gateway_downstream_rootca

Путь к сертификату, с помощью которого производится проверка валидности сертификатов у клиентских машин при перенаправлении запросов

''

Нет

api_gateway_tls

Словарь, указывающий пути к сертификатам Syngx. Содержит следующие ключи:<br />cert_file – путь к сертификату;<br />key_file – путь к ключу сертификата

{}

Нет

::::

Переменные Ansible-роли agent_manager

Название переменной

Описание

Значение по умолчанию

Обязательность заполнения

agent_manager_package_path

Путь к RPM-файлу установщика компонента Agent Manager. Используется, когда требуется установка из отдельного файла, не идущего в архиве с продуктом, например для тестирования

''

Да или использовать роль common. При использовании роли common задавать эту переменную не требуется

agent_manager_api_server

Словарь, описывающий настройку веб-сервера API Agent Manager. Содержит следующие ключи:<br />address – адрес и порт, которые Agent Manager использует для входящих запросов;<br />mtls – использование взаимной аутентификации

{}

Да

agent_manager_websocket

Словарь, описывающий настройку WebSocket Agent Manager. Содержит следующие ключи:<br />address – адрес и порт, которые Agent Manager использует для входящих запросов;<br />mtls – использование взаимной аутентификации

{}

Да

agent_manager_openid

Словарь, описывающий параметры подключения к OpenID провайдеру. Содержит ключ: realm_url – адрес OpenID

{}

Да

agent_manager_auth

Словарь, описывающий настройки выпуска токенов доступа для агентских приложений. Если в словаре отсутствуют параметры public_key и private_key, то ключи будут сгенерированы. Если в словаре присутствуют параметры public_key[local_path] и private_key[local_path], то эти ключи будут скопированы на целевой узел. Параметры public_key[local_path] и private_key[local_path] должны ссылаться на ключи, которые лежат на Ansible-узле

{}

Да

agent_manager_log

Словарь, описывающий параметры логирования. Содержит следующие ключи:<br />path – путь к файлу, в который будут записывать логи;<br />max_size – максимальный размер логов в мегабайтах;<br />max_age – длительность хранения логов в дня;<br />max_backups – максимальное число файлов с логами;<br />use_local_time – использование местного времени;<br />compress_backups – сжатие файлов с логами с помощью gzip

{}

Да

agent_manager_db

Словарь, описывающий параметры служебной БД. На основе этих параметров будет создан пользователь (владелец БД) и сама БД. Содержит следующие ключи:<br />host – адрес кластера базы данных;<br />port – порт кластера базы данных;<br />user – пользователь служебной базы данных;<br />password – пароль служебной базы данных;<br />database – название служебной базы данных;<br />query_params – схема базы данных

{}

Да

agent_manager_task_manager

Словарь, описывающий параметры подключения к Task Manager. Содержит следующий ключ:<br />http_address – HTTPS-адрес Task Manager

{}

Да

agent_manager_admin_db_user

Администратор баз данных для создания служебной базы данных

Не задано

Да

agent_manager_admin_db_password

Пароль администратора баз данных для создания служебной базы данных

Не задано

Да

agent_manager_user

Пользователь для запуска службы Agent Manager

pbr

Нет

agent_manager_config_dir

Директория с конфигурационным файлом компонента Agent Manager

/etc/pbr

Нет

agent_manager_config_file

Имя конфигурационного файла компонента Agent Manager

agent-manager.yaml

Нет

agent_manager_bootstrap_db

Создание служебной базы данных (далее БД). Параметры БД (название, владелец) необходимо взять из переменной agent_manager_db

true

Нет

agent_manager_vault

Словарь, описывающий параметры подключения к HashiCorp/SecMan. Содержит следующие ключи:<br />server – адрес HashiCorp/SecMan;<br />approle – данные для авторизации в HashiCorp/SecMan

{}

Нет

agent_manager_tls

Словарь, описывающий глобальные параметры TLS. Содержит следующие ключи:<br />rootca – путь к сертификату удостоверяющего центра;<br />cert – путь к сертификату Agent Manager;<br />key – путь к ключу Agent Manager

{}

Нет

Переменные Ansible-роли task_manager

Название переменной

Описание

Значение по умолчанию

Обязательность заполнения

task_manager_package_path

Путь к RPM-файлу установщика компонента Task Manager. Используется, когда требуется установка из отдельного файла, не идущего в архиве с продуктом, например для тестирования

''

Да или использовать роль common. При использовании роли common задавать эту переменную не требуется

task_manager_db

Словарь, описывающий параметры служебной БД. На основе этих параметров будет создан пользователь (владелец БД) и сама БД. Содержит следующие ключи:<br />host – адрес кластера базы данных;<br />port – порт кластера базы данных;<br />user – пользователь служебной базы данных;<br />password – пароль служебной базы данных;<br />database – название служебной базы данных;<br />query_params – схема базы данных

{}

Да

task_manager_auth

Словарь, описывающий настройки выпуска токенов доступа для агентских приложений. Если в словаре отсутствуют параметры public_key и private_key, то ключи будут сгенерированы. Если в словаре присутствуют параметры public_key[local_path] и private_key[local_path], то эти ключи будут скопированы на целевой узел. Параметры public_key[local_path] и private_key[local_path] должны ссылаться на ключи, которые лежат на Ansible-узле

{}

Да

task_manager_log

Словарь, описывающий параметры логирования. Содержит следующие ключи:<br />path – путь к файлу, в который будут записывать логи;<br />max_size – максимальный размер логов в мегабайтах;<br />max_age – длительность хранения логов в дня;<br />max_backups – максимальное число файлов с логами;<br />use_local_time – использование местного времени;<br />compress_backups – сжатие файлов с логами с помощью gzip

{}

Да

task_manager_api_server

Словарь, описывающий настройку веб-сервера API Task Manager. Содержит ключ: address – адрес и порт, которые Task Manager использует для входящих запросов

{}

Да

task_manager_agent_manager

Словарь, описывающий настройку Agent Manager. Содержит ключ: http_address – адрес и порт, по которым доступен Agent Manager

{}

Да

task_manager_open_id

Словарь, описывающий параметры подключения к OpenID провайдеру. Содержит ключ: realm_url – адрес OpenID

{}

Да

task_manager_admin_db_user

Администратор баз данных для создания служебной базы данных

Не задано

Да

task_manager_admin_db_password

Пароль администратора баз данных для создания служебной базы данных

Не задано

Да

task_manager_user

Пользователь для запуска службы Task Manager

pbr

Нет

task_manager_config_dir

Директория с конфигурационным файлом компонента Task Manager

/etc/pbr

Нет

task_manager_config_file

Имя конфигурационного файла компонента Task Manager

task-manager.yaml

Нет

task_manager_tls

Словарь, описывающий параметры TLS для Task Manager. Содержит следующие ключи:<br />rootca – путь к сертификату удостоверяющего центра;<br />cert – путь к сертификату Task Manager;<br />key – путь к ключу Task Manager

{}

Нет

task_manager_bootstrap_db

Создание служебной базы данных (далее БД)

true

Нет

task_manager_vault

Словарь, описывающий параметры подключения к HashiCorp/SecMan. Содержит следующие ключи:<br />server – адрес HashiCorp/SecMan;<br />approle – данные для авторизации в HashiCorp/SecMan

{}

Нет

Переменные Ansible-роли storage_manager

Название переменной

Описание

Значение по умолчанию

Обязательность заполнения

storage_manager_package_path

Путь к RPM-файлу установщика компонента storage-manager. Используется, когда требуется установка из отдельного файла, не идущего в архиве с продуктом, например для тестирования

''

Да или использовать роль common. При использовании роли common задавать эту переменную не требуется

storage_manager_db

Словарь, описывающий параметры служебной БД. На основе этих параметров будет создан пользователь (владелец БД) и сама БД. Содержит следующие ключи:<br />host – адрес кластера базы данных;<br />port – порт кластера базы данных;<br />user – пользователь служебной базы данных;<br />password – пароль служебной базы данных;<br />database – название служебной базы данных;<br />query_params – схема базы данных

{}

Да

storage_manager_auth

Словарь, описывающий настройки выпуска токенов доступа для агентских приложений. Если в словаре отсутствуют параметры public_key и private_key, то ключи будут сгенерированы. Если в словаре присутствуют параметры public_key[local_path] и private_key[local_path], то эти ключи будут скопированы на целевой узел. Параметры public_key[local_path] и private_key[local_path] должны ссылаться на ключи, которые лежат на Ansible-узле

{}

Да

storage_manager_openid

Словарь, описывающий параметры подключения к OpenID провайдеру. Содержит ключ: realm_url – адрес OpenID

{}

Да

storage_manager_tls

Словарь, описывающий глобальные параметры TLS. Содержит следующие ключи:<br />rootca – путь к сертификату удостоверяющего центра;<br />cert – путь к сертификату storage-manager;<br />key – путь к ключу storage-manager

{}

Да

storage_manager_log

Словарь, описывающий параметры логирования. Содержит следующие ключи:<br />path – путь к файлу, в который будут записывать логи;<br />max_size – максимальный размер логов в мегабайтах;<br />max_age – длительность хранения логов в дня;<br />max_backups – максимальное число файлов с логами;<br />use_local_time – использование местного времени;<br />compress_backups – сжатие файлов с логами с помощью gzip

{}

Да

storage_manager_api_server

Словарь, описывающий настройку веб-сервера API storage-manager. Содержит следующие ключи:<br />address – адрес и порт, которые storage-manager использует для входящих запросов;<br />mtls – использование взаимной аутентификации

{}

Да

storage_manager_admin_db_user

Администратор баз данных для создания служебной базы данных

Не задано

Да

storage_manager_admin_db_password

Пароль администратора баз данных для создания служебной базы данных

Не задано

Да

storage_manager_vault

Словарь, описывающий параметры подключения к HashiCorp/SecMan. Содержит следующие ключи:<br />server – адрес HashiCorp/SecMan;<br />approle – данные для авторизации в HashiCorp/SecMan

{}

Нет

storage_manager_user

Пользователь для запуска службы storage-manager

pbr

Нет

storage_manager_config_dir

Директория с конфигурационным файлом компонента storage-manager

/etc/pbr

Нет

storage_manager_config_file

Имя конфигурационного файла компонента storage-manager

storage-manager.yaml

Нет

storage_manager_bootstrap_db

Создание служебной базы данных (далее БД)

true

Нет

Переменные Ansible-роли recovery_manager

Название переменной

Описание

Значение по умолчанию

Обязательность заполнения

recovery_manager_package_path

Путь к RPM-файлу установщика Recovery Manager

""

Да или использовать роль common. При использовании роли common задавать эту переменную не требуется

recovery_manager_user

Пользователь, который будет работать с Recovery Manager

{{ lookup('env', 'USER') }}

Нет

recovery_manager_config_dir

Директория для размещения файлов Recovery Manager

/home/{{ recovery_manager_user }}/.pbr

Нет

recovery_manager_open_id_rootca

Путь к CA сертификату OpenID провайдера на Ansible-узле

""

Нет

recovery_manager_ag_rootca

Путь к CA сертификату API Gateway на Ansible-узле

""

Нет

:::::

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

Пример заполнения

dbbr:
hosts:
dbbr_api:
ansible_host: "<dbbr_ip_address>"
# Переменные роли agent_manager
agent_manager_admin_db_user: postgres
agent_manager_admin_db_password: "<password>"
agent_manager_api_server:
address: 0.0.0.0:29010
mtls: true
agent_manager_websocket:
address: 0.0.0.0:29015
mtls: true
agent_manager_openid:
realm_url: "http://<realm_url>"
agent_manager_auth:
access_token_life_time: 15m
refresh_token_life_time: 72h
registration_token_life_time: 24h
agent_manager_log:
path: /path/to/log/agent-manager.log
agent_manager_task_manager:
http_address: "http://<dbbr_ip>:29020"
agent_manager_db:
host: 127.0.0.1
user: "<pbr_agent_manager>"
password: "<password>"
port: 5433
database: pbr_agent_manager
query_params: search_path=public

# КОД ПРОПУЩЕН: другие переменные роли agent_manager

# Переменные роли task_manager
task_manager_admin_db_user: postgres
task_manager_admin_db_password: "<password>"
task_manager_api_server:
address: 0.0.0.0:29020
task_manager_db:
host: <dbbr_ip>
user: "<pbr_task_manager>"
password: "<password>"
port: 5433
database: pbr_task_manager
query_params: search_path=public
task_manager_agent_manager:
http_address: https://<dbbr_ip>:29000
task_manager_open_id:
realm_url: http://realm-url
task_manager_auth:
access_token_life_time: 15m
refresh_token_life_time: 72h
registration_token_life_time: 24h
task_manager_log:
path: /path/to/log/task-manager.log

# КОД ПРОПУЩЕН: другие переменные роли task_manager

# Переменные роли storage_manager
storage_manager_admin_db_user: postgres
storage_manager_admin_db_password: "<password>"
storage_manager_api_server:
address: 0.0.0.0:29500
mtls: false
storage_manager_log:
path: /path/to/log/storage-service.log
max_size: 10
max_age: 14
max_backups: 14
use_local_time: true
compress_backups: false
storage_manager_db:
host: 127.0.0.1
user: "<pbr_storage_manager>"
password: "<password>"
port: 5433
database: pbr_storage_manager
query_params: search_path=public
storage_manager_auth:
access_token_life_time: 15m
refresh_token_life_time: 72h
registration_token_life_time: 24h
storage_manager_openid:
realm_url: http://realm-url

# КОД ПРОПУЩЕН: другие переменные роли storage_manager

# КОД ПРОПУЩЕН: Переменные других ролей: api_gateway, recovery_manager

Запуск установки​

примечание

Перед запуском убедитесь, что виртуальное окружение .pbr активировано.

Для установки компонента DBBR выполните команды:

  • Если переменные заданы в inventory-файле или в разделе vars плейбука install.yml:

    cd pbr/owned/dbbr/package/scripts/Ansible
    ansible-playbook -i inventory.yml install.yml
  • Если переменные вынесены в отдельный файл group_vars/dbbr.yml, запустите плейбук из директории, в которой находятся inventory.yml и папка group_vars:

    cd pbr/owned/dbbr/package/scripts/Ansible
    ansible-playbook -i inventory.yml install.yml
  • Если часть переменных не задана ни в одном из файлов, их можно передать через командную строку с помощью флага -e, например:

    ansible-playbook -i pbr/owned/dbbr/package/scripts/Ansible/inventory.yml -e common_rpm_dir_path=/home/ansible-user -e agent_manager_admin_db_user='postgres' -u <имя_пользователя> pbr/owned/dbbr/package/scripts/Ansible/install.yml

Проверка результата​

Для проверки установки и работоспособности модулей компонента DBBR обратитесь к разделу Чек-лист проверки корректности работы.