Установка Storage Service
Цель выполнения
Установка модуля Storage Service является опциональной. Выполните установку, если в качестве хранилища необходимо использовать s2 (Storage Service).
Предусловия
Перед началом установки убедитесь, что выполнены следующие условия:
- Подготовлено окружение.
- Дистрибутив CopyWala распакован в соответствии с инструкцией, приведенной в разделе Установка, шаг Распаковка дистрибутива CopyWala.
Последовательность действий
-
Установите пакет
storage-service-{component_version}-{OS_version}.x86_64.rpmиз директорииpbr/owned/pbss/rpms:- SberLinux, РЕД ОС, CentOS
- Astra Linux
- Альт СП
sudo dnf install {component_name}-{component_version}-{OS_version}.x86_64.rpmsudo apt install {component_name}-{component_version}-{OS_version}.x86_64.debsudo apt-get install {component_name}-{component_version}-{OS_version}.x86_64.rpmПример заполненной команды:
sudo dnf install storage-service-1.1.0-sberlinux9.x86_64.rpm -
Откройте файл конфигурации
storage-service.yaml:sudo vi /etc/pbr/storage-service.yaml -
Заполните конфигурационные параметры.
Пример заполненных параметров
# --------------------------------------# Настройки для взаимодействия с API Gateway# --------------------------------------api_gateway:http_address: https://localhost:29000 # адрес для подключения Storage Service к сервисам инфраструктуры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-секрета# --------------------------------------# Параметры подключения к HashiCorp/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_pathauth_method: approle # метод аутентификацииwrapping_secret_id_file_path: /var/pbr/cw.wrapped.secret.vlt # путь к файлу для хранения wrapping tokenwrapping_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)# при указании значения будет установлен соответствующий лимит памяти. По умолчанию используется значение 0, при котором применяются стандартные настройки Gogo_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_pathpassword: "<password>" # пароль для подключения к хранилищу DDBoost. Игнорируется если в storage-service.yaml задан параметр enc_creds_pathmax_conns_no: 16 # максимальное количество одновременных соединений с DDBoost; соединения переиспользуются из пула, если они не простаивали дольше max_idle_time, иначе при необходимости создается новое соединение, если не превышен лимит max_conns_nomax_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. Подробное описание параметров и допустимых значений смотрите в официальной документации DDBoostuse_tls: false # включает TLS. Обязательно установите true, если указан хоть один сертификат в секции ddboost.storages.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:29509mtls: 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-секрета# --------------------------------------# Параметры 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> # путь к секрету в 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-секретаmax_connections: 256 # максимальное количество подключений для одного адреса, указанного вышеread_timeout: 5m # тайм-аут для операции чтенияwrite_timeout: 5m # тайм-аут для операции записи# --------------------------------------# Путь к основному хранилищу# --------------------------------------storage_path: /var/pbr/backups # путь к хранилищу резервных копий, который используется по умолчанию, если не задан путь в `copywala.yaml` в параметрах `storage_path` или `backup_destination_uri`# 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/diris_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> # путь к секрету в 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-секрета# --------------------------------------# Конфигурация 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> # путь к секрету в 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-секретаpull_model:endpoint: /metricsaddress: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> # путь к секрету в 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-секрета# --------------------------------------# Настройка ведения журналов приложения# --------------------------------------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 (и по умолчанию) – `UTC`.compress_backups: false # параметр определяет необходимость сжатия резервных копий лог-файлов. Если выбрано true, лог-файлы будут сжаты, если false, лог-файлы будут храниться без сжатияпримечаниеС подробной информацией о настройках конфигурации логов можно ознакомиться в разделе «Системный журнал».
-
Запустите сервис
storage-service.service:sudo systemctl start storage-service.service
Настройка TLS-сертификатов для Storage Service
Ниже приведены шаги настройки TLS-сертификатов для Copywala VDB. Настройка сертификатов для текущего компонента выполняется аналогичным образом.
Для обеспечения взаимодействия с Vector DB по протоколу HTTPS/mTLS выполните описанные ниже шаги:
-
Сгенерируйте корневой сертификат (далее – 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— самоподписанный корневой сертификат.
-
Создайте файл
openssl.cnf, указав актуальные значения, включая SAN-параметры:[ req ]default_bits = 2048default_md = sha256prompt = nodistinguished_name = req_distinguished_namereq_extensions = req_ext[ req_distinguished_name ]C = RUST = MoscowL = MoscowO = myCompanyOU = IT DepartmentCN = example.com[ req_ext ]subjectAltName = DNS:<dns_name>, DNS:localhost, IP:<ip>, IP:127.0.0.1Замените
<dns_name>и<ip>на фактические значения, используемые в инфраструктуре. -
Сгенерируйте приватный ключ и CSR (пример команды):
openssl genpkey -algorithm RSA -out copywala-vdb.keyopenssl req -new \-key copywala-vdb.key \-out copywala-vdb.csr \-config openssl.cnf -
Подпишите 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. -
Для проверки корректности сертификата используйте команду:
openssl x509 -in copywala-vdb.crt -text -nooutВ результате выполнения команды отображается:
- Subject и Issuer;
- срок действия;
- расширения сертификата (включая SAN);
- другие параметры X.509.
-
После генерации и/или получения сертификатов настройте подключение к Vector DB. Для этого в конфигурационном файле
copywala-vdb.yamlзаполните секциюtls, указав пути к созданным TLS-артефактам.
Проверка результата
Для проверки установки и работоспособности компонентов CopyWala обратитесь к разделу Чек-лист проверки корректности работы.
После завершения установки данного модуля:
- При необходимости выполните установку других модулей Platform V CopyWala.
- Перейдите к следующему шагу — Настройка интеграции Platform V CopyWala с внешними сервисами.