Настройка локальной синхронной репликации используя DRDB9
DRBD (Distributed Replicated Block Device — распределённое реплицируемое блочное устройство) представляет собой распределенное, гибкое и универсально реплицируемое решение хранения данных для Linux.
DRBD имеет поверхностное сходство с RAID-1 в том, что он включает в себя копию данных на двух устройствах хранения, так что в случае сбоя данные на другом могут быть использованы. Однако оно работает совсем иначе, чем RAID и даже сетевой RAID.
В этой статье я поделюсь опытом как создать репликацию drbd локально, не используя drbdadm, а используя drbdsetup и drbdmeta.
- drbdadm: инструмент администрирования высокого уровня DRBD. Он используется поверх drbdsetup и drbdmeta
- drbdsetup: инструмент администрирования более низкого уровня для подключения устройств DRBD к их устройствам резервного копирования, настройки пар устройств DRBD для отражения их устройств резервного копирования и для проверки конфигурации работающих устройств DRBD.
- drbdmeta: инструмент управления метаданными.
Тестовая среда
Ubuntu 18.04, версия ядра 4.19 и выше
Шаг 1. Установка и загрузка модуля
Ванильные ядра содержат только восьмую версию DRBD, желательно пересобрать ядра без этого модуля, и установить девятую версию из репозитория.
Добавляем репозитории в ваш sources.list
deb http://ppa.launchpad.net/linbit/linbit-drbd9-stack/ubuntu bionic main deb-src http://ppa.launchpad.net/linbit/linbit-drbd9-stack/ubuntu bionic main
Обновляем кэш и устанавливаем пакеты drbd
apt update apt install drbd-dkms drbd-utils
Проверяем версию модуля и загружаем его с параметрами
modinfo drbd modprobe drbd usermode_helper=/bin/true minor_count=36
Шаг 2. Настройка global_common.conf
Я использую следующие параметры конфига, все остальные можно будет задавать при настройке ресурса
# DRBD is the result of over a decade of development by LINBIT. # In case you need professional services for DRBD or have # feature requests visit http://www.linbit.com global < usage-count no; >common < disk < c-delay-target 50; c-fill-target 0; >net < csums-alg hash-alg; >>
Обо всех параметрах более подробно можно почитать здесь
Шаг 3. Настройка ресурса DRBD9
- Два блочных устройства(источник и приемник)
- Два логических тома под метаданные(я использовал по 2 гб)
drbdsetup new-resource drbdres0 0 drbdsetup new-resource drbdres1 1
drbdres0 и drbdres1 — имя ресурса
drbdsetup new-minor drbdres0 0 0 drbdsetup new-minor drbdres1 1 0
drbdres0 и drbdres1 — ресурсы созданные ранее
второй аргумент(minor) — номер созданного девайса, т.е. drbd0, drbd1
третий аргумент — номер тома
drbdmeta --force 0 v09 '/dev/zd0' flex-external create-md 1 drbdmeta --force 1 v09 '/dev/zd16' flex-external create-md 1
drbdsetup attach 0 '/dev/zd32' '/dev/zd0' flexible --disk-flushes=no --disk-barrier=no --al-extents=3389 drbdsetup attach 1 '/dev/zd64' '/dev/zd16' flexible --disk-flushes=no --disk-barrier=no --al-extents=3389
первый аргумент (0 и 1) — это номер созданного девайса(minor)
‘/dev/zd32’ и ‘/dev/zd64’ — источник и приемник
‘/dev/zd0’ и ‘/dev/zd16’ — ранее созданные тома для метаданных и дальше идут параметры
drbdsetup new-peer drbdres0 1 --protocol=C --max-buffers=36K --max-epoch-size=36K --sndbuf-size=1024K --rcvbuf-size=2048K drbdsetup new-peer drbdres1 0 --protocol=C --max-buffers=36K --max-epoch-size=36K --sndbuf-size=1024K --rcvbuf-size=2048K
drbdres0 и drbdres1 — ранее созданные ресурсы
второй параметр (1 и 0) — это peer node id и далее идут параметры соединения
drbdsetup new-path drbdres0 1 127.0.0.1:7788 127.0.0.1:7789 drbdsetup new-path drbdres1 0 127.0.0.1:7789 127.0.0.1:7788
Примечание: Если захотите создать еще больше ресурсов локально, то нужно будет использовать другие порты. например: 127.0.0.1:7790 127.0.0.1:7791 и так далее
drbdsetup peer-device-options drbdres1 0 0 --c-plan-ahead=0 --resync-rate=80M drbdsetup peer-device-options drbdres0 1 0 --c-plan-ahead=0 --resync-rate=80M
resync-rate — это максимальная скорость синхронизации. Имейте ввиду, что если поставите высокую скорость, то drbd будет использовать весь ресурс диска или логического тома, и если на нем используется какое то приложение, то оно не получит доступ к диску пока не закончится синхронизация.
drbdsetup primary drbdres0 --force
drbdsetup connect drbdres0 1 drbdsetup connect drbdres1 0
После выполненных действий при выводе статуса
должна начаться синхронизация, после окончания синхронизации у обоих ресурсов должно быть UpToDate. Прочитать больше о статусах можно здесь в разделе «Теория». Официальный сайт с документацией. Дальше использовать для работы необходимо новосозданные девайсы drbd0/drbd1 в зависимости какой primary.