Продвинутый LVM и сетевая отказоустойчивость [364.3 + 364.4]

Рейтинг: 48.7% · 7 голосов
Специализация LPIC-3 306 (v3.0): кластеры HA (Pacemaker/Corosync), балансировка (LVS, keepalived, HAProxy), DRBD, кластерные и распределённые ФС (GFS2, OCFS2, GlusterFS, Ceph), iSCSI/multipath, advanced RAID/LVM.
Ответить
Аватара пользователя
Sergey_Sysadmin
Сообщения: 134
Зарегистрирован: 11 май 2026, 05:31

Продвинутый LVM и сетевая отказоустойчивость [364.3 + 364.4]

Сообщение Sergey_Sysadmin »

Оглавление курса (14)
  1. Введение в LPIC-3 306: высокая доступность и хранилища
  2. Концепции и теория высокой доступности [361.1]
  3. Кластеры с балансировкой нагрузки [361.2]
  4. Failover-кластеры: Corosync и Pacemaker [361.3, часть 1]
  5. Pacemaker: ресурсы, ограничения, fencing [361.3, часть 2]
  6. DRBD [362.1]
  7. Доступ к кластерному хранилищу [362.2]
  8. Кластерные файловые системы [362.3]
  9. Распределённое хранилище GlusterFS [363.1]
  10. Ceph: архитектура [363.2, часть 1]
  11. Ceph: использование и эксплуатация [363.2, часть 2]
  12. Отказоустойчивость узла: железо и сервисы [364.1]
  13. Продвинутый RAID
  14. Продвинутый LVM и сетевая отказоустойчивость [364.3 + 364.4] (вы здесь)
Урок 13. Продвинутый LVM и сетевая отказоустойчивость [364.3 + 364.4]

В кластере хранения и в HA-узлах две вещи ломаются чаще остального: диск и сетевой линк. Этот урок решает задачу администратора - сделать так, чтобы отказ одного диска или одного провода не уронил сервис. На стороне хранения мы разберём снимки и тонкие тома LVM, встроенный LVM RAID (зеркала и parity) и восстановление после сбоя. На стороне сети - объединение интерфейсов (bonding), VLAN поверх бонда, избыточные аплинки и отказоустойчивую маршрутизацию через BGP и multipath. Цель - убрать единые точки отказа (SPOF) сверху донизу.

Изображение

Как это работает

LVM - это слой между физическими дисками (PV), общим котлом ёмкости (VG) и логическими томами (LV). Снимок (snapshot) фиксирует состояние тома на момент времени по принципу copy-on-write: перед перезаписью исходного блока старая версия копируется в область снимка. Классический снимок имеет фиксированный размер, и если запись переполнит его, он инвалидируется. Поэтому в 2026 для бэкапов и клонов используют тонкие снимки.

Тонкие тома (thin) живут в пуле (thin pool). Пул выделяет блоки по факту записи, а не заранее, поэтому сумма размеров томов может превышать физическую ёмкость (overprovisioning). Тонкий снимок не требует отдельного резерва и берёт блоки из того же пула - снимок дешёвый, можно делать их пачками. Расплата - надо следить за заполнением пула, иначе запись встанет.

LVM RAID - это RAID, реализованный самим LVM поверх ядерного таргета dm-raid (тот же движок, что и mdraid, но управляется через lvm). Уровни: raid1 (зеркало), raid5/raid6 (parity), raid10. Метаданные о синхронизации хранит отдельный mirror log или встроенные субтома _rmeta. Это удобнее, чем mdadm плюс LVM сверху, потому что всё описывается одной командой и одной точкой управления.

Bonding объединяет несколько NIC в один логический интерфейс bond0. Режим active-backup держит один линк активным, остальные в горячем резерве - простая защита от обрыва провода или смерти порта коммутатора, не требует поддержки на свитче. Режим 802.3ad (LACP, mode 4) агрегирует линки в один канал с балансировкой и требует настроенного LACP на коммутаторе - даёт и отказоустойчивость, и суммарную полосу. VLAN (802.1Q) режет физическую сеть на изолированные сегменты тегами; в Linux это интерфейс bond0.100 поверх бонда.

