Оглавление |
---|
Информация | ||
---|---|---|
| ||
Информация | ||
---|---|---|
| ||
|
Аннотация
Информация |
---|
Предупреждение |
---|
Параметры стенда
Предупреждение |
---|
Для корректной работы DRBD необходимо наличие ресурсов одинакового объема на узлах |
Для развертывания кластера используются два подсоединенных к сети компьютера (узла) с установленной ОС Astra Linux. DRBD должен быть запущен на обоих узлах.
Параметр | Узел 1 | Узел 2 |
---|---|---|
Имя узла | drbd1 | drbd2 |
Статический IP-адрес узла | 10192.19168.1.36 | 10.19.1.39 |
Настройка сетевых подключений
Присвоить статические IP-адреса узлам выполнив на них:sudo nmcli c d path 1
23.101 | 192.168.23. |
102 |
Рекомендации по настройке сети приведены в статье Настройка разрешения имен и статических IP-адресов. В целях тестирования можно использовать раздел Настройка разрешения имен в тестовом окружении.
sudo nmcli c u path 1
Имена узлов внести в файл
/etc/hosts
: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
На всех узлах:
- Установить пакет:
Command sudo apt install drbd-utils
- Подключить модуль ядра:
Command sudo modprobe drbd
Настройка репликации
На всех узлах:
- Перед началом настройки сделать резервную копию конфигурационного файла
global_common.conf
инструментомcp
:Command cd /etc/drbd.d
sudo 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 и настройкам конфигурационных файлов выполнить:
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
Раскрыть | ||
---|---|---|
| ||
Diskless — драйверу DRBD не назначено блочное устройство; Attaching — переходное состояние пока считываются метаданные; Failed — переходное состояние последовавшее за I/O ошибкой локального блочного устройства, следующее возможное состояние Diskless; Negotiating — переходное состояние пока налаживается соединение; Inconsistent — данные непоследовательны. Это статус нового ресурса; Outdated — данные ресурса последовательны но устарели; DUnknown — статус используется для узла, если не доступно сетевое подключение; Consistent — последовательные данные узла без сетевого подключения. После подключения будет решено, данные являются актуальными или устаревшими; UpToDate — все данные в актуальном состояние. Это нормальное состояние. |
Раскрыть | ||
---|---|---|
| ||
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 — запускается онлайн верификация, локальная узел является целью верификации. |
Добавление ресурсов
На всех узлах:
- Указать реплицируемый дисковый ресурс в
/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
— указание хранить служебные метаданные на этом же узле.
- Инициализировать хранилище метаданных:
Запустить службуCommand sudo drbdadm create-md r0
drbdРаскрыть 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
Удалить остаточные данные
:
Command sudo dd if=/dev/zero of=/dev/sdb bs=1024k count=1024
где
sdb
- имя диска. После этого повторно выполнитьsudo drbdadm create-md
<имя_ресурса>.
- Задействовать созданный ресурс:
Command sudo
/etc/init.d/drbd startdrbdadm
up r0 - Включить в автозагрузку службу модуль ядра
drbd:
Command echo drbd
>| sudo tee /etc/modules-load.d/drbd.conf
Далее:
- Сделать один из узлов, наппример
drbd01
drbd1
, первичным выполнив на нем:Command sudo drbdadm -- --overwrite-data-of-peer primary all
- На вторичном узле
drbd
02 2 проверить процесс репликации:Command watch -n1 cat /proc/drbd
Информация Остановить
watch
можно сочетанием клавиш <Ctrl+C> - Указать файловую систему для созданного виртуального блочного устройства на первичном узле:
Command sudo mkfs.ext4 /dev/drbd0
- Примонтировать устройство на первичном узле:
Command sudo mount /dev/drbd0 /srv
Просмотр списка задействованных ресурсов DRBD:
Command |
---|
|
более детально:
Command |
---|
|
Раскрыть | ||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||
|
Проверка работы
- Скопировать несколько файлов на узел, установленный как основной, в каталог
/srv
:Command sudo cp -r /etc/default /srv
- Отмонтировать каталог
/srv:
Command sudo umount /srv
- Установить первичному узлу роль вторичного:
Command sudo drbdadm secondary r0
- Установить вторичному узлу роль первичного:
Command sudo drbdadm primary r0
- Смонтировать ранее отмонтированный раздел:
Command sudo mount /dev/drbd0 /srv
- Убедиться в наличии ранее скопированных файлов в каталоге
/srv
:Command Title ls /srv /etc/default
DRBD и OCFS2
Начиная с версии DRBD-8.0.08
инструмент может задействовать оба узла как первичные, что дает возможность использовать кластерные файловые системы, например OCFS2.
OCFS2 — файловая система, обеспечивающая разделяемое использование одного и того же хранилища несколькими системами.
Настройка DRBD с OCFS2
На всех узлах:
- Установить пакет
ocfs2-tools
:Command 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 = 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 |
---|
|
где "testVol"
— имя создаваемого раздела.
Далее на всех узлах:
- Указать параметры в в
/etc/default/o2cb
:Command O2CB_ENABLED=true
O2CB_BOOTCLUSTER=ocfs2cluster
- Инициализировать новый кластер:
Command o2cb register-cluster ocfs2cluster
- Включить и добавить в автозапуск:
Command systemctl enable drbd o2cb ocfs2
systemctl 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.
Или в информации о работе каждого из улов:
Command | ||
---|---|---|
| ||
|
каждый из узлов отображает состояние другого как Unknown.
В состав инструмента входят компонениы для автоматического устранения split brain. Чтобы их задействовать необходимо добавить ссылку в секции handlers
файла конфигурации ресурса etc/drbd.d/r0.res
:
Command |
---|
resource <имя_ресурса> { # в примере, приведенном в статье имя - r0 |
Предупреждение |
---|
Во избежания потери данных следует заранее протестировать работу DRBD при автоматическом устранении split brain |
Чтобы восстановить работу DRBD вручную необходимо:
- Принудительно перевести узел, на который осуществляется резервирование в состояние
secondary
:Command sudo drbdadm secondary all
- Отключить данный узел от сети:
Command sudo drbdadm disconnect all
- Переподключить резервируемый узел игнорируя последние записи в метаданных:
Command sudo drbdadm -- --discard-my-data connect all
- Второй узел принудительно перевести в состояние
:
Command sudo drbdadm primary all
- Отключить второй узел:
Command sudo drbdadm disconnect all
- Переподключить второй узел для начала синхронизации. В процессе синхронизации служебные метаданные будут перезаписаны:
Command sudo drbdadm connect all
- Убедиться в том что узлы запущены в корректных режимах:
Command Title 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