Развертывание 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. Создание локального репозитория
-
Подключитесь по SSH к серверу с учетной записью root.
-
Загрузите архив
ustor, предварительно загруженный из личного кабинета My.MIND Кабинет. -
Проверьте контрольные суммы архивов по алгоритму MD5. Контрольная сумма указана в разделе «Загрузки» в столбце HASH в My.MIND Кабинет.
md5sum ustor<version>.tar.gz -
Распакуйте архив с ПО MIND uStor.
sudo tar -zxvf ./ustor_<version>.tar.gz -
Скачайте ISO-образ репозитория zVirt с официального сайта.
-
Выполните монтирование загруженного ISO-образа репозитория в директорию
/media/cdrom:mount -o loop /root/repos_zvirt_4X_XXXXXXXXXXXX.iso /media/cdrom -
Создайте конфигурационный файл репозитория.
touch /etc/yum.repos.d/ustor-iso.repo -
Приведите файл репозитория к следующему виду:
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 -
Проверьте правильность подключения репозитория. Следующие команды должны отработать без ошибок, состояние репозитория должно быть в статусе «включено»:
dnf repolist all -
Повторите настройку на остальных узлах.
3.2. Установка пакетов системного ПО
-
Подключитесь по SSH к серверу с учетной записью root.
-
Перейдите в директорию MIND uStor:
cd ustor_<version>/ -
Выполните установку зависимостей ПО 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) -
Выполните установку набора пакетов ПО 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. Настройка межсетевого экрана
-
Подключитесь по SSH к серверу с учетной записью root.
-
На каждом узле кластера определите зону межсетевого экрана (firewall zone) с именем ustor-cluster:
firewall-cmd --permanent --new-zone=ustor-cluster -
Перезагрузите сервис firewalld для применения изменений:
firewall-cmd --reload -
Добавить все узлы кластера как источники в зону 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 -
Перезагрузите сервис firewalld для применения изменений:
firewall-cmd --reload -
На всех узлах с функциями управления и хранения необходимо добавить специальные правила (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" -
Перезагрузите сервис firewalld для применения изменений:
firewall-cmd --reload -
На всех узлах с ролями управления и хранения необходимо добавить rich-правила для обеспечения доступа к интерфейсу WebUI (TCP-порт 23004).
firewall-cmd --permanent --zone=public --add-rich-rule="rule family=ipv4 port port=23004 protocol=tcp accept" -
Перезагрузите сервис firewalld для применения изменений:
firewall-cmd --reload -
На всех узлах с ролью управления и хранения настройте разрешение для веб-сервера Nginx на прослушивание входящих соединений по TCP-порту 23004.
semanage port -a -t http_port_t -p tcp 23004 semanage port -m -t http_port_t -p tcp 23004 -
Для каждого узла с ролью хранения (включая узлы, выполняющие одновременно роли управления и хранения), необходимо задать правила для взаимодействия дисков 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" -
Перезагрузите сервис firewalld для применения изменений:
firewall-cmd --reload -
На всех узлах с ролями управления и хранения выполните настройку безопасности для nginx, разрешив исходящие соединения сервера следующим образом:
sudo setsebool -P httpd_can_network_connect 1 -
На всех узлах с ролями управления и хранения, а также узлах исключительно с ролью хранения, необходимо убедиться в правильной конфигурации службы синхронизации времени (NTP). Обеспечение актуальной и согласованной временной отметки является обязательным условием для стабильной и корректной работы компонентов uStor.
3.4. Развёртывание узлов
Для развертывания кластера распределённой системы хранения данных (ПСХД) MIND uStor необходимо предварительно подготовить конфигурационный файл, содержащий параметры подключения и учитывающий распределение ролей между узлами кластера, включая серверы с функцией управляющих узлов. Далее требуется провести инициализацию базового хранилища конфигурации и запустить необходимые системные сервисы кластера.
-
На всех узлах с ролями управления и хранения, а также с ролью хранения создать конфигурационный файл подключения 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" }
-
-
На всех узлах с ролями управления и хранения измените значения стандартных портов для компонента ustor-etcd: при установке на платформе zVirt необходимо заменить порты 2379 и 2380 на 23000 и 23001 соответственно.
sed -i 's/\b2379\b/23000/g; s/\b2380\b/23001/g' /usr/bin/init-ustor -
На всех узлах с ролями управления и хранения инициализируйте кластер ПСХД MIND uStor:
sudo init-ustor -
Проверьте состояние кластера с помощью команды 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 -
На всех узлах с ролями управления и хранения отредактируйте файл
/etc/ustor/ustor-audit.conf:-
Укажите IP-адрес текущего узла в параметре
NODE_ADDR; -
Заполните список IP-адресов всех узлов с ролями управления и хранения в параметре
CLUSTER_ADDRESSES; -
Задайте значение параметра
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.
|
-
Создайте корневой сертификат (CA-сертификат) с использованием утилиты
ustor-authна произвольном узле из состава кластера.sudo ustor-auth create-ca-cert --out /etc/ustor/certs/
| Необходимо скопировать ustor_ca.crt и ustor_ca.key во внешнее хранилище сертификатов. Сертификат ustor_ca.crt необходим для добавления или восстановления узлов кластера MIND uStor. |
-
На всех узлах с ролями управления и хранения создайте каталог для сертификатов:
mkdir -p /etc/ustor/certs/ustor-audit/ -
На узле, где был создан корневой сертификат (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 -
Переместите созданные сертификаты с узла, на котором они были сформированы, на все остальные узлы с ролями управления и хранения, разместив их в каталоге
/etc/ustor/certs/ustor-audit/.scp -r /etc/ustor/certs/ustor-audit/ root@10.0.0.12:/etc/ustor/certs/ -
Измените владельца каталога
/etc/ustor/certs/ustor-audit/на пользователяustor-audit.chown -R ustor-audit:ustor-audit /etc/ustor/certs/ustor-audit/ -
На всех узлах с ролями управления и хранения необходимо изменить стандартные порты для сервиса
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 -
Запустите службу ustor-audit на каждом узле с ролями управления и хранения, а также на узлах, имеющих исключительно роль хранения.
systemctl enable ustor-audit --now -
Убедитесь что служба запущена на всех узлах:
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. ... -
Выполните команду
ustor-audit initна одном узле кластера, указав путь к каталогу с сертификатами.ustor-audit init --certs-dir /etc/ustor/certs/ustor-audit --host 10.0.0.10:23002 Cluster successfully initialized -
На узле на котором выполнена инициализация кластера (выпонена команда 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
-
-
На выбранном узле кластера выполните начальную настройку базы данных и уровня отказоустойчивости сервиса
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среди управляющих узлов кластера и удовлетворяет требованиям отказоустойчивого распределения ресурсов.
-
-
На каждом узле создайте конфигурационный файл подключения
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 }
-
-
-
На каждом узле измените владельца каталога
/etc/ustor/ustor-middleware.confна пользователяustor.chown ustor:ustor /etc/ustor/ustor-middleware.conf -
Запустите скрипт инициализации базы данных (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
-
-
Сгенерируйте серийный номер массива на одном из узлов кластера, имеющем роль управления и хранения:
sudo python3.12 /usr/lib/python3.12/site-packages/ustor_utils/init_cluster_serial_number.py -
Перезапустите сервис API на всех узлах кластера, выполняющих роли управления и хранения:
systemctl restart ustor-api
|
Первичные учетные данные для доступа к сервисам администрирования uStor (Web UI, RESTful API, CLI):
|
3.5. Настройка веб-интерфейса ПСХД uStor
-
Откройте конфигурационный файл
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"
-
-
-
Отключите один из конфигурационных файлов веб-сервера Nginx.
mv /etc/nginx/conf.d/ustor.conf /etc/nginx/conf.d/ustor.conf.disabled -
Удалить конфигурацию по умолчанию веб-сервера Nginx.
mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.disabled -
Отключите использования сервера по умолчанию в конфигурационном файле веб-сервера Nginx.
sed -i 's/listen.*default_server/#&/' /etc/nginx/nginx.conf -
Замените стандартный HTTPS-порт 443 на порт 23004.
sed -i 's/\blisten 443\b/listen 23004/' /etc/nginx/conf.d/ustor_ssl.conf -
Сгенерируйте сертификаты, воспользовавшись командой
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 -
Проверьте правильность конфигурации веб-сервера Nginx.
nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful -
Запустите сервисы веб-интерфейса.
systemctl enable nginx ustor-webui --now -
На узлах с ролью управления и хранения дополнительно запустите слудующий набор сервисов:
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 -
На узлах с ролью хранения дополнительно запустите следующий набор сервисов:
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