Данная статья связана с
Данная статья применима к:
- 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
Аннотация
нструмент реализован как модуль ядра, и для сетевого взаимодействия использует протокол TCP. Для корректной работы DRBD необходимо наличие ресурсов одинакового объема на всех узлах.
Инструмент поддерживает три режима репликации данных между узлами:
Параметры стенда
Для развертывания кластера используются два подсоединенных к сети компьютера (узла) с установленной ОС Astra Linux. DRBD должен быть запущен на обоих узлах.
| Параметр | Узел 1 | Узел 2 |
|---|---|---|
| Имя узла | drbd1 | drbd2 |
| IP-адрес узла | 192.168.23.101 | 192.168.23.102 |
IP-адреса узлов должны быть постоянными (см. Настройка разрешения имен и статических IP-адресов). В целях тестирования можно использовать раздел Настройка разрешения имен в тестовом окружении.
Установка DRBD
На всех узлах:
- Установить пакет:
sudo apt install drbd-utils - Подключить модуль ядра:
sudo modprobe drbd
Настройка репликации
На всех узлах:
- Перед началом настройки сделать резервную копию конфигурационного файла
global_common.confинструментомcp:cd /etc/drbd.dsudo cp global_common.conf global_common.conf.backupили при помощи графического файлового менеджера
Fly.Для манипуляций с файлами в каталоге
/etcнеобходимы права суперпользователя (sudo), а при включенном мандатном управлении целостностью (МКЦ) — права суперпользователя с высоким уровнем целостности. - Указать настройки конфигурации виртуального блочного устройства 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 dumpall - создать метаданные:
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:man drbdadm
Добавление ресурсов
На всех узлах:
- Указать реплицируемый дисковый ресурс в
/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— указание хранить служебные метаданные на этом же узле.
- Инициализировать хранилище метаданных:
sudo drbdadm create-md r0 - Задействовать созданный ресурс:
sudodrbdadmup r0 - Включить в автозагрузку модуль ядра
drbd:echo drbd | sudo tee /etc/modules-load.d/drbd.conf
Далее:
- Сделать один из узлов, например
drbd1, первичным выполнив на нем:sudo drbdadm -- --overwrite-data-of-peer primary all - На вторичном узле
drbd2 проверить процесс репликации:watch -n1 cat /proc/drbdОстановить
watchможно сочетанием клавиш <Ctrl+C> - Указать файловую систему для созданного виртуального блочного устройства на первичном узле:
sudo mkfs.ext4 /dev/drbd0 - Примонтировать устройство на первичном узле:
sudo mount /dev/drbd0 /srv
Просмотр списка задействованных ресурсов DRBD:
systemctl status drbd
Проверка работы
- Скопировать несколько файлов на узел, установленный как основной, в каталог
/srv:sudo cp -r /etc/default /srv - Отмонтировать каталог
/srv:sudo umount /srv - Установить первичному узлу роль вторичного:
sudo drbdadm secondary r0 - Установить вторичному узлу роль первичного:
sudo drbdadm primary r0 - Смонтировать ранее отмонтированный раздел:
sudo mount /dev/drbd0 /srv - Убедиться в наличии ранее скопированных файлов в каталоге
/srv:ls /srv/etc/default
DRBD и OCFS2
Начиная с версии DRBD-8.0.08 инструмент может задействовать оба узла как первичные, что дает возможность использовать кластерные файловые системы, например OCFS2.
OCFS2 — файловая система, обеспечивающая разделяемое использование одного и того же хранилища несколькими системами.
Настройка DRBD с OCFS2
На всех узлах:
- Установить пакет
ocfs2-tools:sudo apt install ocfs2-tools - Указать параметры настроек
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" — имя создаваемого раздела.
Далее на всех узлах:
- Указать параметры в в
/etc/default/o2cb:O2CB_ENABLED=trueO2CB_BOOTCLUSTER=ocfs2cluster - Инициализировать новый кластер:
o2cb register-cluster ocfs2cluster - Включить и добавить в автозапуск:
systemctl enable drbd o2cb ocfs2systemctl start drbd o2cb ocfs2 - Добавить новые точки монтирования в
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.
Или в информации о работе каждого из улов:
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 :
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 вручную необходимо:
- Принудительно перевести узел, на который осуществляется резервирование в состояние
secondary:sudo drbdadm secondary all - Отключить данный узел от сети:
sudo drbdadm disconnect all - Переподключить резервируемый узел игнорируя последние записи в метаданных:
sudo drbdadm -- --discard-my-data connect all - Второй узел принудительно перевести в состояние
:sudo drbdadm primary all - Отключить второй узел:
sudo drbdadm disconnect all - Переподключить второй узел для начала синхронизации. В процессе синхронизации служебные метаданные будут перезаписаны:
sudo drbdadm connect all - Убедиться в том что узлы запущены в корректных режимах: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