Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.


Информация
titleДанная статья применима к:
  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.8)
  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.7) и РУСБ.10015-10, РУСБ.10015-17
  • Astra Linux Special Edition РУСБ.10015-37 (очередное обновление 7.7)
  • Astra Linux Special Edition РУСБ.10152-02 (очередное обновление 4.7)
  • Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6)
  • Astra Linux Special Edition РУСБ.10015-16 исп. 1 и исп. 2
  • Astra Linux Special Edition РУСБ.10265-01 (очередное обновление 8.1)
  • Astra Linux Common Edition 2.12


Аннотация

DRBD (Distributed Replicated Block Device) — это инструмент, позволяющий создавать решения для резервирования данных путем репликации блочных устройств (например, жестких дисков или томов LVM). При использовании DRBD данные, записанные на одном сервере, автоматически и синхронно копируются на другой сервер. Использование DRBD является одним из способов организации сетевого RAID-1. 

Ключевые особенности:

  • данные реплицируются сразу после того как они были изменены;
  • инструмент реализован как модуль ядра;
  • DRBD обеспечивает репликацию на удалённый узел содержимого локального блочного устройства; 
  • операция чтения всегда осуществляется только с локального узла;
  • для сетевого взаимодействия используется протокол TCP.

Каждый из узлов может функционировать как:

  • primary/первичный — узел доступен для чтения и записи данных как локальное блочное устройство;
  • secondary/вторичный — узел хранит данные, но не позволяет получить к ним локальный доступ.

Если первичный узел прекращает работу, DRBD переводит вторичный узел в режим первичного. Узлы могут взаимодействовать между собой в одном из трех режимов репликации.

Информация

Использование более двух узлов возможно только при использовании для DRBD версии 9 и выше

Режимы репликации

В терминологии DRBD режимы репликации именуются как протоколы (protocol). Протокол определяет, как данные синхронизируются между узлами, а также как обрабатываются ситуации сбоя и обеспечения целостности данных. 

Инструмент поддерживает три режима репликации данных между узлами:

  1. Protocol A  — операция записи считается завершенной, если завершена запись на локальный узел и запись передана на удаленный узел.
  2. Protocol B  — выполнены аналогичные Protocol A условия после чего удаленный узел подтвердил получение записи. 
  3. Protocol C  — выполнены аналогичные Protocol A условия после чего локальный и удаленный узлы подтвердтвердили успешное завершение записи. Обеспечивает наибольшую сохранность данных при этом наиболее ресурсоёмоктребователен к производительности дисковой системы.

Предупреждение

Protocol A рекомендуется использовать только при существенной потере производительности дисковой системы во время работы DRBD

В качестве объекта записи в DRBD выступает т.н. ресурс. Ресурс (Resource) — это реплицируемые области блочных устройств. Помимо ресурсов DRBD хранит на узлах необходимую для репликации служебную информацию (размеры блочных устройств, журналы активности и т.д.), которая именуется как метаданные (metadata).

Параметры стенда


Предупреждение
Для корректной работы DRBD необходимо наличие ресурсов одинакового объема на узлах

DRBD должен быть запущен на обоих узлах. Для развертывания кластера используются два подсоединенных к сети компьютера (узла) с установленной ОС Astra Linux. DRBD должен быть запущен на обоих узлах. 

ПараметрУзел 1Узел 2
Имя узлаdrbd1drbd2
Статический IP-адрес узла10192.19168.123.3610110192.19168.123.39102

Рекомендации по настройке сети приведены в статье Настройка разрешения имен и статических IP-адресов. В целях тестирования можно использовать раздел Настройка разрешения имен в тестовом окруженииПри необходимости воспользоваться справочной страницей Настройка сетевых подключений в Astra Linux.

Установка DRBD

На всех узлах:

  1. Установить пакет:
    Command

    sudo apt install drbd-utils


  2. Подключить модуль ядра:
    Command
    sudo modprobe drbd

Настройка репликации

На всех узлах:

  1. Перед началом настройки сделаить сделать резервную копию конфигурационного файла global_common.conf инструментом cp:
    Command

    cd /etc/drbd.d

    sudo cp global_common.conf global_common.conf.backup

    или при помощи графического файлового менеджера Fly.

    Информация

    Для манипуляций с файлами в каталоге /etc необходимы права суперпользователя (sudo), а при включенном мандатном управлении целостностью (МКЦ) — права суперпользователя с высоким уровнем целостности.


  2. Указать настройки конфигурации виртуального блочного устройства DRBD в /etc/drbd.d/global_common.conf:
    Блок кода
    global {
      usage-count no;
    }
    common {
      net {
        protocol C;
      }
    }

