Вы просматриваете старую версию данной страницы. Смотрите текущую версию.

Сравнить с текущим просмотр истории страницы

« Предыдущий Версия 97 Следующий »

Данная статья применима к:

  • 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-адрес узла192.168.23.101192.168.23.102

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

Установка DRBD

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

  1. Установить пакет:
    sudo apt install drbd-utils


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

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

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

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

    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 и настройкам конфигурационных файлов выполнить:

info drbd

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

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

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


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


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

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

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


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

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

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


  • уточнить роль (первичный/вторичный) узла:
    sudo drbdadm role <имя_узла>


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

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


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

     

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

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

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

  1. Указать реплицируемый дисковый ресурс в /etc/drbd.d/r0.res для ресурса r0:
    resource r0 {
     # здесь возможно указание значения параметра protocol если он не указан в global_common.conf
      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;
      }
    }

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

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

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


  2. Инициализировать хранилище метаданных:
    sudo drbdadm create-md r0


  3. Запустить службу drbd:
    sudo systemctl start drbd


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

Далее:

  1. Сделать один из узлов, наппример drbd1, первичным выполнив на нем:
    sudo drbdadm -- --overwrite-data-of-peer primary all


  2. На вторичном узле drbd2 проверить процесс репликации:
    watch -n1 cat /proc/drbd

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


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


  4. Примонтировать устройство на первичном узле:
    sudo mount /dev/drbd0 /srv


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

systemctl status drbd

 

СокращениеПараметр

cs:

 

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

st:


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

ld:


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

ds:

 

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

ns:


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

nr:

 

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

dw:

 

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

dr:


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

pe:

 

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

ua:


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

Ресурс r0 в списке блочных устройств:


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

  1. Скопировать несколько файлов на узел, установленный как основной, в каталог /srv :
    sudo cp -r /etc/default /srv


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


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


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


  5. Смонтировать ранее отмонтированный раздел:
    sudo mount /dev/drbd0 /srv


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

    /etc/default


DRBD и OCFS2

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

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

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

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

  1. Установить пакет ocfs2-tools :
    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:

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

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


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

  1. Указать параметры в в /etc/default/o2cb
    O2CB_ENABLED=true
    O2CB_BOOTCLUSTER=ocfs2cluster


  2. Инициализировать новый кластер:
    o2cb register-cluster ocfs2cluster


  3. Включить и добавить в автозапуск:
    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.

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

cat /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.

Чтобы восстановить работу DRBD необходимо:

  1. Принудительно перевести узел, на который осуществляется резервирование в состояние secondary:
    sudo drbdadm secondary all


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


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


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


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


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


  7. Убедиться в том что узлы запущены в корректных режимах:
    cat /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


  • Нет меток