Выше уровня L2 SPOF убирают маршрутизацией. ECMP/multipath - это несколько равноценных маршрутов до цели, трафик раскладывается по ним, при падении одного остальные подхватывают. BGP на хосте (через FRR) позволяет узлу анонсировать свой сервисный адрес сразу нескольким роутерам - падает узел, маршрут отзывается, трафик уходит на живую реплику.

Команды и примеры

Установка LVM. Debian/Ubuntu:

Код: Выделить всё

apt update && apt install -y lvm2 thin-provisioning-tools
RHEL/Fedora:

Код: Выделить всё

dnf install -y lvm2 device-mapper-persistent-data
Тонкий пул и тома поверх группы vgdata:

Код: Выделить всё

# создать тонкий пул на 50G из свободного места VG
lvcreate --type thin-pool -L 50G -n tpool vgdata

# тонкий том 200G (overprovisioning - физически пула только 50G)
lvcreate --type thin -V 200G --thinpool tpool -n app vgdata

# мгновенный тонкий снимок тома app
lvcreate --type thin -s vgdata/app -n app_snap

# следить за заполнением пула: Data% и Meta%
lvs -o lv_name,data_percent,metadata_percent vgdata
Автоматическое расширение пула при заполнении - в /etc/lvm/lvm.conf:

Код: Выделить всё

thin_pool_autoextend_threshold = 80
thin_pool_autoextend_percent = 20
LVM RAID1 (зеркало из двух PV) и raid6:

Код: Выделить всё

# зеркало
lvcreate --type raid1 -m 1 -L 100G -n mirror vgdata /dev/sdb /dev/sdc

# raid6 на четырёх дисках
lvcreate --type raid6 -L 300G -n parity vgdata /dev/sd{b,c,d,e}

# статус синхронизации и здоровье
lvs -a -o name,segtype,sync_percent,raid_mismatch_count,lv_health_status vgdata
Восстановление после отказа диска в LVM RAID:

Код: Выделить всё

# заменить выбывший PV из зеркала
lvconvert --replace /dev/sdc vgdata/mirror /dev/sdf

# принудительно пересобрать после возврата диска
lvchange --syncaction repair vgdata/parity
Bonding active-backup через systemd-networkd (RHEL 10, Fedora). Файл /etc/systemd/network/bond0.netdev:

Код: Выделить всё

[NetDev]
Name=bond0
Kind=bond
[Bond]
Mode=active-backup
MIIMonitorSec=100ms
PrimaryReloadPolicy=always
А привязка интерфейсов и адрес - в .network файлах, после чего networkctl reload.

То же через NetworkManager (универсально на RHEL/Fedora):

Код: Выделить всё

nmcli con add type bond ifname bond0 bond.options "mode=802.3ad,miimon=100,lacp_rate=fast"
nmcli con add type ethernet ifname enp1s0 master bond0
nmcli con add type ethernet ifname enp2s0 master bond0
# VLAN 100 поверх бонда
nmcli con add type vlan ifname bond0.100 dev bond0 id 100
Debian/Ubuntu через netplan (/etc/netplan/01-bond.yaml):

Код: Выделить всё

network:
  version: 2
  bonds:
    bond0:
      interfaces: [enp1s0, enp2s0]
      parameters:
        mode: 802.3ad
        lacp-rate: fast
        mii-monitor-interval: 100
  vlans:
    bond0.100:
      id: 100
      link: bond0
      addresses: [10.0.100.5/24]
Применить: netplan apply. Проверка бонда: cat /proc/net/bonding/bond0.

Multipath-маршрут (ECMP) и BGP-анонс через FRR:

Код: Выделить всё

# два равноценных next-hop
ip route add 10.20.0.0/16 nexthop via 10.0.100.1 nexthop via 10.0.100.2

# в /etc/frr/frr.conf - анонс сервисного /32 двум апстримам
router bgp 65010
 neighbor 10.0.100.1 remote-as 65000
 neighbor 10.0.100.2 remote-as 65000
 address-family ipv4 unicast
  network 10.50.0.7/32
 exit-address-family
