Как LINSTOR и DRBD сохраняют ваши данные, когда сервер умирает
Как LINSTOR и DRBD сохраняют ваши данные, когда сервер умирает
Кошмар любого bare-metal оператора: диск отказывает в 3 часа ночи. Если ваше хранилище привязано к узлу (local-path или hostPath том, закреплённый за одним узлом), вы восстанавливаетесь из бэкапа и молитесь, чтобы он был свежим. Ceph даёт репликацию, но требует 3+ выделенных storage-узла, докторскую степень по CRUSH-картам и постоянную настройку. Большинство команд либо переинвестируют в инфраструктуру хранения, либо недоинвестируют - и платят за это простоями.
Cozystack использует LINSTOR + DRBD для реплицируемого блочного хранилища. DRBD реплицирует данные на уровне блочного устройства — ниже файловой системы, ниже базы данных, ниже всего остального. Технология проверена в Linux HA-конфигурациях более двух десятилетий. LINSTOR добавляет сверху Kubernetes-native уровень оркестрации.
Как это работает
- DRBD (Distributed Replicated Block Device) синхронно зеркалирует блочные устройства между узлами. Каждая запись на Узел A немедленно записывается на Узел B, прежде чем приложение получит подтверждение.
- LINSTOR управляет ресурсами DRBD как Kubernetes StorageClasses. Когда PVC запрашивает хранилище, LINSTOR создаёт DRBD-том, выбирает узлы-реплики и управляет жизненным циклом.
- CSI Driver предоставляет тома LINSTOR как стандартные Kubernetes PersistentVolumes.
Результат: любой pod или VM, использующий StorageClass replicated, получает синхронную блочную репликацию между узлами - прозрачно.
Настройка хранилища
Шаг 1 - Подготовка дисков:
# Настройка алиаса для LINSTOR CLI
alias linstor='kubectl exec -n cozy-linstor deploy/linstor-controller -- linstor'
# Проверяем, что видит LINSTOR
linstor node list
linstor physical-storage list
Если диски не отображаются, вероятно на них остались метаданные. Очистите их:
# Используя talm (установка описана в ПОСТЕ 9)
# ВНИМАНИЕ: никогда не очищайте диск с установленной ОС (machine.install.disk) — только диски с данными.
talm -f nodes/node1.yaml wipe disk nvme0n1 nvme1n1
Шаг 2 - Создание storage pool (ZFS):
linstor physical-storage create-device-pool \
zfs node1 \
/dev/nvme0n1 /dev/nvme1n1 \
--pool-name data \
--storage-pool data
Повторите для каждого узла.
Шаг 3 - Проверка:
linstor storage-pool list
Вы должны увидеть pool data на каждом узле с доступной ёмкостью.
Шаг 4 - Использование:
Любое приложение, указывающее storageClass: replicated, теперь получает DRBD-реплицированные тома (три реплики по умолчанию). PostgreSQL, MongoDB, диски VM — все они.
# В конфигурации любого приложения:
values:
storageClass: replicated
size: 50Gi
Что происходит при отказе узла:
- DRBD обнаруживает, что узел недоступен
- Том остаётся доступным на уцелевшем узле-реплике
- Kubernetes перепланирует pod на узел, имеющий реплику
- Когда отказавший узел возвращается, DRBD автоматически синхронизируется
Без ручного вмешательства. Без восстановления из бэкапа. Без потери данных.
Документация
- Подготовка дисков: https://cozystack.ru/docs/v1.5/storage/disk-preparation/
- Шифрование дисков: https://cozystack.ru/docs/v1.5/storage/disk-encryption/
- Настройка DRBD: https://cozystack.ru/docs/v1.5/storage/drbd-tuning/
- NFS (RWX): https://cozystack.ru/docs/v1.5/storage/nfs/
Присоединяйтесь к сообществу: Telegram-группа: t.me/cozystack_ru Slack-группа: https://kubernetes.slack.com/archives/C06L3CPRVN1 (Получить инвайт на https://slack.kubernetes.io)
Ресурсы Cozystack: https://cozystack.ru https://cozystack.ru/docs/v1.5/get-started https://cozystack.ru/blog https://github.com/cozystack/cozystack
#Cozystack #LINSTOR #DRBD #Kubernetes #CloudNative #BareMetal #PrivateCloud #Storage