Подготовка окружения к установке
В данной статье описаны основные рекомендованные действия по подготовке инфраструктуры для установки Закрома.Хранение.
1. Отключение SELinux
Убедитесь, что для Red Hat-Based дистрибутивов SELinux отключён или переведён в режим Permissive.
2. Проверка и настройка DNS
Убедитесь, что DNS-имена разрешаются с Ansible-контроллера и со всех целевых узлов. Если вместо DNS используется /etc/hosts, одинаковые записи должны присутствовать на всех узлах.
Для S3 API с версии 2.9 используется единая схема адресации <workspace>.<FQDN>. Рабочая область global создаётся по умолчанию и доступна по адресу global.<FQDN>.
Значение zakroma_storage_base_domain должно соответствовать выбранному сценарию:
| Сценарий | zakroma_storage_base_domain |
|---|---|
| Базовый кластер или Single Node | zakroma.internal |
| Первый кластер мультикластера | cluster-1.zakroma.internal |
| Второй кластер мультикластера | cluster-2.zakroma.internal |
Несколько базовых доменовПараметр
zakroma_storage_base_domainможет содержать несколько базовых доменов, перечисленных через запятую:1zakroma_storage_base_domain: "zakroma.internal,s3.company.internal"Указывайте доменные имена без схемы
http://илиhttps://, порта и пути. Для каждого домена подготовьте DNS-записи и TLS-сертификаты.
В инструкции используется пример домена zakroma.internal. Замените его на доменную зону своей инфраструктуры.
В таблицах указаны порты сервисов без использования балансировщиков, или с использованием балансировщиков, работающих в режиме TCP. При публикации через Nginx или балансировщик внешний порт обычно равен 443 и должен соответствовать фактической конфигурации. Сценарий Quick Start отдельно переопределяет порты S3 API и Admin UI на 6443 и 8444.
Базовый кластер и Single Node
| DNS-имя | Тип записи | Целевые узлы | Порт по умолчанию | Обязательность |
|---|---|---|---|---|
*.zakroma.internal | A | Zakroma-Storage или балансировщик | 80 — S3 API | Обязательно для wildcard-схемы |
global.zakroma.internal | A | Zakroma-Storage или балансировщик | 80 — S3 API | Отдельная запись нужна, только если wildcard недоступен |
zakroma-admin.zakroma.internal | A | Zakroma-Storage или балансировщик | 8080 — Admin UI и Admin API | Обязательно |
postgresql.zakroma.internal | A | PostgreSQL | 5432 | Обязательно |
keycloak.zakroma.internal | A | Keycloak | 8443 | Опционально |
kafka.zakroma.internal | A | Kafka | 9092 | Опционально |
kafka-ui.zakroma.internal | A | Kafka UI или его Nginx | 7070 | Опционально |
Мультикластер
Для каждого кластера создайте собственную доменную зону:
| DNS-имя | Тип записи | Целевые узлы | Порт по умолчанию | Обязательность |
|---|---|---|---|---|
*.cluster-1.zakroma.internal | A | Zakroma-Storage первого кластера или балансировщик | 80 — S3 API | Обязательно для wildcard-схемы |
global.cluster-1.zakroma.internal | A | Zakroma-Storage первого кластера или балансировщик | 80 — S3 API | Отдельная запись нужна, только если wildcard недоступен |
zakroma-admin.cluster-1.zakroma.internal | A | Zakroma-Storage первого кластера или балансировщик | 8080 — Admin UI и Admin API | Обязательно |
postgresql.cluster-1.zakroma.internal | A | PostgreSQL первого кластера | 5432 | Обязательно |
zakroma-cdn.cluster-1.zakroma.internal | A | Zakroma-Storage первого кластера или балансировщик | 443 | Обязательно |
kafka-1.cluster-1.zakroma.internal | A | Kafka первого кластера | 9092 | Обязательно |
kafka-ui.cluster-1.zakroma.internal | A | Kafka UI первого кластера или его Nginx | 7070 | Опционально |
keycloak.cluster-1.zakroma.internal | A | Keycloak первого кластера | 8443 | Опционально |
*.cluster-2.zakroma.internal | A | Zakroma-Storage второго кластера или балансировщик | 80 — S3 API | Обязательно для wildcard-схемы |
global.cluster-2.zakroma.internal | A | Zakroma-Storage второго кластера или балансировщик | 80 — S3 API | Отдельная запись нужна, только если wildcard недоступен |
zakroma-admin.cluster-2.zakroma.internal | A | Zakroma-Storage второго кластера или балансировщик | 8080 — Admin UI и Admin API | Обязательно |
postgresql.cluster-2.zakroma.internal | A | PostgreSQL второго кластера | 5432 | Обязательно |
zakroma-cdn.cluster-2.zakroma.internal | A | Zakroma-Storage второго кластера или балансировщик | 443 | Обязательно |
kafka-1.cluster-2.zakroma.internal | A | Kafka второго кластера | 9092 | Обязательно |
kafka-ui.cluster-2.zakroma.internal | A | Kafka UI второго кластера или его Nginx | 7070 | Опционально |
keycloak.cluster-2.zakroma.internal | A | Keycloak второго кластера | 8443 | Опционально |
Работа без
ps/vsВ стандартной схеме отдельные доменыps.<FQDN>иvs.<FQDN>не требуются.
- Path-style: endpoint
https://<workspace>.<FQDN>, объект доступен по адресуhttps://<workspace>.<FQDN>/<bucket>/<object>. Для этой схемы достаточно DNS-записи*.<FQDN>.- Virtual-hosted-style: endpoint остаётся
https://<workspace>.<FQDN>, а запрос к объекту поступает наhttps://<bucket>.<workspace>.<FQDN>/<object>. Для каждой рабочей области потребуются DNS-имена<workspace>.<FQDN>и*.<workspace>.<FQDN>.
Сервис Закрома.Хранение может работать с доменами классической схемы ps/vs для обратной совместимости. Если у вас сохраняется legacy-конфигурация Nginx, настройте её отдельно: Настройка Nginx.
Проверка DNS
Проверяйте конкретное имя рабочей области, а не имя wildcard-записи. Например, для базового кластера:
1getent ahostsv4 test-workspace.zakroma.internal 2getent ahostsv4 global.zakroma.internal 3getent ahostsv4 zakroma-admin.zakroma.internal 4getent ahostsv4 postgresql.zakroma.internal 5 6dig +short A test-workspace.zakroma.internal 7dig +short A global.zakroma.internal
Для мультикластера повторите проверку для обеих доменных зон:
1getent ahostsv4 test-workspace.cluster-1.zakroma.internal 2getent ahostsv4 postgresql.cluster-1.zakroma.internal 3getent ahostsv4 zakroma-cdn.cluster-1.zakroma.internal 4 5getent ahostsv4 test-workspace.cluster-2.zakroma.internal 6getent ahostsv4 postgresql.cluster-2.zakroma.internal 7getent ahostsv4 zakroma-cdn.cluster-2.zakroma.internal
При использовании virtual-hosted-style дополнительно проверьте имя бакета:
1getent ahostsv4 test-bucket.test-workspace.zakroma.internal
3. Подготовка сертификатов (TLS/SSL)
Подготовьте сертификаты или SAN для следующих доменных имён.
Для базового кластера и Single Node:
*.zakroma.internal— рабочие области S3 API при path-style, включаяglobal;zakroma-admin.zakroma.internal;keycloak.zakroma.internal— при использовании Keycloak;kafka-ui.zakroma.internal— при использовании Kafka UI.
Для мультикластера:
*.cluster-1.zakroma.internalи*.cluster-2.zakroma.internal;zakroma-admin.cluster-1.zakroma.internalиzakroma-admin.cluster-2.zakroma.internal;zakroma-cdn.cluster-1.zakroma.internalиzakroma-cdn.cluster-2.zakroma.internal;- имена Keycloak и Kafka UI — при использовании соответствующих компонентов.
Wildcard-сертификат *.<FQDN> покрывает адрес <workspace>.<FQDN> и достаточен для path-style. Он не покрывает адрес <bucket>.<workspace>.<FQDN>: для virtual-hosted-style подготовьте для каждой рабочей области сертификат с SAN <workspace>.<FQDN> и *.<workspace>.<FQDN>. Маска *.*.<FQDN> стандартными TLS-клиентами не поддерживается.
Если PostgreSQL использует TLS, его сертификаты и доверенную цепочку подготовьте отдельно в соответствии со значением zakroma_storage_postgresql_sslmode.
Для legacy-схемы с Nginx path-style требует сертификат *.ps.<FQDN>. Для virtual-hosted-style сертификата *.vs.<FQDN> недостаточно: нужны SAN <workspace>.vs.<FQDN> и *.<workspace>.vs.<FQDN> для каждой рабочей области. Подробнее см. Настройка Nginx.
4. Подготовка узла развертывания для работы с Ansible
- Проверьте, что доступно SSH-подключение к каждому хосту.
- Убедитесь, что пользователь имеет привилегированный (sudo) доступ.
- Установите или обновите Ansible. Поддерживаются версии от 2.15.0 до 2.18.15. С иными версиями могут встречаться ошибки при запуске плейбука.
- Установите пакет
sshpassиз дистрибутива вашей ОС, если планируется подключение к узлам по логину и паролю. - Рекомендуется запускать
ansible-playbookиз корневой директории архива с ролями, где находятсяansible.cfg,inventories/,playbooks/,roles/иcollections/. Это позволяет использовать относительные пути из поставки без дополнительных правок. - Рекомендуемый вариант запуска: явно указать конфигурационный файл через переменную окружения
ANSIBLE_CONFIG=ansible.cfg, а затем выполнить нужный playbook из каталогаplaybooks/.
Пример для базового кластера:
1cd zakroma-roles-7.2.3 2ANSIBLE_CONFIG=ansible.cfg ansible-playbook -i inventories/base-cluster/hosts playbooks/sample-play-zakroma-storage.yml
Пример для одноузлового варианта:
1cd zakroma-roles-7.2.3 2ANSIBLE_CONFIG=ansible.cfg ansible-playbook -i inventories/single-node/hosts playbooks/sample-play-zakroma-zds-fs.yml
5. Настройка PostgreSQL
Настройте PostgreSQL согласно инструкции.
6. Подготовка дисковых устройств для ZDS
Выполните подготовку дисков на каждом узле группы zakroma-zds-v2-ec. Роль ZDSv2 создаёт каталоги и назначает им владельца zakroma, но не создаёт LVM, файловые системы и точки монтирования.
Проверка дисков и необходимых пакетов для работы.
На узле должны быть установлены пакеты lvm2 и xfsprogs. Проверьте команды и выбранные устройства:
1command -v pvcreate 2command -v mkfs.xfs 3 4lsblk -o NAME,SIZE,TYPE,FSTYPE,MOUNTPOINTS,MODEL 5sudo wipefs --no-act /dev/vdb
Создание LVM и XFS удаляет данныеКоманды ниже предназначены для пустых дисков. Перед выполнением проверьте имя устройства и убедитесь, что оно не относится к системному диску, существующей VG или файловой системе с данными.
Создание PV, VG, LV и XFS
Базовая схема для ZDS: один физический диск — один PV — одна VG — один LV — одна точка монтирования. Не объединяйте независимые диски в общую VG без отдельно спроектированного RAID или другого уровня отказоустойчивости.
Пример подготавливает /dev/vdb, создаёт vg_zds_01/lv_zds_01, форматирует LV в XFS и монтирует его в /mnt/lvm1:
1sudo pvcreate /dev/vdb 2sudo vgcreate vg_zds_01 /dev/vdb 3sudo lvcreate --extents 100%FREE --name lv_zds_01 vg_zds_01 4 5sudo mkfs.xfs /dev/vg_zds_01/lv_zds_01 6sudo install -d -m 0755 /mnt/lvm1 7 8ZDS_UUID=$(sudo blkid -s UUID -o value /dev/vg_zds_01/lv_zds_01) 9FSTAB_LINE="UUID=${ZDS_UUID} /mnt/lvm1 xfs defaults,noatime,nodiscard 0 0" 10sudo grep -Fqx "$FSTAB_LINE" /etc/fstab || printf '%s\n' "$FSTAB_LINE" | sudo tee -a /etc/fstab 11 12sudo mount -a 13findmnt --target /mnt/lvm1
Повторите команды для каждого диска, изменяя устройство, VG, LV и точку монтирования:
| Диск | VG | LV | Точка монтирования | Каталог данных |
|---|---|---|---|---|
/dev/vdb | vg_zds_01 | lv_zds_01 | /mnt/lvm1 | /mnt/lvm1/data |
/dev/vdc | vg_zds_02 | lv_zds_02 | /mnt/lvm2 | /mnt/lvm2/data |
/dev/vdd | vg_zds_03 | lv_zds_03 | /mnt/lvm3 | /mnt/lvm3/data |
Параметры XFS
Используйте параметры mkfs.xfs по умолчанию. Они подходят для большинства инсталляций.
Не задавайте дополнительные параметры ФС при монтировании и при создании ФС без консультации с технической поддержкой.
Стандартное размещение данных и реестра БД
В стандартной схеме registry ZDSv2 размещается на одном LV с данными:
| Путь | Назначение |
|---|---|
/mnt/lvm1/data | Данные ZDSv2 на первом LV |
/mnt/lvm1/system/db | Локальный реестр БД ZDSv2 на первом LV |
/mnt/lvm2/data | Данные ZDSv2 на втором LV |
/mnt/lvm3/data | Данные ZDSv2 на третьем LV |
Состояние фоновых задач можно разместить на постоянной файловой системе системного диска:
/var/lib/zakroma-ds-agent/vacuum-state— состояние задачиvacuum;/var/lib/zakroma-ds-agent/scan-state— контрольные точки задачиscan.
Для сценариев base-cluster и multicluster измените только соответствующие пути в файле group_vars/zakroma-zds-v2-ec.yml выбранного inventory, сохранив остальные параметры секций. Фрагмент ниже не предназначен для полной замены секций: в поставке они содержат дополнительные параметры.
1zakroma_zds_drive: 2 list: 3 - index: 1 4 path: "/mnt/lvm1/data" 5 storageGroup: 1 6 storageClass: "" 7 - index: 2 8 path: "/mnt/lvm2/data" 9 storageGroup: 2 10 storageClass: "HDD" 11 - index: 3 12 path: "/mnt/lvm3/data" 13 storageGroup: 3 14 storageClass: "HDD" 15 16zakroma_zds_registry: 17 path: "/mnt/lvm1/system/db" 18 19zakroma_zds_background_window_jobs: 20 vacuum: 21 storePath: "/var/lib/zakroma-ds-agent/vacuum-state" 22 scan: 23 storePath: "/var/lib/zakroma-ds-agent/scan-state"
Смонтируйте LV до запуска AnsibleЕсли
/mnt/lvm1,/mnt/lvm2или/mnt/lvm3не смонтированы, роль всё равно создаст каталоги по указанным путям, но они окажутся на системной файловой системе.
Схема размещения дисковых групп ZDS для конфигурации на примере трех дисков

