Руководство по управлению SDS на базе ПСХД MIND uStor
Аннотация
Гиперконвергентная среда zVirt представляет собой архитектуру вычислительных ресурсов и хранилищ, объединенных в единую платформу. Она предоставляет возможность объединять несколько серверов с локальными устройствами хранения (дисками) в единое хранилище данных, которое можно масштабировать по мере необходимости.
В этом документе объясняется, как выполнять задачи обслуживания, характерные для гиперконвергентной среды zVirt на базе ПСХД MIND uStor.
1. Настройка локального хранилища uStor
1.1. Создание OSD
Чтобы использовать локальное хранилище серверов, выполняющих роль узлов хранения в кластере ПСХД MIND uStor, на каждом из них необходимо создать или изменить конфигурационный файл с параметрами подключения, а затем выполнить процедуру подготовки локальных накопителей для запуска экземпляров службы OSD.
|
Перед использование диска, его wwid необходимо добавить в blacklist multipath:
UUID диска можно получить командой:
|
|
Описанные ниже действия необходимо выполнить на всех узлах кластера ПСХД. |
-
Подключитесь к узлу кластера по SSH.
-
Выполните подготовку выбранных локальных накопителей для запуска экземпляров службы OSD:
-
Получите список накопителей с указанием логического пути до каждого с помощью команды lsblk:
lsblk -d -o NAME,SIZE,TYPE,MODEL,ROTAПример вывода:
NAME SIZE TYPE MODEL ROTA sda 150G disk QEMU HARDDISK 1 sdb 200G disk QEMU HARDDISK 1 sdc 200G disk QEMU HARDDISK 1 sdd 100G disk iSCSI Disk 0 sr0 1024M rom QEMU DVD-ROM 1Твердотельные накопители должны иметь свойство
rota=0. При использовании виртуальных дисков ядро по умолчанию ставит для них значениеrota=1. Для изменения этого значения:-
Создайте/измените файл /etc/udev/rules.d/50-custom-scheduler.rules, добавив в него следующую строку:
ACTION=="add|change", KERNEL=="sd[a-f]", ATTR{queue/rotational}="0", ATTR{queue/scheduler}="none" (1)1 В KERNEL=="sd[a-f]"укажите нужные диски. -
Перезагрузите правила udev:
udevadm control --reload-rules udevadm trigger -
Убедитесь, что изменения применились:
lsblk -d -o NAME,SIZE,TYPE,MODEL,ROTA NAME SIZE TYPE MODEL ROTA sda 150G disk QEMU HARDDISK 0 sdb 200G disk QEMU HARDDISK 0 sdd 100G disk iSCSI Disk 0 sr0 1024M rom QEMU DVD-ROM 1
-
-
Определите по полученному списку, какие из накопителей будут использоваться для организации общего дискового хранилища.
-
Подготовьте локальные накопители в автоматическом режиме c помощью команды
ustor-disk prepare:ustor-disk prepare <DEVICE|DEVICE_LIST> (1)1 <DEVICE|DEVICE_LIST> — список, полученный на предыдущем шаге с помощью команды lsblk.Например:
ustor-disk prepare --osd_per_disk 2 /dev/sdb -
Дождитесь окончания работы команды.
-
Обновите параметры суперблоков OSD и привяжите необходимые порты:
ustor-disk update-sb <device> --bind_port <port>-
в среде zVirt для служб OSD зарезервирован диапазон портов 23005–23499;
-
каждый порт в пределах диапазона 23005–23499 должен быть уникальным для конкретной службы OSD;
-
привязка порта осуществляется параметром
--bind_port; -
после назначения портов перезапуск всех OSD-компонентов обязателен для применения изменений.
Например:
ustor-disk update-sb /dev/sdb1 --bind_port 23005 ustor-disk update-sb /dev/sdb2 --bind_port 23006Эту операцию необходимо выполнить на всех узлах кластера ПСХД для всех OSD.
-
-
Перезапустите таргет ustor на всех узлах.
systemctl restart ustor.target
-
-
Проверьте, что все накопители успешно подготовлены и доступны в кластере, с помощью команды:
ustor-cli ls-osd -lПример вывода:
ID STATE HOST TIME SIZE USED% BLOCK_SIZE REWEIGHT TAGS DATA META JOURNAL 1 up g1.vlab.local 6 99.9 G 0% 128 K 1 ssd, 200G /dev/sdb1 2 up g1.vlab.local 6 99.9 G 0% 128 K 1 ssd, 200G /dev/sdb2 3 up g2.vlab.local 3 99.9 G 0% 128 K 1 ssd, 200G /dev/sdb1 4 up g2.vlab.local 3 99.9 G 0% 128 K 1 ssd, 200G /dev/sdb2 5 up g3.vlab.local 5 99.9 G 0% 128 K 1 ssd, 200G /dev/sda1 6 up g3.vlab.local 5 99.9 G 0% 128 K 1 ssd, 200G /dev/sda2
1.2. Удаление OSD
Для удаления OSD используется команда ustor-disk purge. Команду необходимо выполнять на том узле кластера ПСХД, на котором размещен удаляемый OSD.
Синтаксис команды:
ustor-disk purge <device|device_list>
Обязательные аргументы:
-
<device|device_list>- устройство OSD, которое необходимо отключить (отмонтировать). Необходимо указать полный путь до блочного устройства в формате /dev/XX. Можно указать список устройств через пробел.
Пример:
ustor-disk purge /dev/sdb
2. Проверка статуса кластера
После успешного завершения всех процедур по настройке кластера, для проверки его состояния выполните команду ustor-cli status на любом узле кластера ПСХД.
В выводе данной команды будет отображено:
-
Суммарное количество установленных экземпляров системных служб: etcd, Monitor, OSD;
-
Суммарное количество запущенных на текущий момент экземпляров системных служб;
-
Текущий размер конфигурационной базы данных;
-
Объём неразмеченного пространства хранения кластера.
Пример вывода команды ustor-cli status:
cluster:
etcd: 3 / 3 up, leader g3.vlab.local, 6.3 M database size
mon: 3 up, master g1.vlab.local
osd: 6 / 6 up
data:
raw: 0 B used, 599.6 G / 599.6 G available
state: 0 B clean
pools: 0 / 0 active
pgs:
io:
client: 0 B/s rd, 0 op/s rd, 0 B/s wr, 0 op/s wr
В штатном режиме работы суммарное количество и количество запущенных экземпляров на текущий момент должны быть равны.
3. Управление пулами хранения
Для управления пулами хранения используется соответствующая команда утилиты ustor-cli. Утилиту можно запустить на любом узле кластера ПСХД.
3.1. Создание пула хранения
Для создания пула хранения необходимо воспользоваться командой ustor-cli create-pool.
Синтаксис команды:
ustor-cli create-pool [общие параметры] <name>
Обязательные аргументы:
-
<name>- имя создаваемого пула хранения -
--scheme <scheme>- схема защиты данных создаваемого пула хранения.Может принимать значение
replicatedилиec.
Основные параметры:
-
--ec <N>+<K>- параметр для создания пула со схемой защиты данных Erasure Coding (ec).Аргумент N+K даёт возможность передать значения параметров
pg_sizeиparity_chunks. Сумма значений аргумента равнаpg_size, а значение K из аргумента равноparity_chunks. -
--pg_size <size>- общее количество дисков для PG этого пула, т. е. количество копий для реплицированных пулов и количество дисков с данными и чётностью для пулов "ec/xor". -
--pg_count <count>- количество PG для создаваемого пула хранения. Для максимальной эффективности распределения пространства хранения на одном OSD должно быть 64-128 PG.Формула для расчёта оптимального количества PG: общее число OSD пула * 100 / pg_size. Полученное значение можно округлить до ближайшей степени 2.
Примеры:
ustor-cli create-pool Pool_Replicated --scheme replicated --pg_size 3 --pg_count 64
ustor-cli create-pool Pool_EC --ec 2+1 --pg_count 64
Проверить состояние пула хранения можно с помощью команды ustor-cli status.
Отобразить информацию о созданных пулах хранения можно с помощью команды ustor-cli ls-pool.
3.2. Изменение пула хранения
Для изменения параметров пула хранения используется команда ustor-cli modify-pool.
Синтаксис команды:
ustor-cli modify-pool <id|name> [--name <new_name>] [параметры]
Обязательные аргументы:
-
<id|name>- идентификатор или имя пула.
Основные параметры:
-
--pg_size <size>- общее количество дисков для PG этого пула, т. е. количество копий для реплицированных пулов и количество дисков с данными и чётностью для пулов "ec/xor". -
--pg_count <count>- количество PG для создаваемого пула хранения. Для максимальной эффективности распределения пространства хранения на одном OSD должно быть 64-128 PG.Формула для расчёта оптимального количества PG: общее число OSD пула * 100 / pg_size. Полученное значение можно округлить до ближайшей степени 2.
-
--parity_chunks <number>- количество блоков чётности (K) для пулов со схемой защиты данных "ec/xor".Параметр игнорируется для пулов со схемой защиты данных "replicated".
-
--f|--force- принудительное создание пула, без проверки параметров пула/OSD.
Примеры:
ustor-cli modify-pool TestPool1 --name TestPool2
ustor-cli modify-pool TestPool1 --pg_size 4 --pg_count 128
3.3. Получение информации о пуле хранения
Для получения информации о пуле хранения используется команда ustor-cli get-pool.
Синтаксис команды:
ustor-cli ls-pool <pool_name> [параметры]
Обязательные аргументы:
-
<pool_name>- имя пула.
Основные параметры:
-
--detail- получить подробную информацию о пуле хранения. -
--json- использовать формат JSON в выводе результата выполненной команды.
Пример вывода:
ustor-cli ls-pool
NAME SCHEME STATUS PGS TOTAL USED AVAILABLE USED% EFFICIENCY
Pool_Replica EC 2+1 active 16 399.8 G 0 B 399.8 G 0% 100%
|
Обратите внимание, что для работы пул должен иметь статус |
4. Управление ресурсами хранения
Для управления ресурсами хранения используется соответствующая команда утилиты ustor-cli. Утилиту можно запустить на любом узле кластера ПСХД.
4.1. Создание ресурса хранения
Для создания ресурса хранения необходимо воспользоваться командой ustor-cli create-image.
Синтаксис команды:
ustor-cli create-image <name> --pool <pool> --size <size>
Обязательные аргументы:
-
<name>- имя ресурса хранения. -
--pool <pool>- имя пула хранения. -
--size <size>- размер создаваемого ресурса хранения. По умолчанию используются байты, но возможно указание размерности (M, G, T).
Примеры:
ustor-cli create-image --size 20G Image_Test --pool Pool_Replicated
Отобразить информацию о созданных ресурсах хранения можно с помощью команды ustor-cli ls-image.
4.2. Изменение ресурса хранения
Команда ustor-cli modify-image даёт возможность изменить ряд параметров существующего ресурса хранения. Например, можно изменить размер ресурса (увеличить или уменьшить), переименовать ресурс, изменить режим использования ресурса хранения (включить или выключить режим только для чтения).
Синтаксис команды:
ustor-cli modify-image <name> --new-name <image_name> --size <size> [параметры]
Обязательные аргументы:
-
<name>- имя ресурса хранения. -
--new-name <image_name>- новое имя в случае переименования ресурса. -
--size <size>- новый размер в случае увеличения/уменьшения размера ресурса. По умолчанию используются байты, но возможно указание размерности (M, G, T).Если новый размер меньше старого, лишние данные будут удалены.
Перед уменьшением размера ресурса хранения следует изменить размер файловой системы, если она есть.
Примеры:
ustor-cli modify-image Image_Test1 --newname Image_Test2
ustor-cli modify-image Image_Test1 --size 20G
4.3. Получение информации о ресурсе хранения
Для получения информации о ресурсе хранения используется команда ustor-cli get-image.
Синтаксис команды:
ustor-cli ls-image <image_name> [параметры]
Обязательные аргументы:
-
<image_name>- имя пула.
Основные параметры:
-
--json- использовать формат JSON в выводе результата выполненной команды.
Пример вывода:
ustor-cli ls-image
NAME POOL SIZE FLAGS PARENT
Image_Test Pool_Replica 20 G -
5. Настройка iSCSI-шлюзов
Для интеграции с платформой виртуализации обычно создается iSCSI Target на кластере хранения, к которому гипервизоры подключаются как к внешней СХД. MIND uStor позволяет развернуть iSCSI-таргеты непосредственно на тех же узлах гиперконвергентной инфраструктуры. Ниже приведены шаги оптимальной настройки iSCSI в гиперконвергентной среде (когда инициаторы и таргеты находятся на одних и тех же физических узлах).
5.1. Оптимизация параметров системы для iSCSI (опционально)
Для достижения оптимальной производительности и надежности iSCSI-сервиса рекомендуется внести следующие системные настройки:
-
Тюнинг ядра (sysctl)
-
Создайте (или откройте) файл
/etc/sysctl.d/99-ustor.confи добавьте следующие параметры:fs.file-max = 8388608 fs.nr_open = 8388608 fs.aio-max-nr = 1048576 fs.epoll.max_user_watches = 2097152 vm.nr_hugepages = 3072 vm.hugetlb_shm_group = 0 vm.swappiness = 1 vm.dirty_ratio = 10 vm.dirty_background_ratio = 5 net.ipv4.tcp_rmem = 4096 87380 67108864 net.ipv4.tcp_wmem = 4096 65536 67108864 net.core.rmem_max = 134217728 net.core.wmem_max = 134217728 net.core.netdev_max_backlog = 250000 net.core.somaxconn = 65535 net.ipv4.tcp_max_syn_backlog = 65535 net.ipv4.ip_local_port_range = 1024 65535 net.ipv4.tcp_tw_reuse = 1 -
После сохранения файла примените настройки с помощью команды
sysctl --systemили перезагрузите узел (гипервизор).
-
-
Настройка iSCSI-инициатора
-
Откройте файл
/etc/iscsi/iscsid.confи убедитесь, что там установлены следующие значения:node.session.queue_depth = 1024 node.session.cmds_max = 1024 node.session.iscsi.FirstBurstLength = 262144 node.session.iscsi.MaxBurstLength = 16776192 node.conn[0].iscsi.MaxRecvDataSegmentLength = 262144 node.conn[0].iscsi.MaxXmitDataSegmentLength = 262144 ... node.session.iscsi.ImmediateData = Yes node.session.iscsi.InitialR2T = No node.session.nr_sessions = 1 node.session.xmit_thread_priority = -20 node.session.timeo.replacement_timeout = 120 -
После сохранения файла перезапустите сервис
open-iscsi:systemctl restart iscsid.service iscsi.service -
Откройте файл
/etc/multipath/conf.d/ustor.confи добавьте секцию, оптимизированную для MIND uStor:devices { device { vendor "MIND" product "uStor vhost" path_grouping_policy multibus path_checker tur path_selector "queue-length 0" features "0" hardware_handler "0" rr_weight uniform failback immediate fast_io_fail_tmo 1 dev_loss_tmo 600 no_path_retry 600 retain_attached_hw_handler yes detect_prio no flush_on_last_del yes } } -
После сохранения файла перезапустите сервис
multipathd:systemctl restart multipathd.service
-
5.2. Активация iSCSI-шлюзов и экспорт томов
| Выполните действия по предварительной подготовке перед началом экпорта томов. |
Предварительная подготовка
По умолчанию механизм формирования имени iSCSI-таргета (IQN) в uStor основывается на значении hostname шлюза iSCSI. Вследствие этого каждый отдельный таргет внутри одной установки uStor получает уникальное имя IQN, что нарушает требования среды виртуализации zVirt, предполагающей наличие единого фиксированного IQN для каждого отдельного хранилища. Для соответствия данным требованиям необходимо изменить методику генерации IQN таким образом, чтобы имена включали серийный номер массива.
Изменение режима генерации производится с использованием утилиты командной строки ustor-iscsi:
ustor-iscsi login # Войти в интерактивную консоль управления iSCSI
ustor-iscsi set-option ustor_sn
Данная команда устанавливает опцию использования serial в IQN.
-
Активация шлюзов
-
Авторизуйтесь под учетной администратора в веб-интерфейсе MIND uStor.
-
Перейдите в раздел Шлюзы iSCSI (iSCSI Gateway), далее в раздел Шлюзы (Gateways) и активируйте службу на всех узлах.
-
Нажмите иконку редактирования (карандаш) напротив Состояние и переключите состояние шлюза в Включено.
-
Сохраните изменения (галочка). Статус каждого шлюза должен измениться на Активен.

-
-
Создание порталов
-
Перейдите в раздел Шлюзы iSCSI (iSCSI Gateway), далее в раздел Порталы (Portals).
-
Выделите из списка шлюз и нажмите + Создать портал.
-
В открывшемся окне Создание портала укажите Имя, выберите из списка шлюз ISCSI, IP, определите порт и тип CHAP.
Для гиперконвергентной схемы zVirt в качестве IP укажите 127.0.0.1 для каждого узла. 

-
-
Настройка групп инициаторов
-
Перейдите в раздел Шлюзы iSCSI (iSCSI Gateway), далее в раздел Группы инициаторов на вкладку Группы узлов.
-
Нажмите + Создать.
-
В открывшемся окне Добавить группу узлов:
-
Укажите Имя для группы узлов.
-
В полях IQN и Сеть с маской укажите ANY или добавьте ограничение по IQN и IP для инициаторов.
-
Выберите Тип авторизации.

-
Нажмите Создать для подтверждения.
-
-
-
Экспорт томов
-
Перейдите в раздел Шлюзы iSCSI (iSCSI Gateway), далее в раздел Экспорты на вкладку Целевой узел.
-
Нажмите + Создать.
Для работы в гиперконвергентной среде требуется, чтобы LUN был доступен на всех узлах zVirt. -
В открывшемся окне Создание экспорта целевого узла выберите из списка шлюз iSCSI, имя портала, группу инициаторов и нажмите Далее.