Частые грабли
  • Переполнение thin-пула. Когда Data% дойдёт до 100, запись во ВСЕ тонкие тома пула встанет (или начнётся повреждение fs). Мониторьте data_percent и metadata_percent отдельно - метаданные кончаются раньше, чем кажется.
  • Метаданные пула малы по умолчанию. На больших пулах их не хватает - задавайте размер явно через --poolmetadatasize при создании.
  • Снимок старого образца переполняется и инвалидируется незаметно. Для бэкапов берите тонкий снимок, а не классический.
  • 802.3ad без LACP на коммутаторе. Если на свитче не поднят LAG, бонд mode 4 не агрегируется - линк болтается. Для случая, когда свитч трогать нельзя, берите active-backup.
  • MII-мониторинг видит только физический линк. Провод цел, а сосед молчит - active-backup не переключится. Для контроля сквозной достижимости используйте ARP-мониторинг (arp_interval/arp_ip_target).
  • Бонд из портов одного коммутатора. Свитч - это SPOF. Раскидывайте линки бонда по двум свитчам (MLAG/stacking на их стороне).
  • ECMP с фиксированным хешем рвёт сессии при изменении числа путей. Учитывайте, что добавление/удаление next-hop переразложит потоки.
  • LVM RAID требует device-mapper-persistent-data (или thin-provisioning-tools) для проверки/ремонта - без пакета восстановление не запустится.
Мини-лаба
  • Соберите VG из четырёх дисков (можно loop-устройства через losetup). Создайте тонкий пул на 2G и тонкий том на 5G - убедитесь, что overprovisioning разрешён.
  • Запишите данные, сделайте тонкий снимок, удалите часть файлов в исходном томе и откатитесь к снимку через lvconvert --merge.
  • Наполняйте пул, пока data_percent не подойдёт к 80, и проверьте срабатывание autoextend.
  • Создайте LVM raid1 из двух PV, имитируйте отказ (vgreduce --removemissing после удаления устройства) и замените диск через lvconvert --replace.
  • Поднимите bond0 в режиме active-backup на двух интерфейсах, проверьте /proc/net/bonding/bond0, затем выключите активный линк (ip link set down) и убедитесь в переключении.
  • Поверх бонда заведите VLAN 100, назначьте адрес и проверьте связность.
  • Добавьте два equal-cost маршрута до тестовой сети и проверьте балансировку через ip route get.
Контрольные вопросы
  • Чем тонкий снимок отличается от классического по механике copy-on-write и расходу места?
  • Какие два параметра lvs надо мониторить у thin-пула и что произойдёт при достижении 100% каждого из них?
  • В каком случае bonding в режиме 802.3ad НЕ даст агрегации, и какой режим выбрать, если коммутатор настроить нельзя?
  • Почему MII-мониторинга недостаточно для обнаружения некоторых сбоев и что использовать вместо/вместе с ним?
  • Как восстановить LVM raid1 после физического отказа одного из дисков - какими командами?
  • Как с помощью BGP на хосте убрать SPOF на уровне маршрутизации сервисного адреса?
👍3 ❤️ 🔥 😄 🤔1
Аватара пользователя
mehayes3
Сообщения: 1
Зарегистрирован: 27 май 2026, 07:44

Re: Продвинутый LVM и сетевая отказоустойчивость [364.3 + 364.4]

Сообщение mehayes3 »

А если тонкий снимок и исходный том в одном пуле, и пул кончился - оба умрут разом? Звучит как способ потерять и данные, и бэкап одним махом.
👍3 ❤️1 🔥 😄 🤔
Аватара пользователя
tor_nerd
Сообщения: 1
Зарегистрирован: 06 июн 2026, 06:25

Re: Продвинутый LVM и сетевая отказоустойчивость [364.3 + 364.4]

Сообщение tor_nerd »

Поднял bond 802.3ad, а на свитче LAG забыл включить - линк то есть, то нет, час ловил. Теперь сначала проверяю /proc/net/bonding и LACP на коммутаторе.
👍 ❤️ 🔥 😄 🤔
Ответить
← Предыдущая глава
Продвинутый RAID

Все главы курса «LPIC-3 306: высокая доступность и хранилища»

Поделиться темой: ✈ Telegram VK
  • Похожие темы

Вернуться в «LPIC-3 306: высокая доступность и хранилища»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя