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

Установка Storage Service

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

Установка модуля Storage Service является опциональной. Выполните установку, если в качестве хранилища необходимо использовать s2 (Storage Service).

Предусловия

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

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

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

Выполните установку Storage Service одним из способов:

Установка из RPM-пакета

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

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

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

    sudo dnf install storage-service-1.1.0-sberlinux9.x86_64.rpm
  2. Откройте файл конфигурации storage-service.yaml:

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

    Пример заполненных параметров

    # --------------------------------------
    # Настройки для взаимодействия с API Gateway
    # --------------------------------------
    api_gateway:
    http_address: https://localhost:29000 # адрес для подключения Storage Service к сервисам инфраструктуры
    tls: # опционально
    rootca:
    local_path: tls/root.crt # путь к локальному файлу
    # vault_path: <path> # путь к секрету в HarhiCorp/SecMan
    # vault_key: <key> # ключ внутри json-секрета
    cert:
    local_path: tls/cert.crt
    # vault_path: <path> # путь к секрету в HarhiCorp/SecMan
    # vault_key: <key> # ключ внутри json-секрета
    key:
    local_path: tls/cert.key
    # vault_path: <path> # путь к секрету в HarhiCorp/SecMan
    # vault_key: <key> # ключ внутри json-секрета

    # --------------------------------------
    # Параметры подключения к HarhiCorp/SecMan
    # --------------------------------------
    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 часов)

    # --------------------------------------
    # Опциональные настройки приложения
    # --------------------------------------
    app:
    work_dir: /var/pbr/storage-service # рабочий каталог приложения для хранения временных файлов, журналов и т.д.
    work_dir_mode: 0700 # права доступа к рабочему каталогу. 0700 означает, что полный доступ к этому каталогу имеет только владелец файла.
    creds_private_key_path: /var/pbr/copywala/priv.key # путь к приватному ключу приложения

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

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

    zero_copy: true # флаг для использования методов zero-copy (нулевого копирования) записи данных

    # --------------------------------------
    # Пример политики слияния (значения по умолчанию)
    # --------------------------------------
    merge_policy:
    write_parts_workers_no: max(runtime.NumCPU()/2, 1) # определяет количество рабочих потоков, используемых для одновременной записи частей файла.
    read_parts_workers_no: max(runtime.NumCPU()/2, 1) # определяет количество потоков для параллельной обработки чтения частей файла.
    write_direct_io: false # если false, приложение будет использовать буферизованный ввод-вывод операционной системы при записи данных.
    read_direct_io: false # если false, приложение будет использовать буферизованный ввод-вывод операционной системы при чтении данных.

    # --------------------------------------
    # Конфигурация DDBoost (Data Domain Boost)
    # --------------------------------------
    ddboost:
    enc_creds_path: "<path-to-enc-creds-file>" # путь к зашифрованным учетным данным для подключения для подключения к хранилищам DDBoost (заполняется опционально). При заданном значении enc_creds_path параметры username и password в секции storages игнорируются
    client_settings:
    ddboost_lib_path: libDDBoost.so # путь к динамической библиотеке DDBoost (по умолчанию — libDDBoost.so). Если не задана переменная LD_LIBRARY_PATH или в ней отсутствует нужный путь, укажите здесь полный путь к файлу
    read_client_side_decompress: false # флаг включения распаковки на стороне клиента. При значении false распаковка выполняется на стороне сервера. При значении true – на стороне клиента, что позволяет снизить нагрузку на сеть
    client_type: 0 # тип клиента, который подключается к DDBoost. Для storage-service значение менять не требуется
    buffer_size: 0 # размер буфера ввода-вывода. 0 означает использование размер буфера по умолчанию
    auto_create_storage_unit: true # при запуске сервиса автоматически проверять наличие отдельных хранилищ в системе Data Domain, указанных в storage-service.yaml в параметрах storage_path и allowed_storage_paths. Если хранилища отсутствуют, они будут созданы автоматически
    storages: # секция со списком хранилищ (Data Domain) с их параметрами подключения
    - address: "<ip_address>" # IP-адрес хранилища
    username: "<username>" # имя пользователя для подключения к хранилищу DDBoost. Игнорируется если в storage-service.yaml задан параметр enc_creds_path
    password: "<password>" # пароль для подключения к хранилищу DDBoost. Игнорируется если в storage-service.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> # путь к секрету в HarhiCorp/SecMan
    # vault_key: <key> # ключ внутри json-секрета
    cert:
    local_path: tls/cert.crt
    # vault_path: <path> # путь к секрету в HarhiCorp/SecMan
    # vault_key: <key> # ключ внутри json-секрета
    key:
    local_path: tls/cert.key
    # vault_path: <path> # путь к секрету в HarhiCorp/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 и сервера и клиента

    # --------------------------------------
    # Параметры gRPC-сервера Storage Service
    # --------------------------------------
    grpc:
    address: 0.0.0.0:29509
    mtls: false # необходимость проверки сертификатов клиента
    tls: # опционально
    rootca:
    local_path: tls/root.crt # путь к локальному файлу
    # vault_path: <path> # путь к секрету в HarhiCorp/SecMan
    # vault_key: <key> # ключ внутри json-секрета
    cert:
    local_path: tls/cert.crt
    # vault_path: <path> # путь к секрету в HarhiCorp/SecMan
    # vault_key: <key> # ключ внутри json-секрета
    key:
    local_path: tls/cert.key
    # vault_path: <path> # путь к секрету в HarhiCorp/SecMan
    # vault_key: <key> # ключ внутри json-секрета

    # --------------------------------------
    # Параметры s2tp-сервера Storage Service
    # --------------------------------------
    s2tp:
    addresses: # массив для указания используемых адресов сетевых интерфейсов для работы серверов. Если массив не задан, используется значение параметра backup_destination_uri из файла copywala.yaml, к которому автоматически добавляются порты по умолчанию: 29500 и 29501
    - 0.0.0.0:29500
    - 0.0.0.0:29501
    # ...
    mtls: false # необходимость проверки сертификатов клиента
    tls: # опционально
    rootca:
    local_path: tls/root.crt # путь к локальному файлу
    # vault_path: <path> # путь к секрету в HarhiCorp/SecMan
    # vault_key: <key> # ключ внутри json-секрета
    cert:
    local_path: tls/cert.crt
    # vault_path: <path> # путь к секрету в HarhiCorp/SecMan
    # vault_key: <key> # ключ внутри json-секрета
    key:
    local_path: tls/cert.key
    # vault_path: <path> # путь к секрету в HarhiCorp/SecMan
    # vault_key: <key> # ключ внутри json-секрета
    max_connections: 256 # максимальное количество подключений для одного адреса, указанного выше
    read_timeout: 5m # тайм-аут для операции чтения
    write_timeout: 5m # тайм-аут для операции записи

    # --------------------------------------
    # Путь к основному хранилищу
    # --------------------------------------
    storage_path: /var/pbr/backups # если в файле copywala.yaml не настроен параметр storage_path, то резервные копии должны сохраняться по пути, указанному в данной конфигурации (storage_path - значение по умолчанию)
    # ddboost://1.2.3.4/storage-unit/sub/dir

    # --------------------------------------
    # Список дополнительных хранилищ, разрешенных для установки со стороны клиента
    # --------------------------------------
    allowed_storage_paths:
    - /mnt/nfs-001
    - /mnt/nfs-002
    - /mnt/nfs-003
    # Примеры значений allowed_storage_paths:
    # - /mnt/nfs/backups
    # - /mnt/ci/backups
    # - local-fs:///mnt/ff/backups
    # - ddboost://1.2.3.4/storage-unit/sub/dir

    is_allowed_storage_paths_only: true # включает проверку хранилища, полученного от copywala (задается в copywala.yaml параметром storage_path) на наличие списке разрешенных хранилищ (определяется параметром allowed_storage_paths):
    # true — запись выполняется только если storage_path входит в список разрешенных хранилищ
    # false — запись выполняется без проверки storage_path

    # --------------------------------------
    # Максимальное количество одновременных потоков на одного клиента
    # --------------------------------------
    max_concurrent_streams: 256

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

    # --------------------------------------
    # Конфигурация Prometheus (подробное описание атрибутов по умолчанию и обязательных атрибутов каждого поля см. в документации)
    # --------------------------------------
    prometheus:
    push_model:
    jobname:
    address:
    process_collector_opts:
    report_errors:
    pid:
    namespace:
    frequency:
    req_timeout:
    tls: # опционально
    rootca:
    local_path: tls/root.crt # путь к локальному файлу
    # vault_path: <path> # путь к секрету в HarhiCorp/SecMan
    # vault_key: <key> # ключ внутри json-секрета
    cert:
    local_path: tls/cert.crt
    # vault_path: <path> # путь к секрету в HarhiCorp/SecMan
    # vault_key: <key> # ключ внутри json-секрета
    key:
    local_path: tls/cert.key
    # vault_path: <path> # путь к секрету в HarhiCorp/SecMan
    # vault_key: <key> # ключ внутри json-секрета
    pull_model:
    endpoint: /metrics
    address:
    process_collector_opts:
    report_errors:
    pid:
    namespace:
    handler_opts:
    timeout:
    max_requests_in_flight:
    disable_compression:
    log_errors:

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

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

    примечание

    С подробной информацией о настройках конфигурации логов можно ознакомиться в разделе «Системный журнал».

  4. Запустите сервис storage-service.service:

    sudo systemctl start storage-service.service

Автоматизированная установка с помощью Ansible

Сценарий описан в разделе Автоматизированная установка (с помощью Ansible).

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

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