Настройки основного конфигурационного файла:

    • блок global содержит параметры, влияющие на работу всех ресурсов:

      • параметр usage-count отвечает за отправку статистики использования DRBD на сервера LINBIT. По умолчанию установлен в yes. Рекомендуется изменить на no;
    • блок net содержит параметры сетевого взаимодействия между узлами:

      • параметр protocol указывает используемый режим репликации.

        Информация
        DRBD допускает указание используемого протокола для ресурсов в блоке resource файлов конфигурации ресурсов (см. ниже)

Описание остальных блоков доступно в виде комментариев в самом файле конфигурации.

Управление DRBD

Для получения справки по DRBD и настройкам конфигурационных файлов выполнить:

Command
info drbd

Для управления узлами в DRBD применяется компонент drbdadm.

Основные команды:

  • проверить синтаксис настроек, указанных в файле конфигурации на ошибки:
    Command
    sudo drbdadm dump all


  • задействовать метаданные:
    Command
    sudo drbdadm create-md <имя_узла>


  • инициализировать службу на узле (инициализацию нужно проводить на всех узлах):
    Command
    sudo drbdadm up <имя_узла>

     использовать down вместо up для выключения;

  • отслеживать статус синхронизации между узлами:
    Command

    sudo drbdadm status


  • принудительно назначить узел первичным:
    Command
    sudo drbdadm primary <имя_узла>

     для назначения узла вторичным вместо primary указать secondary;

    Предупреждение

    Использование параметра --force допустимо для данной команды только при первом запуске, в противном случае данные будут утеряны


  • уточнить роль (первичный/вторичный) узла:
    Command

    sudo drbdadm role <имя_узла>


  • временно отключить узлы:
    Command
    sudo drbdadm disconnect all

    чтобы вновь включить нужно использовать connect.

    Информация

    Вместо all для drbdadm допустимо указывать имя конкретного узла

     

  • вызов справки о drbdadm :
    Command

    man drbdadm

Раскрыть
titleВозможные состояния диска

Diskless — драйверу DRBD не назначено блочное устройство;

Attaching — переходное состояние пока считываются метаданные;

Failed — переходное состояние последовавшее за I/O ошибкой локального блочного устройства, следующее возможное состояние Diskless;

Negotiating — переходное состояние пока налаживается соединение;

Inconsistent — данные непоследовательны. Это статус нового ресурса;

Outdated — данные ресурса последовательны но устарели;

DUnknown — статус используется для узла, если не доступно сетевое подключение;

Consistent — последовательные данные узла без сетевого подключения. После подключения будет решено, данные являются актуальными или устаревшими;

UpToDate — все данные в актуальном состояние. Это нормальное состояние.

Раскрыть
titleВозможный статус соединения

StandAlone — недоступна сетевая конфигурация. Этот ресурс еще не был подключен или был административно отключен (drbdadm disconnect), или сбросил сетевое подключение из за не пройденной аутентификации или split brain;

Disconnecting — временное состояние пока происходит отключение, следующее состояние StandAlone;

Unconnected — временное состояние до попытки подключения. Следующее возможное состояние WFConnection или WFReportParams;

Timeout — временное состояние после перерыва связи с узлом. Следующее возможное состояние Unconnected;

BrokenPipe — временное состояние после потери связи с узлом. Следующее возможное состояние Unconnected;

NetworkFailure — временное состояние после потери связи с партнером. Следующее возможное состояние — Unconnected;

ProtocolError — временное состояние после потери связи с партнером. Следующее возможное состояние Unconnected;

TearDown — временное состояние, узел закрывает соединение. Следующее возможное состояние Unconnected;

WFConnection — нода ожидает пока узел станет виден в сети;

WFReportParams — TCP соединение было установлено, узел ожидает первый сетевой пакет от узла;

Connected — DRBD соединение установлено, зеркалирование данных активно. Это нормальное состояние;

StartingSyncS — начата полная синхронизация, выполняется администратором. Следующее возможное состояние SyncSource или PausedSyncS;

StartingSyncT — начата полная синхронизация, выполняется администратором. Следующее возможное состояние WFSyncUUID;

WFBitMapS — частичная синхронизация начата. Следующее возможное состояние SyncSource или PausedSyncS;

WFBitMapT — частичная синхронизация начата. Следующее возможное состояние WFSyncUUID;

WFSyncUUID — синхронизация скоро начнется. Следующее возможное состояние SyncTarget или PausedSyncT;

SyncSource — синхронизация запускается, локальная узел является источником синхронизации;

SyncTarget — синхронизация запускается, локальная узел является целью синхронизации;

PausedSyncS — локальная узел источник синхронизации, но синхронизация находится в режиме паузы;

PausedSyncT — локальная узел является целью синхронизации, но синхронизация находится в режиме паузы;

