Для улучшения работы сайта мы используем файлы cookies. Оставаясь на сайте, вы соглашаетесь с политикой обработки персональных данных.

Развертывание SDS на базе ПСХД uStor

1. Введение

Гиперконвергентный вариант развертывания среды виртуализации объединяет вычислительные возможности, хранилища, сети хостов и предоставляет управление инфраструктурой в веб-интерфейсе.

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

2. Алгоритм развертывания

2.1. Подготовка серверов

  • Серверы должны быть полностью укомплектованы всеми необходимыми аппаратными компонентами.

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

  • На серверах должны быть выполнены базовые проверки работоспособности аппаратных компонентов и подтверждена их исправность.

  • На серверах должны быть выполнены работы по обновлению микрокодов аппаратных компонентов до рекомендуемого производителем уровня.

  • При наличии в составе серверов аппаратного RAID-контроллера и использования его ресурсов для установки ОС этот контроллер должен быть предварительно сконфигурирован для использования его логических томов в процессе установки поддерживаемой операционной системы.

  • На серверах должны быть выполнены следующие настройки BIOS/UEFI:

    • Отключён режим P-state Control;

    • Отключён (или в состоянии C0/C1) режим C-state Control;

    • Настройка Workload Configuration = I/O sensitive;

    • Настройка Power Performance Tuning = BIOS Controls EPB;

    • Настройка ENERGY_PERF_BIAS_CFG mode = Performance.

  • Все сервера должны иметь подготовленные полные доменные имена(FQDN), а также прямое и обратное разрешение имен.

  • На серверах должна быть установлена среда исполнения zVirt Node версии 4.4 и более.

  • На всех серверах должны быть настроены репозитории.

  • На всех серверах должна быть настроена синхронизация времени (NTP).

  • Необходимо проверить, что твердотельные накопители (SSD) определяются системой как немеханические диски: команда cat /sys/block/<устройство>/queue/rotational должна возвращать значение 0 для SSD-накопителей. Если это условие не выполняется, создайте соответствующее правило udev для автоматического присвоения параметра rotational=0.

  • Не отключайте сервис firewalld (межсетевой экран).

3. Развертывание гиперконвергентного решения

Следующие операции должны выполняться на всех серверах, которые будут играть роль узлов кластера ПСХД.

3.1. Создание локального репозитория

Порядок действий:
  1. Подключитесь по SSH к серверу с учетной записью root.

  2. Загрузите архив ustor, предварительно загруженный из личного кабинета My.MIND Кабинет.

  3. Проверьте контрольные суммы архивов по алгоритму MD5. Контрольная сумма указана в разделе «Загрузки» в столбце HASH в My.MIND Кабинет.

    md5sum ustor<version>.tar.gz
  4. Распакуйте архив с ПО MIND uStor.

    sudo tar -zxvf ./ustor_<version>.tar.gz
  5. Скачайте ISO-образ репозитория zVirt с официального сайта.

  6. Выполните монтирование загруженного ISO-образа репозитория в директорию /media/cdrom:

    mount -o loop /root/repos_zvirt_4X_XXXXXXXXXXXX.iso /media/cdrom
  7. Создайте конфигурационный файл репозитория.

    touch /etc/yum.repos.d/ustor-iso.repo
  8. Приведите файл репозитория к следующему виду:

    name=uStor ISO Repository
    baseurl=file:///media/cdrom/zvirt-4/4.X
    enabled=1
    gpgcheck=0
    priority=1[ustor-iso-extras]
    
    name=uStor ISO Extras Repository
    baseurl=file:///media/cdrom/zvirt-4/extras-4.X
    enabled=1
    gpgcheck=0
  9. Проверьте правильность подключения репозитория. Следующие команды должны отработать без ошибок, состояние репозитория должно быть в статусе «включено»:

    dnf repolist all
  10. Повторите настройку на остальных узлах.

3.2. Установка пакетов системного ПО

Порядок действий:
  1. Подключитесь по SSH к серверу с учетной записью root.

  2. Перейдите в директорию MIND uStor:

    cd ustor_<version>/
  3. Выполните установку зависимостей ПО MIND uStor:

    sudo dnf install $(ls ./*.rpm 2>/dev/null | grep -v debuginfo | grep -v gost | grep -v md5 | grep -v ustor || true) $(ls ./ustor-nodejs*.rpm 2>/dev/null | grep -v debuginfo || true)
  4. Выполните установку набора пакетов ПО MIND uStor, с помощью команды:

    • для узлов управления и хранения:

      sudo dnf install $(ls ./ustor-api-*.rpm ./ustor-audit-*.rpm ./ustor-snmp-*.rpm ./ustor-webui-*.rpm ./ustor-auth-*.rpm ./ustor-cli-*.rpm ./ustor-client-*.rpm ./ustor-healthmanager-*.rpm ./ustor-mon-*.rpm ./ustor-osd-*.rpm ./ustor-ucli-*.rpm ./ustor-utils-*.rpm ./ustor-worker-*.rpm 2>/dev/null | grep -v debuginfo || true)
    • для узлов хранения:

      sudo dnf install $(ls ./ustor-snmp-*.rpm ./ustor-auth-*.rpm ./ustor-cli-*.rpm ./ustor-client-*.rpm ./ustor-healthmanager-*.rpm ./ustor-osd-*.rpm ./ustor-utils-*.rpm ./ustor-worker-*.rpm ./ustor-ucli-*.rpm 2>/dev/null | grep -v debuginfo || true)
    • для шлюзов iSCSI:

      sudo dnf install $(ls ./ustor-iscsi-*.rpm ./ustor-iscsi-mgmt-*.rpm ./ustor-iscsi-tgt-*.rpm ./ustord*.rpm 2>/dev/null | grep -v debuginfo || true)

3.3. Настройка межсетевого экрана

Порядок действий:
  1. Подключитесь по SSH к серверу с учетной записью root.

  2. На каждом узле кластера определите зону межсетевого экрана (firewall zone) с именем ustor-cluster:

    firewall-cmd --permanent --new-zone=ustor-cluster
  3. Перезагрузите сервис firewalld для применения изменений:

    firewall-cmd --reload
  4. Добавить все узлы кластера как источники в зону ustor-cluster межсетевого экрана:

    for ip in 10.0.0.10 10.0.0.11 10.0.0.12; do
        firewall-cmd --permanent --zone=ustor-cluster --add-source=${ip}/32
    done
  5. Перезагрузите сервис firewalld для применения изменений:

    firewall-cmd --reload
  6. На всех узлах с функциями управления и хранения необходимо добавить специальные правила (rich rules) для сервисов etcd (TCP порты 23000 и 23001) и uStor mind-audit (TCP порты 23002 и 23003).

    for peer_ip in 10.0.0.10 10.0.0.11 10.0.0.12; do
        # etcd client (23000/tcp)
        firewall-cmd --permanent --zone=ustor-cluster --add-rich-rule="rule family=ipv4 source address=$peer_ip port port=23000 protocol=tcp accept"
        # etcd peer (23001/tcp)
        firewall-cmd --permanent --zone=ustor-cluster --add-rich-rule="rule family=ipv4 source address=$peer_ip port port=23001 protocol=tcp accept"
        # uStor Audit (23002/tcp)
        firewall-cmd --permanent --zone=ustor-cluster --add-rich-rule="rule family=ipv4 source address=$peer_ip port port=23002 protocol=tcp accept"
        # uStor Audit (23003/tcp)
        firewall-cmd --permanent --zone=ustor-cluster --add-rich-rule="rule family=ipv4 source address=$peer_ip port port=23003 protocol=tcp accept"
  7. Перезагрузите сервис firewalld для применения изменений:

    firewall-cmd --reload
  8. На всех узлах с ролями управления и хранения необходимо добавить rich-правила для обеспечения доступа к интерфейсу WebUI (TCP-порт 23004).

    firewall-cmd --permanent --zone=public --add-rich-rule="rule family=ipv4 port port=23004 protocol=tcp accept"
  9. Перезагрузите сервис firewalld для применения изменений:

    firewall-cmd --reload
  10. На всех узлах с ролью управления и хранения настройте разрешение для веб-сервера Nginx на прослушивание входящих соединений по TCP-порту 23004.

    semanage port -a -t http_port_t -p tcp 23004
    semanage port -m -t http_port_t -p tcp 23004
  11. Для каждого узла с ролью хранения (включая узлы, выполняющие одновременно роли управления и хранения), необходимо задать правила для взаимодействия дисков uStor, задав соответствующие диапазоны портов.

    for peer_ip in 10.0.0.10 10.0.0.11 10.0.0.12; do
        # TCP порты 23005-23499
        firewall-cmd --permanent --zone=ustor-cluster --add-rich-rule="rule family=ipv4 source address=$peer_ip port port=23005-23499 protocol=tcp accept"
  12. Перезагрузите сервис firewalld для применения изменений:

    firewall-cmd --reload
  13. На всех узлах с ролями управления и хранения выполните настройку безопасности для nginx, разрешив исходящие соединения сервера следующим образом:

    sudo setsebool -P httpd_can_network_connect 1
  14. На всех узлах с ролями управления и хранения, а также узлах исключительно с ролью хранения, необходимо убедиться в правильной конфигурации службы синхронизации времени (NTP). Обеспечение актуальной и согласованной временной отметки является обязательным условием для стабильной и корректной работы компонентов uStor.

3.4. Развёртывание узлов

Для развертывания кластера распределённой системы хранения данных (ПСХД) MIND uStor необходимо предварительно подготовить конфигурационный файл, содержащий параметры подключения и учитывающий распределение ролей между узлами кластера, включая серверы с функцией управляющих узлов. Далее требуется провести инициализацию базового хранилища конфигурации и запустить необходимые системные сервисы кластера.

Порядок действий:
  1. На всех узлах с ролями управления и хранения, а также с ролью хранения создать конфигурационный файл подключения ustor.conf, который будет содержать информацию об адресах только узлов управления.

    • Откройте конфигурационный файл ustor.conf:

      nano /etc/ustor/ustor.conf
    • Вставьте следующие текстовые строки:

      {
      "etcd_address": ["<ip_node0>:23000", "<ip_node1>:23000", "<ip_node2>:23000"],
      "osd_network": "<subnet>/<mask>"
      }

      Где <ip_nodeX> — IP-адреса, назначенные на интерфейсах кластерного интерконнекта узлов управления.

      В файле конфигурации ustor.conf IP-адреса в параметре etcd_address должны принадлежать к подсети, указанной в параметре osd_network.

      Пример:

      {
      "etcd_address": ["10.0.0.10:23000", "10.0.0.11:23000", "10.0.0.12:23000"],
      "osd_network": "10.0.0.0/24"
      }
  2. На всех узлах с ролями управления и хранения измените значения стандартных портов для компонента ustor-etcd: при установке на платформе zVirt необходимо заменить порты 2379 и 2380 на 23000 и 23001 соответственно.

    sed -i 's/\b2379\b/23000/g; s/\b2380\b/23001/g' /usr/bin/init-ustor
  3. На всех узлах с ролями управления и хранения инициализируйте кластер ПСХД MIND uStor:

    sudo init-ustor
  4. Проверьте состояние кластера с помощью команды ustor-cli status:

    ustor-cli status
    
    cluster:
       etcd: 3 / 3 up, leader ustorNode1, 5.8 M database size
       mon: 3 up, master ustorNode0
       osd: 0 / 0 up
    data:
       raw: 0 B used, 0 B / 0 B available
       state: 0 B clean
       pools: 0 / 0 active
       pgs: 0 active
    io:
       client: 0 B/s rd, 0 op/s rd, 0 B/s wr, 0 op/s wr
  5. На всех узлах с ролями управления и хранения отредактируйте файл /etc/ustor/ustor-audit.conf:

    1. Укажите IP-адрес текущего узла в параметре NODE_ADDR;

    2. Заполните список IP-адресов всех узлов с ролями управления и хранения в параметре CLUSTER_ADDRESSES;

    3. Задайте значение параметра LOCALITY_ZONE, указав имя узла (hostname).

      • Откройте конфигурационный файл ustor-audit.conf:

        nano /etc/ustor/ustor-audit.conf
      • Отредактируйте содержимое, указав адреса узлов в соответствии с адресным планом:

        # NODE_ADDR - IP address of this node
        # Example: NODE_ADDR=192.168.1.2
        NODE_ADDR=<ip_nodeX>
        # CLUSTER_ADDRESSES - list of IP addresses and ports of all nodes of the DB cluster, separated by commas
        # Example: CLUSTER_ADDRESSES=192.168.1.2:23002,192.168.1.3:23002,192.168.1.4:23002,192.168.1.5:23002,192.168.1.6:23002
        CLUSTER_ADDRESSES=<ip_node0>:23002,<ip_node1>:23002,<ip_node2>:23002
        # LOCALITY_ZONE - specifies the locality zone for this node, used for data replication and placement
        # Example: LOCALITY_ZONE=hostname1
        LOCALITY_ZONE=<ip_nodeX_hostname>
В параметре CLUSTER_ADDRESSES укажите порт 23002.
  1. Создайте корневой сертификат (CA-сертификат) с использованием утилиты ustor-auth на произвольном узле из состава кластера.

    sudo ustor-auth create-ca-cert --out /etc/ustor/certs/
Необходимо скопировать ustor_ca.crt и ustor_ca.key во внешнее хранилище сертификатов. Сертификат ustor_ca.crt необходим для добавления или восстановления узлов кластера MIND uStor.
  1. На всех узлах с ролями управления и хранения создайте каталог для сертификатов:

    mkdir -p /etc/ustor/certs/ustor-audit/
  2. На узле, где был создан корневой сертификат (CA-сертификат), сгенерируйте сертификаты для взаимной аутентификации узлов кластера. При указании имен узлов и их IP-адресов включайте только узлы с ролями управления и хранения.

    sudo ustor-auth create-service-cert ustor-audit <hostname_node0> <hostname_node1> <hostname_node2> <hostname_node3> <hostname_node4> <ip_node0> <ip_node1> <ip_node2> <ip_node3> <ip_node4> --ca-cert /etc/ustor/certs/ustor_ca.crt --ca-key /etc/ustor/certs/ustor_ca.key --out /etc/ustor/certs/ustor-audit
  3. Переместите созданные сертификаты с узла, на котором они были сформированы, на все остальные узлы с ролями управления и хранения, разместив их в каталоге /etc/ustor/certs/ustor-audit/.

    scp -r /etc/ustor/certs/ustor-audit/ root@10.0.0.12:/etc/ustor/certs/
  4. Измените владельца каталога /etc/ustor/certs/ustor-audit/ на пользователя ustor-audit.

    chown -R ustor-audit:ustor-audit /etc/ustor/certs/ustor-audit/
  5. На всех узлах с ролями управления и хранения необходимо изменить стандартные порты для сервиса ustor-audit. Для установки на платформе zVirt требуется сменить стандартный порт gRPC (26257) на 23002, а HTTP-порт (8081) переопределить на 23003.

    sed -i 's/:26257/:23002/' /usr/lib/systemd/system/ustor-audit.service
    sed -i 's/:8081/:23003/' /usr/lib/systemd/system/ustor-audit.service
    sed -i 's|\(ExecStart=.*start\)\( --certs-dir\)|\1 --listen-addr=${NODE_ADDR}:23002\2|' /usr/lib/systemd/system/ustor-audit.service
  6. Запустите службу ustor-audit на каждом узле с ролями управления и хранения, а также на узлах, имеющих исключительно роль хранения.

    systemctl enable ustor-audit --now
  7. Убедитесь что служба запущена на всех узлах:

    systemctl status ustor-audit
    Пример вывода команды
    ustor-audit.service - uStor audit
    Loaded: loaded (file://ustorNode0/lib/systemd/system/ustor-audit.service;/lib/systemd/system/ustor-audit.service;enabled; preset;enabled)
    Active: ;1;32mactive (running) since Wed 2025-04-23 12:02:03 MSK; 5s ago
    ...
        Apr 23 12:02:03 ustorNode0 systemd[1]: Starting ustor-audit.service - uStor audit...
        Apr 23 12:02:03 ustorNode0 ustor-audit[8812]: *
        Apr 23 12:02:03 ustorNode0 ustor-audit[8812]: * INFO: initial startup completed.
        Apr 23 12:02:03 ustorNode0 ustor-audit[8812]: * Node will now attempt to join a running cluster, or wait for ustor-audit init.
    ...
  8. Выполните команду ustor-audit init на одном узле кластера, указав путь к каталогу с сертификатами.

    ustor-audit init --certs-dir /etc/ustor/certs/ustor-audit --host 10.0.0.10:23002
    Cluster successfully initialized
  9. На узле на котором выполнена инициализация кластера (выпонена команда ustor-audit init) проведите первоначально конфигурирование базы данных.

    • Для открытия SQL-консоли сервиса выполните команду ustor-audit sql, указав путь к каталогу с сертификатами.

      ustor-audit sql --certs-dir /etc/ustor/certs/ustor-audit --host 10.0.0.10:23002
    • В открывшейся SQL-консоли создайте пользователя и базу данных ustor.

      CREATE USER ustor_admin WITH PASSWORD 'Passw0rd21';
      GRANT admin TO ustor_admin;
      SET CLUSTER SETTING timeseries.storage.enabled = false;
      CREATE DATABASE IF NOT EXISTS ustor_db;
      quit
  10. На выбранном узле кластера выполните начальную настройку базы данных и уровня отказоустойчивости сервиса mind-audit.

    • Откройте SQL-консоль сервиса, выполнив команду ustor-audit sql с указанием пути к каталогу сертификатов, и произведите необходимую конфигурацию отказоустойчивости.

      ustor-audit sql --certs-dir /etc/ustor/certs/ustor-audit --host 10.0.0.10:23002
    • В SQL-консоли установите число реплик, равное количеству узлов управления, и укажите конфигурацию зон размещения, перечислив наименования всех зон, определенных на четвертом шаге (позже будет добавлена ссылка на шаг).

      ALTER RANGE default CONFIGURE ZONE USING num_replicas = 3, constraints = '{"+zone=node1": 1, "+zone=node2": 1, "+zone=node3": 1}';
      
      quit

      Данная настройка гарантирует сбалансированное размещение реплик сервиса mind-audit среди управляющих узлов кластера и удовлетворяет требованиям отказоустойчивого распределения ресурсов.

  11. На каждом узле создайте конфигурационный файл подключения ustor-middleware.conf, в котором необходимо указать параметры подключения к базе данных.

    • На каждом узле с ролями управления и хранения:

      • Откройте конфигурационный файл ustor-middleware.conf:

        nano /etc/ustor/ustor-middleware.conf
      • Отредактируйте содержимое, указав параметры сервера баз данных:

        {
        "db_host": "10.0.0.10",
        "db_port": 23002,
        "db_name": "ustor_db",
        "db_user": "ustor_admin",
        "db_password": "Passw0rd21",
        "api_insecure": 1,
        "db_query": "sslmode=require",
        "tls": 0,
        "transport_etcd_port": 23000
        }
        Параметр api_insecure следует установить в значение 1, чтобы обеспечить корректную работу API в небезопасном режиме.
    • На каждом узле с ролью только хранения:

      • Откройте конфигурационный файл ustor-middleware.conf:

        nano /etc/ustor/ustor-middleware.conf
      • Отредактируйте содержимое, указав параметры сервера баз данных:

        {
        "db_port": 23002,
        "db_name": "ustor_db",
        "db_user": "<database_user_name>",
        "db_password": "<database_password>",
        "api_insecure": 1,
        "db_query": "sslmode=require",
        "tls": 0,
        "transport_etcd_port": 23000
        }
  12. На каждом узле измените владельца каталога /etc/ustor/ustor-middleware.conf на пользователя ustor.

    chown ustor:ustor /etc/ustor/ustor-middleware.conf
  13. Запустите скрипт инициализации базы данных (DB initialization script) для ustor-api только на одном узле с ролью управления и хранения.

    sudo python3.12 /usr/lib/python3.12/site-packages/ustor_utils/init_db.py
    • Пример вывода результата выпонения команды:

      sudo python3.12 /usr/lib/python3.12/site-packages/ustor_utils/init_db.py
      Tables are created.
      Create admin user?(y/n):y
      Users created
  14. Сгенерируйте серийный номер массива на одном из узлов кластера, имеющем роль управления и хранения:

    sudo python3.12 /usr/lib/python3.12/site-packages/ustor_utils/init_cluster_serial_number.py
  15. Перезапустите сервис API на всех узлах кластера, выполняющих роли управления и хранения:

    systemctl restart ustor-api

Первичные учетные данные для доступа к сервисам администрирования uStor (Web UI, RESTful API, CLI):

  • Логин: admin

  • Пароль: Passw0rd

3.5. Настройка веб-интерфейса ПСХД uStor

На каждом узле с ролями управления и хранения:
  1. Откройте конфигурационный файл etc/ustor/ustor-webui.conf:

    nano etc/ustor/ustor-webui.conf
    • Отредактируйте содержимое, указав значения следующих переменных:

      • NEXTAUTH_URL- внешний URL-адрес сервера;

      • NEXT_ALLOWED_ORIGIN - IP-адрес или DNS узла

      • NEXT_PUBLIC_API_BASE_URL - URL-адрес для доступа к API.

      • NEXTAUTH_SECRET- секретная строка, используемая для шифрования JWT-токенов.

        Пример
        NEXT_PUBLIC_API_BASE_URL="http://127.0.0.1:5000"
        NEXTAUTH_SECRET="HUfvaVwoRvSHTK2SZWLrWGNMGcrvcxLp"
        NEXTAUTH_URL="https://10.0.0.10:23004"
        NEXT_ALLOWED_ORIGIN="10.0.0.0:23004"
  2. Отключите один из конфигурационных файлов веб-сервера Nginx.

    mv /etc/nginx/conf.d/ustor.conf /etc/nginx/conf.d/ustor.conf.disabled
  3. Удалить конфигурацию по умолчанию веб-сервера Nginx.

    mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.disabled
  4. Отключите использования сервера по умолчанию в конфигурационном файле веб-сервера Nginx.

    sed -i 's/listen.*default_server/#&/' /etc/nginx/nginx.conf
  5. Замените стандартный HTTPS-порт 443 на порт 23004.

    sed -i 's/\blisten 443\b/listen 23004/' /etc/nginx/conf.d/ustor_ssl.conf
  6. Сгенерируйте сертификаты, воспользовавшись командой ustor-auth.

    ustor-auth create-service-cert api <hostname_node0> <hostname_nodeX> <ip_node0> <ip_node1> <ip_nodeX> --ca-cert /etc/ustor/certs/ustor_ca.crt --ca-key /etc/ustor/certs/ustor_ca.key --out /etc/ustor/certs
  7. Проверьте правильность конфигурации веб-сервера Nginx.

    nginx -t
    
    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: configuration file /etc/nginx/nginx.conf test is successful
  8. Запустите сервисы веб-интерфейса.

    systemctl enable nginx ustor-webui --now
  9. На узлах с ролью управления и хранения дополнительно запустите слудующий набор сервисов:

    systemctl enable --now ustor-api.service
    systemctl enable --now ustor-api_consumer.service
    systemctl enable --now ustor-api_worker.service
    systemctl enable --now ustor-audit.service
    systemctl enable --now ustor-etcd.service
    systemctl enable --now ustor-mon.service
    systemctl enable --now ustor-snmp.service
    systemctl enable --now uhealth.service
  10. На узлах с ролью хранения дополнительно запустите следующий набор сервисов:

    systemctl enable --now ustor-api_consumer.service
    systemctl enable --now ustor-api_worker.service
    systemctl enable --now ustor-snmp.service
    systemctl enable --now uhealth.service