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

Установка Copywala VDB

Цель выполнения​

Установка модуля Copywala VDB является обязательной, если целевая СУБД — Vector DB / Qdrant.

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

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

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

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

к сведению

Установка Copywala VDB возможна только ручным способом из RPM-пакета.

  1. Установите пакет copywala-vdb-{component_version}-{OS_version}.x86_64.rpm из директории pbr/owned/pbra/rpms:

    sudo dnf install {component_name}-{component_version}-{OS_version}.x86_64.rpm

    Пример заполненной команды:

    sudo dnf install copywala-vdb-1.3.0-sberlinux9.x86_64.rpm
  2. Если взаимодействие с Vector DB требуется осуществлять по протоколу HTTPS/mTLS, выполните настройку TLS-сертификатов.

  3. Переключитесь на пользователя qdrant для работы с copywala-vdb:

    sudo su - qdrant
  4. Откройте файл конфигурации copywala-vdb.yaml:

    sudo vi /etc/pbr/copywala-vdb.yaml
  5. Заполните конфигурационные параметры.

    Параметры файла copywala-vdb.yaml

    # --------------------------------------
    # Настройка подключения к целевой БД
    # --------------------------------------
    vdb:
    http_address: "<https://host:port>"
    auth_enabled: <true/false>

    # Использование учетных данных в открытом виде
    username: "<username>"
    password: "<password>"

    # Использование учетных данных, сохраненных в защищенном виде
    use_enc_creds: <true/false>
    enc_creds_path: "</var/pbr/copywala/vdb.creds>"

    # Формирование резервной копии в режиме полного снимка (единый снепшот-файл, содержащий все коллекции базы данных)
    full_snapshot: <true/false>

    # Копирование снепшот-файлов напрямую из локальной файловой системы
    copy_local_snapshots: <true/false>
    local_snapshots_path: "</vdb/snapshots>"

    # по умолчанию применяется глобальный tls
    tls:
    rootca:
    local_path: "<tls/root.crt>" # путь к локальному файлу
    # vault_path: <path> # путь к секрету в HashiCorp/SecMan
    # vault_key: <key> # ключ внутри json-секрета
    cert:
    local_path: "<tls/cert.crt>" # путь к локальному файлу
    # vault_path: <path> # путь к секрету в HashiCorp/SecMan
    # vault_key: <key> # ключ внутри json-секрета
    key:
    local_path: "<tls/cert.key>" # путь к локальному файлу
    # vault_path: <path> # путь к секрету в HashiCorp/SecMan
    # vault_key: <key> # ключ внутри json-секрета

    # --------------------------------------
    # Назначение резервной копии
    # --------------------------------------
    # local-fs:///home/postgres/backups/
    # ddboost://srv-10-15.host/storage-unit
    # s3://srv-10-20.host/bucket-08-9992
    # s2://srv-10-25.host:port
    backup_destination_uri: "<local-fs:///vdb/backups/>"

    # --------------------------------------
    # Директория для восстановления данных
    # --------------------------------------
    restore_data_path: "</vdb/data/>"

    # --------------------------------------
    # Наименование экземпляра БД для восстановления (уникальное имя экземпляра агента)
    # --------------------------------------
    restore_instance_name: ""

    # --------------------------------------
    # Настройка повторных попыток при возникновении ошибок при записи РК (ниже приведены значения по умолчанию)
    # --------------------------------------
    retrier:
    timeout: 10s # максимальное время выполнения запроса
    retries: 5 # максимальное количество попыток
    delay_period: 1s # период задержки

    # --------------------------------------
    # Возможность загрузки TLS-сертификатов из защищенного хранилища секретов
    # --------------------------------------
    vault: # настройки подключения
    server: "<vault-url>"
    namespace: "<namespace>"
    path: "<mount-path>" # путь к точке монтирования хранилища секретов
    kv_version: "<v2>" # версия формата хранилища ключей-значений
    approle:
    role_id: "<role-id>" # уникальный идентификатор роли
    secret_id: "<secret-id>" # секретный ключ роли. Либо указывается явно, либо прописывается wrapping_secret_id_file_path
    # auth_method: approle # метод аутентификации
    # wrapping_secret_id_file_path: /var/pbr/cw.wrapped.secret.vlt # путь к файлу для хранения wrapping token
    # wrapping_secret_id_ttl: 8h # время жизни wrapping token (например, 10m - 10 минут, 6h - 6 часов)

    # --------------------------------------
    # Параметры подключения к KMS HashiCorp Vault
    # --------------------------------------
    kms:
    server: "<vault-url>" # URL сервера KMS
    namespace: "<namespace>" # пространство имен в KMS HashiCorp Vault
    path: "<mount-path>" # путь к точке монтирования хранилища секретов
    kv_version: v2 # версия формата KV-хранилища
    approle: # вариант авторизации в KMS по роли и ключу роли
    role_id: "<role-id>" # уникальный идентификатор роли
    secret_id: "<secret-id>" # секретный ключ роли. Либо указывается явно, либо прописывается wrapping_secret_id_file_path
    # auth_method: approle # метод аутентификации
    # wrapping_secret_id_file_path: /var/pbr/cw.wrapped.secret.vlt # путь к файлу для хранения wrapping token
    # wrapping_secret_id_ttl: 8h # время жизни wrapping token (например, 10m - 10 минут, 6h - 6 часов)
    userpass: # вариант авторизации в KMS по логину и паролю
    # username:
    # password:
    # auth_method:

    # --------------------------------------
    # Конфигурация S2
    # --------------------------------------
    s2:
    checksum_algorithm: DISABLED # выбор алгоритма вычисления контрольной суммы. Допустимые значения: DISABLED (по умолчанию), CRC32
    storage_path: "" # значение по умолчанию пустое. Задается пользователем для возможности выбора одного из дополнительных хранилищ, пример: /var/pbr/s2/backups
    tls: # опционально
    rootca:
    local_path: tls/root.crt # путь к локальному файлу
    # vault_path: <path> # путь к секрету в HashiCorp/SecMan
    # vault_key: <key> # ключ внутри json-секрета
    cert:
    local_path: tls/cert.crt # путь к локальному файлу
    # vault_path: <path> # путь к секрету в HashiCorp/SecMan
    # vault_key: <key> # ключ внутри json-секрета
    key:
    local_path: tls/cert.key # путь к локальному файлу
    # vault_path: <path> # путь к секрету в HashiCorp/SecMan
    # vault_key: <key> # ключ внутри json-секрета

    s2tp_enabled: true # флаг использования протокола S2TP для взаимодействия copywala и storage service (s2). По умолчанию – true. Используется только в рамках операций передачи данных при создании и восстановлении резервных копий. gRPC остается как основной протокол для взаимодействия с S2, кроме переноса данных
    s2tp:
    addresses: # массив адресов серверов s2
    - "<host_1:port_1>"
    - "<host_2:port_2>"
    enable_tls: true # флаг использования TLS-протокола
    max_connections: 16 # максимальное количество открытых соединений к серверу на один указанный адрес (в массиве addresses)
    read_timeout: 5m # таймаут для операции чтения
    write_timeout: 5m # таймаут для операции записи
    tls: # опционально
    rootca:
    local_path: tls/root.crt # путь к локальному файлу
    # vault_path: <path> # путь к секрету в HashiCorp/SecMan
    # vault_key: <key> # ключ внутри json-секрета
    cert:
    local_path: tls/cert.crt # путь к локальному файлу
    # vault_path: <path> # путь к секрету в HashiCorp/SecMan
    # vault_key: <key> # ключ внутри json-секрета
    key:
    local_path: tls/cert.key # путь к локальному файлу
    # vault_path: <path> # путь к секрету в HashiCorp/SecMan
    # vault_key: <key> # ключ внутри json-секрета

    # --------------------------------------
    # Конфигурация S3
    # --------------------------------------
    s3:
    region: "<ru-test>" # регион s3
    access_id: "<id>" # идентификатор пользователя
    secret_key: "<key>" # секретный ключ
    use_path_style: <true/false> # если параметр имеет значение true, задействуется формат полного URL с указанием пути (path-style addressing); если false – название бакета включается непосредственно в доменное имя.
    disable_request_checksums: <true/false> # проверка контрольных сумм запросов
    tls: # опционально
    rootca:
    local_path: "<tls/root.crt>" # путь к локальному файлу
    # vault_path: <path> # путь к секрету в HashiCorp/SecMan
    # vault_key: <key> # ключ внутри json-секрета
    cert:
    local_path: "<tls/cert.crt>" # путь к локальному файлу
    # vault_path: <path> # путь к секрету в HashiCorp/SecMan
    # vault_key: <key> # ключ внутри json-секрета
    key:
    local_path: "<tls/cert.key>" # путь к локальному файлу
    # vault_path: <path> # путь к секрету в HashiCorp/SecMan
    # vault_key: <key> # ключ внутри json-секрета

    # --------------------------------------
    # Конфигурация DDBoost (Data Domain Boost)
    # --------------------------------------
    ddboost:
    enc_creds_path: "<path-to-enc-creds-file>" # путь к зашифрованным учетным данным для подключения к хранилищу DDBoost (заполняется опционально). При заданном значении параметры username и password в секции storage игнорируются
    client_settings:
    ddboost_lib_path: libDDBoost.so # путь к динамической библиотеке DDBoost (по умолчанию — libDDBoost.so). Если не задана переменная LD_LIBRARY_PATH или в ней отсутствует нужный путь, укажите здесь полный путь к файлу
    read_client_side_decompress: false # флаг включения распаковки на стороне клиента. При значении false распаковка выполняется на стороне сервера. При значении true – на стороне клиента, что позволяет снизить нагрузку на сеть
    client_type: 0 # тип клиента, который подключается к DDBoost. Для copywala значение менять не требуется
    buffer_size: 0 # размер буфера ввода-вывода. 0 означает использование размер буфера по умолчанию
    auto_create_storage_unit: true # автоматически создавать отдельное хранилище (storage_unit) в системе Data Domain для резервных копий, если оно еще не создано
    storage:
    username: "<username>" # имя пользователя для подключения к хранилищу DDBoost. Игнорируется если в copywala.yaml задан параметр enc_creds_path
    password: "<password>" # пароль для подключения к хранилищу DDBoost. Игнорируется если в copywala.yaml задан параметр enc_creds_path
    max_conns_no: 16 # максимальное количество одновременных соединений с DDBoost; соединения переиспользуются из пула, если они не простаивали дольше max_idle_time, иначе при необходимости создается новое соединение, если не превышен лимит max_conns_no
    max_idle_time: 5m # допустимое время простоя соединения, после которого неактивное подключение закрывается и удаляется из пула соединений
    tls: # опционально
    rootca:
    local_path: tls/root.crt # путь к локальному файлу
    # vault_path: <path> # путь к секрету в HashiCorp/SecMan
    # vault_key: <key> # ключ внутри json-секрета
    cert:
    local_path: tls/cert.crt # путь к локальному файлу
    # vault_path: <path> # путь к секрету в HashiCorp/SecMan
    # vault_key: <key> # ключ внутри json-секрета
    key:
    local_path: tls/cert.key # путь к локальному файлу
    # vault_path: <path> # путь к секрету в HashiCorp/SecMan
    # vault_key: <key> # ключ внутри json-секрета

    # Дополнительные параметры настройки TLS для DDBoost. Подробное описание параметров и допустимых значений смотрите в официальной документации DDBoost
    use_tls: false # включает TLS. Обязательно установите true, если указан хоть один сертификат в секции ddboost.storage.tls или секции глобального TLS («Конфигурация TLS используемая по умолчанию для всех сетевых соединений»)
    auth_mode: 0 # режим TLS: 1 - односторонний, 2 - двусторонний, 3 - анонимный
    encr_strength: 0 # уровень TLS-шифрования: 1 - слабый, 2 - сильный
    cert_verify_flag: 0 # битовая комбинация флагов проверки TLS-сертификатов и FQDN клиента/сервера: 0 – отключить проверку сертификатов, 1 – проверять FQDN сервера, 2 – проверять FQDN клиента. Например, при значении 3 будет проверяться FQDN и сервера и клиента

    # --------------------------------------
    # Настройки архивирования РК (ниже приведены значения по умолчанию)
    # --------------------------------------
    archive_settings:
    upload_params:
    part_payload_size: 32MB # размер парта передаваемых данных
    checksum_algorithm: CRC32 # выбор алгоритма вычисления контрольной суммы. CRC32 – значение по умолчанию. Допустимые значения: DISABLED, CRC32, SHA256
    compression_algorithm: S2 # выбор алгоритма сжатия данных при создании РК. S2 – значение по умолчанию. Допустимые значения: DISABLED, ZSTD, S2

    # --------------------------------------
    # Политика исполнения резервного копирования (ниже приведены значения по умолчанию)
    # --------------------------------------
    backup_policy:
    write_parts_workers_no: 4 # количество параллельных рабочих процессов (workers), выполняющих операцию записи отдельных партов
    protection_key_path: # путь к ключу в KMS HashiCorp Vault, необходимому для защитного преобразования при создании резервной копии
    local_path: "<local-path>"
    # vault_path: <path>
    # vault_key: <key>

    # --------------------------------------
    # Политика восстановления (ниже приведены значения по умолчанию)
    # --------------------------------------
    restore_policy:
    workers_no: runtime.NumCPU()
    jobs_queue_size: 16 # размер очереди задач на распаковку партов архива

    verify_archive_checksums: true # проверка контрольных сумм всего архива
    read_direct_io: false # режим чтения данных из файлов, исключая использование кеша ОС

    protection_key_path: # путь к ключу в KMS HashiCorp Vault, необходимому для защитного преобразования при восстановлении из резервной копии
    local_path: "<local-path>"
    # vault_path: <path>
    # vault_key: <key>

    # --------------------------------------
    # Конфигурация TLS используемая по умолчанию для всех сетевых соединений
    # --------------------------------------
    tls:
    rootca:
    local_path: "<tls/root.crt>" # путь к локальному файлу
    # vault_path: <path> # путь к секрету в HashiCorp/SecMan
    # vault_key: <key> # ключ внутри json-секрета
    cert:
    local_path: "<tls/cert.crt>" # путь к локальному файлу
    # vault_path: <path> # путь к секрету в HashiCorp/SecMan
    # vault_key: <key> # ключ внутри json-секрета
    key:
    local_path: "<tls/cert.key>" # путь к локальному файлу
    # vault_path: <path> # путь к секрету в HashiCorp/SecMan
    # vault_key: <key> # ключ внутри json-секрета

    # --------------------------------------
    # Опциональные настройки приложения (ниже приведены значения по умолчанию)
    # --------------------------------------
    app:
    agent_id_file_path: /etc/pbr/pbr.agent.id # путь к файлу, содержащему идентификатор агентского приложения
    agent_id_file_mode: 0400 # числовое представление прав доступа на создаваемые файлы
    copywala_dir: /etc/pbr/copywala # рабочая директория
    copywala_dir_mode: 0700 # числовое представление прав доступа на создаваемые каталоги
    allow_concurrent_create_backup: false # управляет возможностью запуска нескольких операций создания резервных копий одновременно
    creds_private_key_path: /var/pbr/copywala/priv.key # путь к приватному ключу приложения
    copywala_plugins_dir: /usr/lib/pbr/copywala # путь к директории, где находится плагин защитного преобразования

    go_mem_limit: 2GB # мягкий лимит heap-памяти для сборщика мусора Go. При достижении лимита сборщик мусора начинает работать с большей частотой, чтобы удерживать потребление памяти в заданных пределах (в документации go – GOMEMLIMIT)
    # если параметр не указан в copywala.yaml, лимит памяти будет автоматически установлен в размере 1/4 от общего объема RAM, доступного в системе (например, при 32 ГБ оперативной памяти лимит составит 8 ГБ)
    # если задано значение 0 – будут использоваться настройки Go по умолчанию
    # при указании значения – будет установлен заданный лимит
    go_gc_percent: 100 # процент роста heap-памяти перед запуском сборки мусора. Значение 100 означает, что сборка мусора запускается после увеличения объёма heap в 2 раза относительно объема после предыдущей сборки (в документации go – GOGC)
    # более подробное описание параметров приведено в документации go https://go.dev/doc/gc-guide (см. GOMEMLIMIT и GOGC)

    # --------------------------------------
    # Настройка ведения журналов приложения (ниже приведены значения по умолчанию)
    # --------------------------------------
    log:
    path: /var/log/pbr/copywala.log # путь к лог-файлу
    dir_mode: 0700 # настройка прав доступа на создаваемые каталоги. Значения необходимо задавать в восьмеричной системе счисления с ведущим нулем.
    file_mode: 0600 # настройка прав доступа на создаваемые файлы. Значения необходимо задавать в восьмеричной системе счисления с ведущим нулем.
    max_size: 100 # максимальный размер лог-файла в мегабайтах. По умолчанию `100 МБ`
    max_age: 90 # максимальный срок хранения лог-файла в днях
    max_backups: 10 # максимальное количество резервных копий лог-файлов, которые будут храниться. Если выбрано 0, то количество файлов не ограничено
    use_local_time: true # параметр определяет, в каком формате будут записываться метки времени в имена файлов при ротации. Если выбрано true, используется локальное системное время, при false (и по умолчанию) – `UTC`.
    compress_backups: false # параметр определяет необходимость сжатия резервных копий лог-файлов. Если выбрано true, лог-файлы будут сжаты, если false, лог-файлы будут храниться без сжатия