VerifyS — запускается онлайн верификация, локальная узел является источником верификации;

VerifyT — запускается онлайн верификация, локальная узел является целью верификации. 

Добавление ресурсов

На всех узлах:

  1. Указать реплицируемый дисковый ресурс в /etc/drbd.d/r0.res для ресурса r0:
    Блок кода
    resource r0 {
     # здесь возможно указание значения параметра protocol если он не указан в global_common.conf
      on drbd01drbd1 { 
        device    /dev/drbd0;
        disk      /dev/sdb;
        address      address   10192.19168.123.36101:7789;
        meta-disk internal;
      }
      on drbd02drbd2 {
        device    /dev/drbd0;
        disk      /dev/sdb;
        address      address   10192.19168.123.39102:7789;
        meta-disk internal;
      }
    }

    Настройки конфигурационного файла ресурсов:

    Конфигурационный файл подробнее:

    • resource — название ресурса;
    • on <имя_узла> — описание первого узла:
      • device — блок данных, который необходимо создать;
      • disk — родительский жесткий диск;
      • address — IP-адрес и номер порта соответствующего узла;
      • meta-disk internal — указание хранить служебные метаданные на этом же узле.


  2. Инициализировать хранилище метаданных:
    Command

    sudo drbdadm create-md r0

    Запустить службу 

    Раскрыть
    titleЕсли возникает ошибка с кодом 40

    Если ранее диск был отформатирован под ext4 или использовался в массиве RAID при попытке инициализировать хранилище метаданных возникает ошибка вида:

    Command

    Device size would be truncated, which

    would corrupt data and result in

    'access beyond end of device' errors.

    You need to either

       * use external meta data (recommended)

       * shrink that filesystem first

       * zero out the device (destroy the filesystem)

    Operation refused.


    Command 'drbdmeta 0 v09 /dev/sdb internal create-md 1' terminated with exit code 40

    Удалить остаточные данные

    drbd

    :

    Command

    sudo dd if=/dev/zero of=/dev/sdb bs=1024k count=1024

    где sdb - имя диска. После этого повторно выполнить sudo drbdadm create-md <имя_ресурса>.


  3. Задействовать созданный ресурс:
    Command

    sudo drbdadm up r0 /etc/init.d/drbd start

  4. Включить в автозагрузку службу модуль ядра drbd:
    Command
    echo drbd > | sudo tee /etc/modules-load.d/drbd.conf

Далее:

  1. Сделать один из узлов, наппример drbd01drbd1, первичным выполнив на нем:
    Command

    sudo drbdadm -- --overwrite-data-of-peer primary all



  2. На вторичном узле drbd02 2 проверить процесс репликации:
    Command

    watch -n1 cat /proc/drbd

    Информация

    Остановить watch можно сочетанием клавиш <Ctrl+C>


  3. Указать файловую систему для созданного виртуального блочного устройства на первичном узле:
    Command

    sudo mkfs.ext4 /dev/drbd0


  4. Примонтировать устройство на первичном узле:
    Command

    sudo mount /dev/drbd0 /srv


Просмотр списка задействованных ресурсов DRBD:

Command

systemctl status drbd-overview

более детально:

Command

/etc/init.d/drbd status

 

Раскрыть
titleОсновные условные сокращения параметров мониторинга:
СокращениеПараметр

cs:

 

состояние соединения

st:


состояние узла (локального/удаленного)

ld:


согласованность локальных данных

ds:

 

согласованность данных

ns:


отправка по сети

nr:

 

получение по сети

dw:

 

запись на диск

dr:


чтение с диска

pe:

 

ожидание подтверждения

ua:


разблокирован (все еще нужно отправить подтверждение)
al:количество записей в журнале доступа

Проверка работы

  1. Скопировать несколько файлов на узел, установленный как основной, в каталог /srv :
    Command

    sudo cp -r /etc/default /srv


  2. Отмонтировать каталог /srv:
    Command

    sudo umount /srv


  3. Установить первичному узлу роль вторичного:
    Command

    sudo drbdadm secondary r0


  4. Установить вторичному узлу роль первичного:
    Command

    sudo drbdadm primary r0


  5. Смонтировать ранее отмонтированный раздел:
    Command

    sudo mount /dev/drbd0 /srv


  6. Убедиться в наличии ранее скопированных файлов в каталоге /srv :
    Command
    Titlels /srv

    /etc/default


DRBD и OCFS2

Начиная с версии DRBD-8.0.08 инструмент может задействовать оба узла как первичные, что дает возможность использовать кластерные файловые системы, например OCFS2.

OCFS2 — файловая система, обеспечивающая разделяемое использование одного и того же хранилища несколькими системами.

Настройка DRBD с OCFS2