Отдельный LV для реестра БД ZDS
Для крупных инсталляций реестр БД рекомендуется разместить на отдельном LV. Такой LV может находиться в той же VG, что и data-LV, или в другой VG. Размер определяется по результатам сайзинга с технической поддержкой;
Если реестр БД и LV с данными создаются в одной VG, сначала зарезервируйте место под реестр БД, а затем передайте оставшееся пространство для LV с данными. Следующий пример использует размер 100G только для демонстрации синтаксиса:
1sudo pvcreate /dev/vdb 2sudo vgcreate vg_zds_01 /dev/vdb 3 4sudo lvcreate --size 100G --name lv_zds_registry vg_zds_01 5sudo lvcreate --extents 100%FREE --name lv_zds_01 vg_zds_01 6 7sudo mkfs.xfs /dev/vg_zds_01/lv_zds_registry 8sudo mkfs.xfs /dev/vg_zds_01/lv_zds_01 9 10sudo install -d -m 0755 /mnt/zds-registry /mnt/lvm1 11 12REGISTRY_UUID=$(sudo blkid -s UUID -o value /dev/vg_zds_01/lv_zds_registry) 13REGISTRY_FSTAB_LINE="UUID=${REGISTRY_UUID} /mnt/zds-registry xfs defaults,noatime,nodiscard 0 0" 14sudo grep -Fqx "$REGISTRY_FSTAB_LINE" /etc/fstab || printf '%s\n' "$REGISTRY_FSTAB_LINE" | sudo tee -a /etc/fstab 15 16DATA_UUID=$(sudo blkid -s UUID -o value /dev/vg_zds_01/lv_zds_01) 17DATA_FSTAB_LINE="UUID=${DATA_UUID} /mnt/lvm1 xfs defaults,noatime,nodiscard 0 0" 18sudo grep -Fqx "$DATA_FSTAB_LINE" /etc/fstab || printf '%s\n' "$DATA_FSTAB_LINE" | sudo tee -a /etc/fstab 19 20sudo mount -a
Для этой схемы измените только путь до реестра БД:
1zakroma_zds_registry: 2 path: "/mnt/zds-registry/db"
Не добавляйте /mnt/zds-registry или /mnt/zds-registry/db в zakroma_zds_drive.list: этот LV не используется для объектных данных.
Проверка перед установкой
До запуска Ansible убедитесь, что XFS смонтирована с ожидаемых LV:
1sudo pvs 2sudo vgs 3sudo lvs 4 5findmnt --target /mnt/lvm1 6findmnt --target /mnt/lvm2 7findmnt --target /mnt/lvm3 8findmnt -no SOURCE,FSTYPE,OPTIONS --target /mnt/lvm1 9 10sudo xfs_info /mnt/lvm1 11df -h /mnt/lvm1 /mnt/lvm2 /mnt/lvm3
Для схемы с отдельным волюмом для реестра БД дополнительно выполните:
1findmnt --target /mnt/zds-registry 2sudo xfs_info /mnt/zds-registry 3df -h /mnt/zds-registry
После выполнения роли проверьте фактические файловые системы и права каталогов:
1findmnt --target /mnt/lvm1/data 2findmnt --target /mnt/lvm1/system/db 3findmnt --target /var/lib/zakroma-ds-agent/vacuum-state 4findmnt --target /var/lib/zakroma-ds-agent/scan-state 5 6stat -c '%U:%G %a %n' \ 7 /mnt/lvm1/data \ 8 /mnt/lvm1/system/db \ 9 /var/lib/zakroma-ds-agent/vacuum-state \ 10 /var/lib/zakroma-ds-agent/scan-state
Для схемы с отдельным registry-LV замените в проверках /mnt/lvm1/system/db на /mnt/zds-registry/db.
7. Пакет Nginx (опционально)
Nginx не является обязательным компонентом стандартной установки. Проверка пакета Nginx требуется только для legacy-инсталляций, где используется отдельная конфигурация Nginx.
Для такой конфигурации на целевых узлах должен быть доступен для установки из репозиториев пакетного менеджера или уже установлен Nginx версии от 1.14.1 до 1.29.1. С более ранними версиями Nginx возможны проблемы с совместимостью.
Инструкция по настройке: Настройка Nginx.