Как стать автором
Обновить

Настройка локальной синхронной репликации используя DRDB9

Время на прочтение3 мин
Количество просмотров5.1K

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

Что потребуется:

  1. Два блочных устройства(источник и приемник)

  2. Два логических тома под метаданные(я использовал по 2 гб)

Процесс создания:

  1. Создаем два ресурса

drbdsetup new-resource drbdres0 0
drbdsetup new-resource drbdres1 1

где:

drbdres0 и drbdres1 - имя ресурса

0 и 1 - peer node id

  1. Создаем девайсы drbd

drbdsetup new-minor drbdres0 0 0
drbdsetup new-minor drbdres1 1 0

где:

drbdres0 и drbdres1 - ресурсы созданные ранее

второй аргумент(minor) - номер созданного девайса, т.е. drbd0, drbd1

третий аргумент - номер тома

  1. Создаем метаданные на томах для метаданных

drbdmeta --force 0 v09 '/dev/zd0' flex-external create-md 1
drbdmeta --force 1 v09 '/dev/zd16' flex-external create-md 1
  1. Добавляем диски к ранее созданным drbd устройствам

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' - ранее созданные тома для метаданных и дальше идут параметры

  1. Создаем новых peer'ов

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 и далее идут параметры соединения

  1. Создаем конечные точки подключения

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 и так далее

  1. Добавляем опции

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 будет использовать весь ресурс диска или логического тома, и если на нем используется какое то приложение, то оно не получит доступ к диску пока не закончится синхронизация.

  1. Делаем роль primary для первого ресурса

drbdsetup primary drbdres0 --force
  1. Выполняем подключение

drbdsetup connect drbdres0 1
drbdsetup connect drbdres1 0

После выполненных действий при выводе статуса

drbdsetup status -v

должна начаться синхронизация, после окончания синхронизации у обоих ресурсов должно быть UpToDate. Прочитать больше о статусах можно здесь в разделе "Теория". Официальный сайт с документацией. Дальше использовать для работы необходимо новосозданные девайсы drbd0/drbd1 в зависимости какой primary.

Теги:
Хабы:
Всего голосов 6: ↑4 и ↓2+3
Комментарии9

Публикации

Истории

Ближайшие события

7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн
15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
22 – 24 ноября
Хакатон «AgroCode Hack Genetics'24»
Онлайн
28 ноября
Конференция «TechRec: ITHR CAMPUS»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань