Download PDF
Download page Создание и настройка хранилищ на базе сетевых блочных устройств.
Создание и настройка хранилищ на базе сетевых блочных устройств
Оглавление
Описание тестовой среды
В данном примере в качестве тестовой среды выступает система виртуализации QEMU/KVM в ОС СН Astra Linux Special Edition 1.7.2.
При этом описываемые действия по созданию и настройке гостевых машин выполняются в программе Virt-manager версии 2.2.1-3.
Для организации программной системы хранения данных будет развернута гостевая машина (с наименованием iscsi-target
) со следующими параметрами:
- количество процессоров: 1;
- размер памяти (ОЗУ): 2 ГБ;
- один диск для размещения файлов ОС Astra Linux объемом 12 ГБ;
- два дополнительных диска для эмуляции сетевых блочных устройств объемом 24 ГБ.
При этом вычислительные ресурсы тестового стенда должны обеспечить одновременное функционирование гостевой машины iscsi-target
и гостевой машины виртуализации, на которой установлены программные компоненты ПК СВ (далее по тексту – фронтальной машины).
В этом примере в качестве установочного носителя используется файл образа технологического установочного диска 1.7.2-11.08.2022_15.28.iso
(установочный диск Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) с интегрированным обновлением БЮЛЛЕТЕНЬ № 2022-0819SE17 (оперативное обновление 1.7.2)).
1. Создание и настройка программной СХД (iSCSI-target)
Гостевой машине, предоставляющей блочные данные по протоколу iSCSI, будет присвоен IP-адрес: 172.16.1.41 и сетевое имя iscsi-target
.
Значение IP-адреса гостевой машины iscsi-target
выбрано исходя из диапазона, установленного при создании виртуальной сети в Virt-Manager (172.16.1.0 /24) – см. ПК СВ «Брест» в пределах одного сервера (сервисный режим).
- Создать гостевую машину
iscsi-target
. Действия по созданию гостевой машины аналогичны действиям, описанным в статье Создание гостевой машины (за исключением пункта установки дополнительного оборудования — канал SPICE добавлять не нужно). При этом необходимо установить следующие параметры гостевой машины:- количество процессоров: 1;
- размер памяти (ОЗУ): 2 ГБ;
объем диска для размещения ОС: 12 ГБ.
Диски для эмуляции сетевых блочных устройств будет добавлены позже.
Для организации системы хранения в ПК СВ «Брест» требуется выделение как минимум двух сетевых блочных устройств.
В гостевой машине
iscsi-target
установить операционную систему специального назначения "Astra Linux Special Edition" РУСБ.10015-01. При этом следует учитывать следующие особенности установки:- на странице Установка базовой системы выбрать для установки ядро
linux-5.15-generic
; - на странице Выбор программного обеспечения выбрать пункт Средства удаленного подключения SSH;
- на странице Дополнительные настройки ОС выбрать Базовый уровень защищенности "Орел";
- на странице Дополнительные настройки ОС выбрать пункт Запрет автонастройки сети.
- на странице Установка базовой системы выбрать для установки ядро
- Настроить сетевое соединение:
в файл
/etc/network/interfaces
добавить следующие строки:auto eth0 iface eth0 inet static address 172.16.1.41 netmask 255.255.255.0 gateway 172.16.1.1
CODEзапустить в работу сетевой интерфейс командой:
sudo ifup eth0Далее можно подключиться к гостевой машине из хостовой ОС по SSH.файл
/etc/hosts
привести к следующему виду:127.0.0.1 localhost 172.16.1.41 iscsi-target
CODEзадать сетевое имя гостевой машине, выполнив команду:
sudo hostnamectl set-hostname iscsi-targetСообщение об ошибке вида:sudo: unable to resolve host <предыдущее_имя_гостевой_машины>: В соединении отказано
CODEможно игнорировать (перед тем как выполнить команду инструмент командной строки
sudo
обращается к файлу/etc/hosts
чтобы определить IP-адрес используя предыдущее имя гостевой машины).
- Выключить гостевую машину
iscsi-target
. - В окне программы Virt-manager на панели инструментов окна гостевой машины
iscsi-target
нажать на кнопку [Показать виртуальное оборудование]. - Подключить к гостевой машине
iscsi-target
первый диск для эмуляции сетевого блочного устройства:- в окне параметров гостевой машины нажать на кнопку [Добавить оборудование] в левом нижнем углу;
- в открывшемся окне Добавление виртуального оборудования:
в левом поле выбрать пункт Хранилище;
в правом поле установить флаг Создать образ диска для виртуальной машины;
- задать размер диска равным 24 ГБ;
нажать на кнопку [Готово].
- в окне параметров гостевой машины нажать на кнопку [Добавить оборудование] в левом нижнем углу;
- Аналогичным образом подключить к гостевой машине
iscsi-target
второй диск для эмуляции сетевого блочного устройства. - Подключить образ установочного носителя к гостевой машине
iscsi-target
(см. Подключение образа установочного носителя к гостевой машине). - Включить гостевую машину
iscsi-target
. В ОС гостевой машины
iscsi-target
вывести перечень блочных устройств:lsblkПример вывода после выполнения команды:NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sr0 11:0 1 3,9G 0 rom vda 252:0 0 12G 0 disk ├─vda1 252:1 0 11G 0 part / ├─vda2 252:2 0 1K 0 part └─vda5 252:5 0 975M 0 part [SWAP] vdb 252:16 0 24G 0 disk vdc 252:32 0 24G 0 disk
CODEгде:
vda
– диск для размещения файлов ОС;vdb
иvdc
– диски для эмуляции сетевых блочных устройств.
В ОС гостевой машины
iscsi-target
установить консоль управления Linux-IO Target (пакетtargetcli-fb)
:sudo apt install targetcli-fbВойти в консоль управления Linux-IO Target командой:
sudo targetcliВ консоли управления вывести текущую конфигурацию командой:
lsПример вывода после выполнения команды:o- / ............................................ [...] o- backstores ................................. [...] | o- block ..................... [Storage Objects: 0] | o- fileio .................... [Storage Objects: 0] | o- pscsi ..................... [Storage Objects: 0] | o- ramdisk ................... [Storage Objects: 0] o- iscsi ............................... [Targets: 0] o- loopback ............................ [Targets: 0] o- vhost ............................... [Targets: 0] o- xen-pvscsi .......................... [Targets: 0]
CODEСоздать (зарегистрировать) блочное устройство
/dev/vdb
в разделе/backstores/block
, присвоив устройству наименование, например,storage01
:/backstores/block create storage01 /dev/vdbПример вывода после выполнения команды:Created block storage object storage01 using /dev/vdb.
CODEПроверить результат командой
ls
. Пример вывода после выполнения команды:/> ls o- / ............................................................... [...] o- backstores .................................................... [...] | o- block ........................................ [Storage Objects: 1] | | o- storage01 ........... [/dev/vdb (24.0GiB) write-thru deactivated] | | o- alua ......................................... [ALUA Groups: 1] | | o- default_tg_pt_gp ............. [ALUA state: Active/optimized] | o- fileio ....................................... [Storage Objects: 0] | o- pscsi ........................................ [Storage Objects: 0] | o- ramdisk ...................................... [Storage Objects: 0] o- iscsi .................................................. [Targets: 0] o- loopback ............................................... [Targets: 0] o- vhost .................................................. [Targets: 0] o- xen-pvscsi ............................................. [Targets: 0]
CODEСоздать цель (
target
) в разделе/iscsi
командой:/iscsi createПример вывода после выполнения команды:Created target iqn.2003-01.org.linux-iscsi.iscsi-target.x8664:sn.76c72e49ddc1. Created TPG 1. Global pref auto_add_default_portal=true Created default portal listening on all IPs (0.0.0.0), port 3260.
CODEПроверить результат командой
ls
. Пример вывода после выполнения команды:/> ls o- / ........................................................................... [...] o- backstores ................................................................ [...] | o- block .................................................... [Storage Objects: 1] | | o- storage01 ........................[/dev/vdb (24.0GiB) write-thru deactivated] | | o- alua ..................................................... [ALUA Groups: 1] | | o- default_tg_pt_gp ......................... [ALUA state: Active/optimized] | o- fileio ................................................... [Storage Objects: 0] | o- pscsi .................................................... [Storage Objects: 0] | o- ramdisk .................................................. [Storage Objects: 0] o- iscsi .............................................................. [Targets: 1] | o- iqn.2003-01.org.linux-iscsi.iscsi-target.x8664:sn.76c72e49ddc1 ...... [TPGs: 1] | o- tpg1 ................................................. [no-gen-acls, no-auth] | o- acls ............................................................ [ACLs: 0] | o- luns ............................................................ [LUNs: 0] | o- portals ...................................................... [Portals: 1] | o- 0.0.0.0:3260 ....................................................... [OK] o- loopback ........................................................... [Targets: 0] o- vhost .............................................................. [Targets: 0] o- xen-pvscsi ......................................................... [Targets: 0]
CODEСоздать LUN на основе блочного устройства, зарегистрированного в разделе
/backstores/block
/iscsi/<идентификатор_цели>/tpg1/luns/ create /backstores/block/<наименование_устройства>где:- <наименование_устройства> – в рассматриваемом примере имеет значение
"storage01"
(см. шаг 14); - <идентификатор_цели> – в рассматриваемом примере имеет значение
"iqn.2003-01.org.linux-iscsi.iscsi-target.x8664:sn.76c72e49ddc1"
(см. шаг 16).
Пример вывода после выполнения команды:
Created LUN 0
CODE- <наименование_устройства> – в рассматриваемом примере имеет значение
Проверить результат командой
ls
. Пример вывода после выполнения команды:/> ls o- / ........................................................................... [...] o- backstores ................................................................ [...] | o- block .................................................... [Storage Objects: 1] | | o- storage01 ........................[/dev/vdb (24.0GiB) write-thru deactivated] | | o- alua ..................................................... [ALUA Groups: 1] | | o- default_tg_pt_gp ......................... [ALUA state: Active/optimized] | o- fileio ................................................... [Storage Objects: 0] | o- pscsi .................................................... [Storage Objects: 0] | o- ramdisk .................................................. [Storage Objects: 0] o- iscsi .............................................................. [Targets: 1] | o- iqn.2003-01.org.linux-iscsi.iscsi-target.x8664:sn.76c72e49ddc1 ...... [TPGs: 1] | o- tpg1 ................................................. [no-gen-acls, no-auth] | o- acls ............................................................ [ACLs: 0] | o- luns ............................................................ [LUNs: 0] | | o- lun0 .................... [block/storage01 (/dev/vdb) (default_tg_pt_gp)] | o- portals ...................................................... [Portals: 1] | o- 0.0.0.0:3260 ....................................................... [OK] o- loopback ........................................................... [Targets: 0] o- vhost .............................................................. [Targets: 0] o- xen-pvscsi ......................................................... [Targets: 0]
CODE- В рассматриваемом примере контроль доступа не требуется, поэтому его можно отключить:
переместиться на ветку
/iscsi/<идентификатор_цели>/tpg1
:cd /iscsi/<идентификатор_цели>/tpg1где <идентификатор_цели> – в рассматриваемом примере имеет значение"iqn.2003-01.org.linux-iscsi.iscsi-target.x8664:sn.76c72e49ddc1"
(см. шаг 16).В консоли управления нажатие клавиши <Tab> автоматически дополняет текущую команду или путь к ветке дерева конфигурации, если возможен только один вариант.
отключить использования списков управления доступом (ACL) командой:
set attribute generate_node_acls=1Пример вывода после выполнения команды:Parameter generate_node_acls is now '1'.
CODEнастроить работу цели в demo-режиме (без аутентификации, видимым и доступным для всех) командой:
set attribute demo_mode_write_protect=0Пример вывода после выполнения команды:Parameter demo_mode_write_protect is now '0'.
CODE
- Повторить шаги 14 – 20 для блочного устройства
/dev/vdc
(при выполнении действий шага 14 присвоить устройству наименование, например,storage02
). Выполнить сохранение настроек:
/ saveconfigПример вывода после выполнения команды:Last 10 configs saved in /etc/rtslib-fb-target/backup. Configuration saved to /etc/rtslib-fb-target/saveconfig.json
CODEВыйти из консоли управления:
exit
В консоли управления Linux-IO Target, используемой в ПК СВ версии 3.2, введена система бэкапов конфигурации, и, в связи с этим, после перезагрузки сохраненная конфигурация не загружается автоматически.
На текущий момент после перезагрузки конфигурацию необходимо восстанавливать командой:
sudo targetcli restoreconfig
Пример вывода после выполнения команды:
Configuration restored from /etc/rtslib-fb-target/saveconfig.json
Для того чтобы автоматизировать восстановление конфигурации, необходимо выполнить действия, описанные ниже.
Создать службу
target
, сформировав unit-файл, например с помощью тестового редактораnano
, для этого выполнить команду:В открывшемся текстовом редакторе добавить следующие строки:sudo nano /lib/systemd/system/target.service
[Unit] Description=Restore LIO kernel target configuration Requires=sys-kernel-config.mount After=sys-kernel-config.mount network.target local-fs.target [Service] Type=oneshot RemainAfterExit=yes ExecStart=/usr/bin/targetctl restore ExecStop=/usr/bin/targetctl clear SyslogIdentifier=target [Install] WantedBy=multi-user.target
CODEПосле этого сохранить unit-файл и закрыть текстовый редактор.
Перезагрузить список служб командой:
sudo systemctl daemon-reloadДобавить службу
target
в автозагрузку командой:sudo systemctl enable targetПример вывода после выполнения команды:Created symlink /etc/systemd/system/multi-user.target.wants/target.service → /lib/systemd/system/target.service.
CODEДля проверки следует перезагрузить гостевую машину
iscsi-target
и вывести информацию о состоянии службыtarget
:sudo systemctl status targetПример вывода после выполнения команды:● target.service - Restore LIO kernel target configuration Loaded: loaded (/lib/systemd/system/target.service; enabled; vendor preset: enabled) Active: active (exited) since Mon 2023-03-20 16:28:26 MSK; 9min ago Process: 577 ExecStart=/usr/bin/targetctl restore (code=exited, status=0/SUCCESS) Main PID: 577 (code=exited, status=0/SUCCESS)
CODE
2. Подключение сетевых блочных устройств к ПК СВ (настройка iSCSI-initiator)
Действия, описанные в данном разделе, выполняются в ОС фронтальной машины.
Установить пакет
open-iscsi
:sudo apt install open-iscsiВ конфигурационном файле
/etc/iscsi/iscsid.conf
для параметраnode.startup
установить значениеautomatic:
node.startup = automatic
CODEЗапустить службу клиента (iSCSI-initiator):
sudo systemctl start iscsiВыполнить сканирование для поиска целей (iSCSI-target):
sudo iscsiadm -m discovery -t st -p 172.16.1.41где172.16.1.41
– IP-адрес гостевой машиныiscsi-target
.Пример вывода после успешного выполнения команды:
172.16.1.41:3260,1 iqn.2003-01.org.linux-iscsi.iscsi-target.x8664:sn.76c72e49ddc1 172.16.1.41:3260,1 iqn.2003-01.org.linux-iscsi.iscsi-target.x8664:sn.85eebbd1f098
CODEПодключить найденные цели (iSCSI-target):
sudo iscsiadm -m node -lПример вывода после успешного выполнения команды:Logging in to [iface: default, target: iqn.2003-01.org.linux-iscsi.iscsi-target.x8664:sn.76c72e49ddc1, portal: 172.16.1.41,3260] (multiple) Logging in to [iface: default, target: iqn.2003-01.org.linux-iscsi.iscsi-target.x8664:sn.85eebbd1f098, portal: 172.16.1.41,3260] (multiple) Login to [iface: default, target: iqn.2003-01.org.linux-iscsi.iscsi-target.x8664:sn.76c72e49ddc1, portal: 172.16.1.41,3260] successful. Login to [iface: default, target: iqn.2003-01.org.linux-iscsi.iscsi-target.x8664:sn.85eebbd1f098, portal: 172.16.1.41,3260] successful.
CODEДля проверки выполнить команду:
sudo lsblkПример вывода после выполнения команды:NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 24G 0 disk sdb 8:16 0 24G 0 disk sr0 11:0 1 1024M 0 rom vda 252:0 0 64G 0 disk ├─vda1 252:1 0 63G 0 part / ├─vda2 252:2 0 1K 0 part └─vda5 252:5 0 975M 0 part [SWAP]
CODEгде в качестве локальных блочных устройств
sda
иsdb
выступают сетевые блочные устройства, предоставляемые программной СХД (гостевой машинойiscsi-target
).На блочном устройстве
sda
создать раздел для размещения данных. Для этого запустить инструмент командной строкиfdisk
в интерактивном режиме:sudo fdisk /dev/sdaПри появлении приглашения для ввода вида:
Command (m for help):
CODEввести "n" (подготовить конфигурацию нового раздела) и нажать клавишу <Enter>. Значения всех запрашиваемых параметров оставить без изменений (сразу нажимать клавишу <Enter>).
Пример вывода после завершения настройки параметров раздела:Created a new partition 1 of type 'Linux' and of size 24 GiB.
CODEПри появлении приглашения для ввода вида:
Command (m for help):
CODEввести "w" (записать на блочное устройство конфигурацию нового раздела) и нажать клавишу <Enter>.
Пример вывода после завершения настройки параметров раздела:
The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks.
CODEПосле этого интерактивный режим работы инструмента командной строки
fdisk
завершится.Создать файловую систему
ext4
в разделеsda1
:sudo mkfs.ext4 /dev/sda1Пример вывода после успешного выполнения команды:Allocating group tables: done Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done
CODEПовторить шаги 7 – 10 для блочного устройства
sdb
.
3. Создание (регистрация) хранилищ в веб-интерфейсе ПК СВ
3.1. Создание системного хранилища
- В веб-интерфейсе ПК СВ в меню слева выбрать пункт меню Хранилище — Хранилища и на открывшейся странице Хранилища нажать на кнопку [+], а затем в открывшемся меню выбрать пункт Создать.
- На открывшейся странице Создать хранилище:
- в поле Название задать наименование хранилища;
- в выпадающем списке Тип хранилища выбрать значение Filesystem - qcow2 mode;
- установить флаг Система;
- нажать на кнопку [Создать].
- Дождаться когда на странице Хранилища для созданного хранилища в поле Статус будет установлено значение ON.
В представленном примере системному хранилищуfile-ds_system
присвоен идентификатор100
.
3.2. Создание хранилища образов
- В веб-интерфейсе ПК СВ в меню слева выбрать пункт меню Хранилище — Хранилища и на открывшейся странице Хранилища нажать на кнопку [+], а затем в открывшемся меню выбрать пункт Создать.
- На открывшейся странице Создать хранилище:
- в поле Название задать наименование хранилища;
- в выпадающем списке Тип хранилища выбрать значение Filesystem - qcow2 mode;
- установить флаг Образы;
- нажать на кнопку [Создать].
- Дождаться когда на странице Хранилища для созданного хранилища в поле Статус будет установлено значение ON.
В представленном примере хранилищу образовfile-ds_images
присвоен идентификатор101
.
4. Монтирование сетевых блочных устройств к каталогам хранилищ
Действия, описанные в данном разделе, выполняются в ОС фронтальной машины.
В файл
/etc/fstab
добавить следующие строки:/dev/sda1 /var/lib/one/datastores/100 ext4 _netdev,errors=remount-ro 0 1 /dev/sdb1 /var/lib/one/datastores/101 ext4 _netdev,errors=remount-ro 0 1
CODEтаким образом в разделе
sda1
будет размещено системное хранилище, а в разделеsdb1
– хранилище образов.Выполнить монтирование командой:
sudo mount -aРезультатом выполнения команды должен быть пустой вывод без ошибок.- Выполнить перезагрузку.
На каталоги созданных хранилищ назначить владельцем пользователя
oneadmin
. Для этого последовательно выполнить команды:sudo chown oneadmin:oneadmin /var/lib/one/datastores/100
sudo chown oneadmin:oneadmin /var/lib/one/datastores/101
- В веб-интерфейсе ПК СВ в меню слева выбрать пункт меню Хранилище — Хранилища и на открывшейся странице Хранилища убедиться в том, что созданные хранилища имеют актуальный размер.
5. Проверка работы хранилищ
Для проверки работы созданных хранилищ можно выполнить действия по развертыванию ВМ. Для этого:
- выполнить загрузку образа установочного носителя в хранилище образов – см. Загрузка установочного носителя в хранилище;
- создать образ диска виртуальной машины в хранилище образов – см. Создание диска ВМ (пустого) в хранилище;
- подготовить предварительный шаблон ВМ и выполнить установку ОС – см. Настройка шаблона для тиражирования ВМ;
- при необходимости в ОС виртуальной машины можно подключить интернет-репозитории (см. Настройка репозиториев в ВМ), установить пакет
one-context
и настроить шаблон ВМ для тиражирования (см. Настройка шаблона для тиражирования ВМ).