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

Ключ

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


Информация
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 обеспечивает репликацию на удалённый узел содержимого локального блочного устройства; 
  • DRBD реплицирует данные только с одного узла на другой, масштабирование возможно при использовании 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.39

Настройка сетевых подключений

  • При необходимости обратиться к справочной странице настройка сетевых подключений в Astra Linux
  • На обоих узлах указать адреса узлов в /etc/hosts:
    Блок кода
    127.0.0.1 localhost
    10.19.1.36 drbd01
    10.19.1.39 drbd02
  • Перезапустить сетевую службу:
    Command
    service network restart
  • 102

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

    Установка DRBD

    На всех

    Установка DRBD

    На обоих узлах:

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

      sudo apt install drbd-utils


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

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

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

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

      cd /etc/drbd.d

      sudo cp global_common.conf global_common.conf.backup

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

    1. Информация

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

    На обоих узлах:

    1. Указать настройки конфигурации виртуального блочного устройства DRBD
    в 
    1. в /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

    5. для добавления


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

    Command

    drbd-overview

    Управление ресурсами

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

    systemctl status drbd

     

    Раскрыть
    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 = 192.168.23.101
           name = drbd1
       
      node:
           number = 2
           cluster = ocfs2cluster
           ip_port = 7777
           ip_address = 192.168.23.102
           name = drbd2

    Далее:
     Создать файловую систему для 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