Настройка TLS-сертификатов для Copywala VDB​

Для обеспечения взаимодействия с Vector DB по протоколу HTTPS/mTLS выполните описанные ниже шаги:

  1. Сгенерируйте корневой сертификат (далее – Root CA).

    примечание

    Данный шаг является опциональным, выполните его, если в инфраструктуре отсутствует готовый Root CA. В противном случае следует использовать уже существующий Root CA.

    Важно помнить, что при самостоятельной генерации Root CA, его необходимо использовать для подписи сертификата сервера (Vector DB).

    Пример команды:

    openssl req -subj "/CN=RootCA" -newkey rsa:2048 -nodes \
    -keyout rootCA.key \
    -new -x509 \
    -days 365 \
    -out rootCA.crt

    В результате будут получены:

    • rootCA.key — приватный ключ Root CA;
    • rootCA.crt — самоподписанный корневой сертификат.
  2. Создайте файл openssl.cnf, указав актуальные значения, включая SAN-параметры:

    [ req ]
    default_bits = 2048
    default_md = sha256
    prompt = no
    distinguished_name = req_distinguished_name
    req_extensions = req_ext

    [ req_distinguished_name ]
    C = RU
    ST = Moscow
    L = Moscow
    O = myCompany
    OU = IT Department
    CN = example.com

    [ req_ext ]
    subjectAltName = DNS:<dns_name>, DNS:localhost, IP:<ip>, IP:127.0.0.1

    Замените <dns_name> и <ip> на фактические значения, используемые в инфраструктуре.

  3. Сгенерируйте приватный ключ и CSR (пример команды):

    openssl genpkey -algorithm RSA -out copywala-vdb.key

    openssl req -new \
    -key copywala-vdb.key \
    -out copywala-vdb.csr \
    -config openssl.cnf
  4. Подпишите CSR с использованием Root CA (существующего или сгенерированного):

    openssl x509 -req \
    -in copywala-vdb.csr \
    -CA rootCA.crt \
    -CAkey rootCA.key \
    -CAcreateserial \
    -out copywala-vdb.crt \
    -days 365 \
    -extfile openssl.cnf \
    -extensions req_ext

    В результате будет создан сертификат для Copywala VDB – copywala-vdb.crt.

  5. Для проверки корректности сертификата используйте команду:

    openssl x509 -in copywala-vdb.crt -text -noout

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

    • Subject и Issuer;
    • срок действия;
    • расширения сертификата (включая SAN);
    • другие параметры X.509.
  6. После генерации и/или получения сертификатов настройте подключение к Vector DB. Для этого в конфигурационном файле copywala-vdb.yaml заполните секцию tls, указав пути к созданным TLS-артефактам.

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

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

к сведению

После завершения установки данного модуля:

  1. При необходимости выполните установку других модулей Platform V CopyWala.
  2. Перейдите к следующему шагу — Настройка интеграции Platform V CopyWala с внешними сервисами.