Кластер высокой доступности почти всегда упирается в общее хранилище: ноды должны видеть один и тот же блочный том, чтобы переносить на нём сервисы или одновременно читать и писать. В этом уроке мы разберём, как блоки доезжают до нод по сети (Fibre Channel и iSCSI), как не потерять путь к диску при обрыве линка (multipath), и как несколько нод безопасно делят один том через распределённые блокировки DLM и кластерный LVM (lvmlockd). Это фундамент, без которого GFS2, OCFS2 и live-миграция виртуалок просто не взлетят.

Как это работает
SAN (Storage Area Network) - это сеть, по которой ноды получают доступ к диску на уровне блоков, а не файлов. Сервер видит удалённый LUN как обычный /dev/sd*, как будто диск вставлен локально. Файловую систему и разметку делает уже сам сервер. Это ключевое отличие от NAS (NFS, SMB), где сервер отдаёт готовые файлы.
Fibre Channel - это отдельная физическая сеть на оптике со своими HBA-картами, коммутаторами и зонированием. Адреса устройств - WWN (World Wide Name), 64-битные. FC дорог и быстр, живёт в энтерпрайзе. iSCSI - это тот же SCSI, но завёрнутый в обычный TCP/IP поверх Ethernet. Дешевле, гибче, работает на любой сетевухе. Сторона, которая отдаёт диск, называется target, сторона, которая подключается - initiator. Идентифицируются они через IQN (iSCSI Qualified Name) вида iqn.2026-06.ru.example:storage.disk1.
Multipath решает проблему отказа пути. Между сервером и хранилищем обычно две и более независимых линии (два HBA, два коммутатора, два контроллера массива). Без multipath ядро увидит один и тот же LUN дважды - как /dev/sdb и /dev/sdc - и не поймёт, что это один диск. Демон multipathd по уникальному WWID склеивает эти пути в одно устройство /dev/mapper/mpathX и балансирует или переключает ввод-вывод между ними. Если линк падает, ввод-вывод уходит на живой путь без потери данных.
DLM (Distributed Lock Manager) - это сервис, через который ноды договариваются, кто сейчас имеет право трогать конкретный блок или ресурс. Без общего арбитра две ноды одновременно перезапишут одни метаданные и разрушат том. DLM в Linux работает поверх corosync, берёт членство кластера оттуда и предоставляет API блокировок для GFS2, OCFS2 и lvmlockd.
Кластерный LVM нужен, потому что обычный LVM хранит метаданные в заголовках PV и кеширует их локально. Если одна нода создаст LV, другая об этом не узнает и затрёт изменения. Современный механизм - lvmlockd: он добавляет к VG блокировки через DLM (тип sanlock или dlm) и сериализует операции с метаданными между нодами. Старый clvmd считается легаси и в RHEL 10 / актуальных дистрибутивах не поставляется - для экзамена помните название, на практике это lvmlockd.
Команды и примеры
Установка инициатора iSCSI:
Код: Выделить всё
# Debian 13 / Ubuntu 24.04
apt install open-iscsi multipath-tools
# RHEL 10 / Fedora 41+
dnf install iscsi-initiator-utils device-mapper-multipathКод: Выделить всё
iscsiadm -m discovery -t sendtargets -p 192.168.50.10
iscsiadm -m node -T iqn.2026-06.ru.example:disk1 -p 192.168.50.10 -l
# -l = login, появится новый /dev/sdX
lsblk
iscsiadm -m session -P 3 # подробности активных сессийКод: Выделить всё
systemctl enable --now multipathd
multipath -llКод: Выделить всё
defaults {
user_friendly_names yes
find_multipaths yes
path_grouping_policy multibus
path_selector "round-robin 0"
}Код: Выделить всё
systemctl reload multipathd
multipath -ll # должен показать mpatha с двумя active путямиКод: Выделить всё
/lib/udev/scsi_id -g -u -d /dev/sdbКод: Выделить всё
dlm_tool status
dlm_tool ls # список lockspaceКод: Выделить всё
systemctl enable --now lvmlockd
vgcreate --shared vg_shared /dev/mapper/mpatha
# на других нодах подхватываем блокировки VG:
vgchange --lock-start vg_shared
lvcreate -L 50G -n lv_data vg_sharedКод: Выделить всё
pcs resource create dlm ocf:pacemaker:controld op monitor interval=30s clone
pcs resource create lvmlockd ocf:heartbeat:lvmlockd op monitor interval=30s clone- Забыли user_friendly_names или alias - имена /dev/mapper меняются между перезагрузками и нодами, монтирование по пути ломается. Привязывайтесь к WWID или ставьте alias в multipath.conf.
- Локальные диски попали под multipath. Без правильного blacklist multipathd может схватить системный /dev/sda. Заносите локальные WWID в секцию blacklist.
- lvmlockd без DLM или без запущенного corosync молча не стартует lockspace. Сначала кворумный кластер, потом dlm, только потом lvmlockd.
- Создали VG как обычный, а потом удивляетесь рассинхрону метаданных. Кластерный том должен быть создан с --shared, иначе блокировки не включены.
- Меняли lvm.conf, но забыли пересобрать initramfs (dracut -f на RHEL, update-initramfs -u на Debian) - корневой LV может не подняться при загрузке.
- iSCSI-сессия не восстанавливается после ребута: не включили node.startup = automatic или забыли systemctl enable iscsi.
- Пытаетесь смонтировать общий том обычной ext4/xfs на двух нодах сразу - это гарантированное разрушение. Нужна кластерная ФС (GFS2/OCFS2) или эксклюзивный доступ.
- На стенде поднимите iSCSI target (пакет targetcli-fb или tgt) и отдайте один LUN размером 1G двум виртуальным нодам.
- С обеих нод выполните discovery и login через iscsiadm, убедитесь, что появился новый блочный диск.
- Если есть две сети - подключите target по двум адресам, настройте multipath.conf и проверьте multipath -ll: должно быть два пути к одному mpath.
- Соберите минимальный кластер corosync+pacemaker на двух нодах, поднимите ресурсы dlm и lvmlockd клонами.
- Создайте VG командой vgcreate --shared поверх /dev/mapper/mpatha, на второй ноде сделайте vgchange --lock-start.
- Создайте LV и положите на него GFS2, смонтируйте одновременно на обеих нодах, запишите файл с одной - проверьте на другой.
- Оборвите один путь (отключите линк или ifdown) и убедитесь, что ввод-вывод не прервался, а multipath -ll показал failed path.
- Чем принципиально отличается доступ к хранилищу через SAN от NAS и на каком уровне работает каждый?
- Что такое WWID и почему multipathd использует именно его, а не имя устройства /dev/sd*?
- Какие компоненты должны быть запущены и в каком порядке, чтобы lvmlockd смог стартовать lockspace для shared VG?
- В чём разница между clvmd и lvmlockd и что из этого актуально в 2026 году?
- Что произойдёт, если смонтировать обычную xfs с общего LUN на двух нодах одновременно, и как этого избежать?
- Какую роль играет corosync для работы DLM и откуда DLM берёт информацию о членстве в кластере?