На всех узлах:

  1. Установить пакет ocfs2-tools :
    Command

    sudo apt install ocfs2-tools


  2. Указать параметры настроек ocfs2-tools в основном конфигурационном файле /etc/ocfs2/cluster.conf:
    Блок кода
    cluster:
         node_count = 2
         name = ocfs2cluster
     
    node:
         number = 1
         cluster = ocfs2cluster
         ip_port = 7777
         ip_address = 10192.19168.123.36101
         name   name = drbd01drbd1
     
    node:
         number = 2
         cluster = ocfs2cluster
         ip_port = 7777
         ip_address = 10192.19168.123.39102
          name  name = drbd02drbd2

Далее:
 Создать файловую систему для drbd0:

Command

sudo mkfs.ocfs2 -L "testVol" /dev/drbd0

где "testVol" — имя создаваемого раздела.


Далее на всех узлах:

  1. Указать параметры в в /etc/default/o2cb
    Command

    O2CB_ENABLED=true
    O2CB_BOOTCLUSTER=ocfs2cluster


  2. Инициализировать новый кластер:
    Command

    o2cb register-cluster ocfs2cluster


  3. Включить и добавить в автозапуск:
    Command

    systemctl enable drbd o2cb ocfs2
    systemctl start drbd o2cb ocfs2


  4. Добавить новые точки монтирования в fstab:
    Блок кода
    /dev/drbd0 /srv ocfs2 defaults,auto,heartbeat=local 0 0

Восстановление DRBD после split brain

Split brain — это общий термин для определения ошибки в работе распределенных систем, связанной с рассинхронизацией в работе узлов. В контексте работы DRBD термин описывает состояние узлов, при котором начинается расхождение данных на ресурсах.

При возникновении split brain на обоих узлах DRBD-ресурсы находятся в режиме Primary, а состояние соединения отображается как StandAlone. Событие возникновения split brain отражается в журнале /var/log/kern.log как:

Блок кода
kernel: block drbd0: Split-Brain detected, dropping connection!

где drbd0 имя блочного устройства DRBD.

Или в информации о работе каждого из улов:

Command
Titlecat /proc/drbd
version: 8.3.11 (api:88/proto:86-96)
srcversion: F937DCB2E5D83C6CCE4A6C9 
 0: cs:StandAlone ro:Primary/Unknown ds:UpToDate/DUnknown C r-----
    ns:0 nr:1727749652 dw:1727749652 dr:0 al:0 bm:2405 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

 2: cs:StandAlone ro:Primary/Unknown ds:UpToDate/DUnknown C r-----
    ns:0 nr:348016128 dw:348016128 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

каждый из узлов отображает состояние другого как Unknown.

В состав инструмента входят компонениы для автоматического устранения split brain. Чтобы их задействовать необходимо добавить ссылку в секции handlers файла конфигурации ресурса etc/drbd.d/r0.res :

Command
resource <имя_ресурса> {  # в примере, приведенном в статье имя - r0
handlers { split-brain "/usr/lib/drbd/notify-split-brain.sh root"
# далее идут секции настройки ресурса, определенные примерами выше, например:

on drbd1 {      device    /dev/drbd0;     disk      /dev/sdb;     address   192.168.23.101:7789;     meta-disk internal;   }   on drbd2 {     device    /dev/drbd0;     disk      /dev/sdb;     address   192.168.23.102:7789;     meta-disk internal;   } }
Предупреждение

Во избежания потери данных следует заранее протестировать работу DRBD при автоматическом устранении split brain


Чтобы восстановить работу DRBD вручную необходимо:
  1. Принудительно перевести узел, на который осуществляется резервирование в состояние secondary:
    Command
    sudo drbdadm secondary all


  2. Отключить данный узел от сети:
    Command
    sudo drbdadm disconnect all


  3. Переподключить резервируемый узел игнорируя последние записи в метаданных:
    Command
    sudo drbdadm -- --discard-my-data connect all


  4. Второй узел принудительно перевести в состояние primary:
    Command
    sudo drbdadm primary all


  5. Отключить второй узел:
    Command
    sudo drbdadm disconnect all


  6. Переподключить второй узел для начала синхронизации. В процессе синхронизации служебные метаданные будут перезаписаны:
    Command
    sudo drbdadm connect all


  7. Убедиться в том что узлы запущены в корректных режимах:
    Command
    Titlecat /proc/drbd
    version: 8.3.11 (api:88/proto:86-96)
    srcversion: F937DCB2E5D83C6CCE4A6C9 
     0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r-----
        ns:0 nr:1732429880 dw:1732429880 dr:0 al:0 bm:2405 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
    
     2: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r-----
        ns:0 nr:348078352 dw:348078352 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0