Распределённое хранилище LINSTOR
Настройка блочного хранилища на базе DRBD для кластеров Docker Swarm (только для self-hosted).
Обзор
LINSTOR от LINBIT обеспечивает репликацию блочного хранилища на базе DRBD между узлами Skitflow Swarm. После включения сервисы могут монтировать распределённые тома, которые переживают потерю одного узла без необходимости разворачивать кластер базы данных для каждого приложения.
LINSTOR доступен только в self-hosted режиме.
Требования
- ОС: Ubuntu 22.04+, Debian 12+, Rocky Linux 9, AlmaLinux 9, RHEL 9 или CentOS Stream 9.
- Блочные устройства: минимум один нераспределённый диск на каждом узле (например,
/dev/sdb). Skitflow не затрагивает корневой диск даже при включённомforceWipe. - Сеть: порты TCP 7000 (репликация DRBD) и 3370 (API контроллера LINSTOR) должны быть открыты между узлами.
- SSH-доступ sudo / root (Skitflow уже требует этого для стандартной установки сервера).
Включить LINSTOR на узле
LINSTOR работает поверх Docker Swarm, поэтому узел может включить его только после того, как вошёл в ваш Swarm-кластер. Сначала добавьте сервер в кластер (см. Кластер) — LINSTOR предлагается только на серверах, которые уже являются членами Swarm.
Когда узел стал членом кластера, включите LINSTOR на его вкладке LINSTOR. Первый узел, где его включают, становится контроллером LINSTOR (совмещённый контроллер + спутник); каждый следующий узел подключается как спутник.
Когда узел готов, он отображается в состоянии Ready вместе со своей ролью, а его пул хранилища становится доступен для размещения реплицируемых томов.
Использование тома LINSTOR в сервисе Compose
В вашем docker-compose.yml:
services:
api:
image: my/api:latest
volumes:
- my-data:/var/lib/data
volumes:
my-data:
driver: linbit
driver_opts:
FS: ext4
size-kib: "10240"
replicas: "2"replicas: "2"размещает том на 2 узлах; Swarm выбирает, где запустить контейнер, LINSTOR маршрутизирует I/O.size-kib— размер тома в кибибайтах.FS— файловая система поверх устройства DRBD (ext4/xfs).
Дашборд кластера
Перейдите на /dashboard/swarm/linstor:
- KPI-карточки: общая ёмкость, использованная ёмкость, количество ресурсов, работающие узлы.
- Таблица узлов: роль, статус онлайн, свободное / общее место по каждому узлу.
- Таблица томов: количество реплик, признак использования.
- График ёмкости во времени (1ч / 24ч / 7д).
- Пропускная способность DRBD I/O, диаграмма состояния репликации, топ томов, тепловая карта размещения.
Отключить LINSTOR на узле
- Спутник: выключите переключатель, при необходимости сотрите данные. Двойное подтверждение защищает от случайной потери данных.
- Контроллер с активными спутниками: диалог откажет и перечислит спутников для отключения. Контроллер можно удалить только после того, как он останется последним узлом.
Устранение неполадок
DRBD kernel module failed to load
Модуль DRBD требует перезагрузки ядра при первой установке (DKMS пересобирает модуль под новое ядро).
sudo rebootЗатем нажмите Retry на вкладке LINSTOR Storage.
Controller unreachable
Дашборд кластера показывает это, когда сервис LINSTOR-контроллера недоступен. Существующие тома продолжают обслуживать I/O через DRBD — только создание / удаление новых томов недоступно.
Контроллер устанавливается на хост как systemd-сервис (а не Docker-контейнер):
ssh <controller-node>
systemctl status linstor-controller
journalctl -u linstor-controller --no-pager -n 50Если сервис остановлен, запустите его и перепроверьте обзор кластера:
sudo systemctl start linstor-controllerНесоответствие свободного места в пуле
LINSTOR внутренне оперирует KiB; Skitflow конвертирует в байты для отображения. Если размеры пулов расходятся в 1024 раза, вероятно, используется сборка до 0.33.0 — обновитесь.
Ограничения (v1)
- Один пул хранилища на узел (
skitflow-poolна LVM thin). - Единственный контроллер (без HA-отказоустойчивости контроллера).
- Бездисковые узлы DRBD не поддерживаются.
- Нет UI для создания томов — управление томами только через
docker-compose.yml. - Снапшоты и резервное копирование пока не доступны в UI.
- Метрика
replicationKbpsявляется заглушкой (drbdsetup --jsonне предоставляет числовое поле скорости).