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

Ключ

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


Информация
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 необходимо наличие ресурсов одинакового объема на узлах

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

ПараметрУзел 1Узел 2
Имя узлаdrbd1drbd2
Статический IP-адрес узла10192.19168.1.3610.19.1.39
Присвоить статические IP-адреса узлам выполнив на них:
Command

sudo nmcli c d path 1

sudo nmcli c m path 1 ip4 <IP-адрес узла>/24 gw4
23.101192.168.23.
1 ipv4.dns 77.88.8.8  ipv4.method manual
102

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

sudo nmcli c u path 1

В качестве IP-адреса сервера DNS (параметр ipv4.dns) для примера указан адрес сервера Яндекс (77.88.8.8), который можно заменить на любой удобный адрес. Подробнее про настройку сетевых подключений см. Настройка сетевых подключений в Astra Linux.

  • Имена узлов внести в файл /etc/hosts:
    Command

    sudo sed -i '$a 10.19.1.36\tdrbd1' /etc/hosts
    sudo sed -i '$a 10.19.1.39\tdrbd2' /etc/hosts

  • Исключить указание имен узлов в строках с адресами локальной петли (127.0.0.1):
    Command

    sudo sed -i 's/^127\.0\.0\.1\s.*/127.0.0.1\tlocalhost/' /etc/hosts
    sudo sed -i '/^127\.0\.1\.1/d' /etc/hosts

  • Установка 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