-
Настройте параметры Сопоставления образов с LUN ID.

-
Нажмите Создать для подтверждения.
-
-
Настройка хранилища в zVirt
-
Нажмите .
-
Нажмите Новый домен (New Domain).
-
Задайте Имя (Name) для нового домена хранения.
-
Выберите Центр данных (Data Center) в раскрывающемся списке.
-
Выберите
Данные (Data)в качестве Функция домена (Domain Function) иiSCSIв качестве Типа хранилища (Storage Type). -
Выберите активный хост в качестве Используемый хост (Host).
-
Менеджер управления может сопоставлять iSCSI-таргеты с LUN или LUN с iSCSI-таргетами. Если выбран тип хранилища iSCSI, то в окне Новый домен хранения (New Domain) будут автоматически отображаться известные таргеты с неиспользуемыми LUN. Если таргет, который вы используете для добавления хранилища, не отображается, то для его поиска можно использовать операцию обнаружения таргетов; в противном случае перейдите к следующему шагу.
-
Нажмите Обнаружение целей (Discover Targets), чтобы задать параметры обнаружения таргетов. После того как таргеты обнаружены и вход в них выполнен, в окне Новый домен хранения (New Domain) будут автоматически отображаться таргеты с LUN, которые не используются средой.
-
В поле Адрес (Address) укажите FQDN или IP-адрес iSCSI-хоста.
-
В поле Порт (Port) укажите порт для соединения с хостом в процессе поиска таргетов. Значение по умолчанию =
3260. -
Выберите один или несколько таргетов из результатов поиска и нажмите
для одного таргета или Войти везде (Login All) для нескольких таргетов.
-
-
Нажмите
рядом с нужным таргетом. Развернется соответствующая запись с отображением всех неиспользуемых LUN, подключенных к таргету. -
Нажмите Добавить для каждого LUN, который используете для создания домена хранения.
-
Нажмите OK.
-
6. Управление сопоставлением ресурсов с блочными устройствами
В MIND uStor реализована возможность подключения к ресурсам хранения СХД с помощью технологии NBD — «сетевого блочного устройства», исполняемого в пространстве пользователя. Эта технология даёт возможность монтировать блочные устройства через стандартное сетевое соединение.
Подключение и управление устройствами NBD осуществляется с помощью утилиты ustor-nbd.
6.1. Создание локального устройства NBD
Команда ustor-nbd map даёт возможность создать локальное устройства NBD
из ресурса хранения.
Синтаксис команды:
ustor-nbd map --image <IMAGE_NAME> [параметры]
Обязательные аргументы:
-
--image <IMAGE_NAME>- имя ресурса хранения, который будет использоваться для подключения в качестве устройства NBD.
Основные параметры:
-
--nbd_timeout <number>- максимальное время выполнения любой операции чтения/записи в секундах, при превышении которого ядро остановит NBD-устройство.Допустимо установить опцию в 0, чтобы выключить ограничение времени, но в этом случае станет невозможным выключение NBD-устройства при нештатном завершении процесса ustor-nbd.
-
--logfile <PATH>- путь к файлу, в который будет осуществляться запись сообщений в процессе работы службы. -
--dev_num <NUMBER>- номер NBD-устройства после запуска службы /dev/nbd<NUMBER>.По умолчанию используется автоматический подбор номера.
Примеры:
ustor-nbd map --image Image_Test
6.2. Отключение локального устройства NBD
Команда ustor-nbd unmap даёт возможность отключить (отмонтировать) ранее подключённое устройство NBD.
Синтаксис команды:
ustor-nbd unmap <DEVICE>
Обязательные аргументы:
-
<DEVICE>- устройство NBD, которое необходимо отключить (отмонтировать). Необходимо указать полный путь до блочного устройства в формате /dev/nbdX.
Примеры:
ustor-nbd unmap /dev/nbd0
6.3. Просмотр списка подключенных устройств NBD
Команда ustor-nbd ls даёт возможность вывести информацию обо всех подключённых устройствах NBD и обслуживающих их процессах
Синтаксис команды:
ustor-nbd ls [параметры]
Основные параметры:
-
--json- использовать формат JSON в выводе результата выполненной команды.
Пример вывода:
ustor-nbd ls
/dev/nbd0
image: Image_Test
interface: nbd
pid: 486921
7. Управление подключением устройств nbd к виртуальным машинам
7.1. Подключение nbd к виртуальной машине
|
В текущей реализации присутствуют следующие ограничения:
|
-
Виртуальная машина работает на хосте с подключаемым устройством NBD.
-
Подключитесь с учетной записью root по SSH к хосту, на котором создано нужное устройство NBD.
-
Убедитесь, что NBD устройство присутствует в системе.
ustor-nbd ls /dev/nbd0 image: vm-disk1 interface: nbd pid: 486921 -
Создайте xml-представление добавляемого диска:
tee -a /root/TestDisk1.xml <<EOF <disk type='network' device='disk'> <source protocol='ustor' name='vm-disk1'/> <target dev='sdb' bus='scsi'/> (1) (2) </disk> EOF1 В качестве devукажите свободное имя блочного устройства на виртуальной машине.2 В параметре busтакже можно использовать значениеvirtio.Для проверки свободных имен устройств виртуальной машины используйте следующую команду:
virsh -c qemu:///system?authfile=/etc/ovirt-hosted-engine/virsh_auth.conf domblklist <vm-name><vm-name> - имя виртуальной машины
Нужные значения будут отображаться в столбце "Назначение".
-
Используйте virsh для подключения диска к нужной виртуальной машине.
virsh -c qemu:///system?authfile=/etc/ovirt-hosted-engine/virsh_auth.conf attach-device --live --config testVm ~/TestDisk1.xmlОжидаемый вывод выполнения команды:
Устройство успешно подключено -
В гостевой ОС убедитесь, что устройство подключено.
7.2. Отключение nbd от виртуальной машины
-
Подключитесь с учетной записью root по SSH к хосту, на котором работает нужная виртуальная машина с подключенным NBD.
-
Определите нужное имя целевого устройства виртуальной машины:
virsh -c qemu:///system?authfile=/etc/ovirt-hosted-engine/virsh_auth.conf domblklist <vm-name> (1)1 <vm-name> - имя виртуальной машины. Пример вывода:
Назначение Источник ------------------------------------------------------------------------- sdb /run/vdsm/payload/560047d1-20cd-43cd-994e-b04e54b8d765.img sdc - vda /rhev/data-center/mnt/blockSD/.../images/... sde vm-disk2 sdd vm-disk1Нужные значения отображаются в столбце "Назначение".
-
Отключите диск от ВМ:
virsh -c qemu:///system?authfile=/etc/ovirt-hosted-engine/virsh_auth.conf detach-disk <vm-name> <target-name> (1) (2)1 <vm-name> - имя виртуальной машины. 2 <target-name> - имя целевого устройства, которое необходимо отключить.