Настраиваем DRBD для репликации хранилища на два CentOS 7 сервера

Автор оригинала: Aaron Kili
  • Перевод
Перевод статьи подготовлен в преддверии старта курса «Администратор Linux. Виртуализация и кластеризация».




DRBD (Distributed Replicated Block Device — распределённое реплицируемое блочное устройство) представляет собой распределенное, гибкое и универсально реплицируемое решение хранения данных для Linux. Оно отражает содержимое блочных устройств, таких как жесткие диски, разделы, логические тома и т.д. между серверами. Оно создает копии данных на двух устройствах хранения для того, чтобы в случае сбоя одного из них можно было использовать данные на втором.

Можно сказать, что это нечто вроде сетевой конфигурации RAID 1 с дисками, отражаемыми на разные сервера. Однако оно работает совсем не так, как RAID (даже сетевой).

Первоначально DRBD использовалось главным образом в компьютерных кластерах высокой доступности (HA — high availability), однако, начиная с девятой версии, оно может использоваться для развертывания решений облачного хранилища.

В этой статье мы расскажем, как установить DRBD в CentOS, и кратко продемонстрируем, как использовать его для репликации хранилища (раздела) на двух серверах. Это идеальная статья для начала работы с DRBD в Linux.

Тестовая среда


Мы будем использовать кластер из двух узлов для этого сетапа.

  • Узел 1: 192.168.56.101 – tecmint.tecmint.lan
  • Узел 2: 192.168.56.102 – server1.tecmint.lan

Шаг 1: Установка пакетов DRBD


DRBD реализован как модуль ядра Linux. Он представляет из себя драйвер для виртуального блочного устройства, поэтому он располагается в самом низу стека ввода-вывода системы.

DRBD может быть установлен из ELRepo или EPEL. Начнем с импорта ключа подписи пакета ELRepo и подключения репозитория на обоих узлах, как показано ниже.

# rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org
# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm


Затем на нужно установить модуль ядра DRBD и утилиты на обоих узлах с помощью:

# yum install -y kmod-drbd84 drbd84-utils

Если у вас подключен SELinux, вам нужно настроить политики так, чтобы освободить процессы DRBD от контроля SELinux.

# semanage permissive -a drbd_t

Кроме того, если в вашей системе работает файрвол (firewalld), вам необходимо добавить порт DRBD 7789, чтобы разрешить синхронизацию данных между двумя узлами.

Запустите эти команды для первого узла:

# firewall-cmd --permanent --add-rich-rule='rule family="ipv4"  source address="192.168.56.102" port port="7789" protocol="tcp" accept'
# firewall-cmd --reload

Затем запустите эти команды для второго узла:

# firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.56.101" port port="7789" protocol="tcp" accept'
# firewall-cmd --reload

Шаг 2. Подготовка низкоуровневого хранилища


Теперь, когда у нас установлено DRBD на обоих узлах кластера, мы должны подготовить на них области хранения примерно одного и того же размера. Это может быть раздел жесткого диска (или целый физический жесткий диск), программное устройство RAID, логический том LVM или любой другой тип блочного устройства, находящийся в вашей системе.

Для этой статьи мы создадим тестовое блочное устройство размером 2 ГБ с помощью команды dd.

# dd if=/dev/zero of=/dev/sdb1 bs=2024k count=1024

Предположим, что это неиспользуемый раздел (/dev/sdb1) на втором блочном устройстве (/dev/sdb), подключенном к обоим узлам.

Шаг 3. Настройка DRBD


Основной файл конфигурации DRBD — /etc/drbd.conf, а дополнительные файлы конфигурации можно найти в каталоге /etc/drbd.d.

Чтобы реплицировать хранилище, нам нужно добавить необходимые для этого конфигурации в файл /etc/drbd.d/global_common.conf, который содержит глобальные и общие разделы конфигурации DRBD, а определять ресурсы нам нужно в .res файлах.

Сделаем резервную копию исходного файла на обоих узлах, а затем откроем новый файл для редактирования (используйте текстовый редактор по своему вкусу).

# mv /etc/drbd.d/global_common.conf /etc/drbd.d/global_common.conf.orig
# vim /etc/drbd.d/global_common.conf 

Добавьте в оба файла следующие строки:

global {
 usage-count  yes;
}
common {
 net {
  protocol C;
 }
}

Сохраните файл, а затем закройте редактор.

Давайте ненадолго остановимся на строке protocol C. DRBD поддерживает три различных режима репликации (т.е. три степени синхронности репликации), а именно:

  • protocol A: протокол асинхронной репликации; чаще всего используется в сценариях репликации на больших расстояниях.
  • protocol B: протокол полусинхронной репликации или протокол синхронной памяти.
  • protocol C: обычно используется для узлов в сетях с небольшими расстояниями; это безусловно, наиболее часто используемый протокол репликации в настройках DRBD.

Важно: выбор протокола репликации влияет на два фактора развертывания: защиту и задержку. А пропускная способность, напротив, не зависит в значительной степени от выбранного протокола репликации.

Шаг 4. Добавление ресурса


Ресурс (Resource) — это собирательный термин, который относится ко всем аспектам конкретного реплицируемого набора данных. Мы определим наш ресурс в файле /etc/drbd.d/test.res.

Добавьте следующее в файл на обоих узлах (не забудьте заменить переменные фактическими значениями для вашей среды).

Обратите внимание на имена хостов, нам нужно указать сетевое имя хоста, которое можно получить с помощью команды uname -n.

resource test {
        on tecmint.tecmint.lan {
 		device /dev/drbd0;
       		disk /dev/sdb1;
        		meta-disk internal;	
                	address 192.168.56.101:7789;
        }
        on server1.tecmint.lan  {
		device /dev/drbd0;
        		disk /dev/sdb1;
        		meta-disk internal;
                	address 192.168.56.102:7789;
        }
}
}

где:

  • on hostname: раздел on, к которому относится вложенный оператор конфигурации.
  • test: это имя нового ресурса.
  • device /dev/drbd0: указывает новое виртуальное блочное устройство, управляемое DRBD.
  • disk /dev/sdb1: это раздел блочного устройства, который является резервным устройством для устройства DRBD.
  • meta-disk: определяет, где DRBD хранит свои метаданные. Internal означает, что DRBD хранит свои метаданные на том же физическом низкоуровневом устройстве, что и фактические данные на продакшене.
  • address: указывает IP-адрес и номер порта соответствующего узла.

Также обратите внимание, что если на обоих хостах параметры имеют одинаковые значения, вы можете указать их непосредственно в разделе ресурсов.

Например, приведенная выше конфигурация может быть реструктурирована в:

resource test {
	device /dev/drbd0;
	disk /dev/sdb1;
        	meta-disk internal;	
        	on tecmint.tecmint.lan {
 		address 192.168.56.101:7789;
        	}
        	on server1.tecmint.lan  {
		address 192.168.56.102:7789;
        		}
}

Шаг 5. Инициализация и запуск ресурса


Для взаимодействия с DRBD мы будем использовать следующие инструменты администрирования (которые взаимодействуют с модулем ядра для настройки и администрирования ресурсов DRBD):

  • drbdadm: инструмент администрирования высокого уровня DRBD.
  • drbdsetup: инструмент администрирования более низкого уровня для подключения устройств DRBD к их устройствам резервного копирования, настройки пар устройств DRBD для отражения их устройств резервного копирования и для проверки конфигурации работающих устройств DRBD.
  • Drbdmeta: инструмент управления метаданными.

После добавления всех начальных конфигураций ресурса мы должны вызвать ресурс на обоих узлах.

# drbdadm create-md test


Инициализация хранилища метаданных

Далее мы должны запустить его, что подключит ресурс к его устройству резервного копирования, затем установит параметры репликации и подключит ресурс к своему пиру:

# drbdadm up test

Теперь, если вы запустите команду lsblk, вы заметите, что устройство/том DRBD drbd0 связан с резервным устройством /dev/sdb1:

# lsblk


Список блочных устройств

Чтобы отключить ресурс, запустите:

# drbdadm down test

Чтобы проверить состояние ресурса, выполните запустите следующую команду (обратите внимание, что на этом этапе ожидается состояние дисков Inconsistent/Inconsistent):

# drbdadm status test
OR
# drbdsetup status test --verbose --statistics 	#for  a more detailed status


Проверка состояния ресурса на у
злах


Шаг 6: Установка основного ресурса/источника начальной синхронизации устройств


На данном этапе DRBD уже готов к работе. Теперь нам нужно указать, какой узел следует использовать в качестве источника начальной синхронизации устройств.

Запустите следующую команду только на одном узле, чтобы начать первоначальную полную синхронизацию:

# drbdadm primary --force test
# drbdadm status test


Установка основного узла в качестве начального устройства
После завершения синхронизации состояние обоих дисков должно быть UpToDate.

Шаг 7: Тестирование DRBD сетапа


Наконец, нам нужно проверить, будет ли DRBD устройство работать так как нужно для хранения реплицированных данных. Помните, что мы использовали пустой том диска, поэтому мы должны создать файловую систему на устройстве и смонтировать ее, чтобы проверить, можем ли мы использовать ее для хранения реплицированных данных.

Нам нужно создать файловую систему на устройстве с помощью следующей команды на узле, с которого мы начали первоначальную полную синхронизацию (на котором есть ресурс с основной ролью):

# mkfs -t ext4 /dev/drbd0


Создаем файловую систему на томе Drbd

Затем смонтировать ее как показано (вы можете дать точке монтирования подходящее имя):

# mkdir -p /mnt/DRDB_PRI/
# mount /dev/drbd0 /mnt/DRDB_PRI/

Теперь скопируйте или создайте какие-нибудь файлы в указанной выше точке монтирования и сделайте длинный список с помощью команды ls:

# cd /mnt/DRDB_PRI/
# ls -l 


Вывести список содержимого основного тома Drbd

Далее размонтируйте устройство (убедитесь, что монтирование не открыто, измените каталог после размонтирования, чтобы избежать ошибок) и измените роль узла с первичного на вторичный:

# umount /mnt/DRDB_PRI/
# cd
# drbdadm secondary test

Другой узел (на котором есть ресурс с вторичной ролью) сделайте первичным, затем подключите к нему устройство и выполните длинный список точек монтирования. Если сетап работает нормально, все файлы, хранящиеся на томе, должны быть там:

# drbdadm primary test
# mkdir -p /mnt/DRDB_SEC/
# mount /dev/drbd0 /mnt/DRDB_SEC/
# cd /mnt/DRDB_SEC/
# ls  -l 


Проверка сетапа DRBD, работающего на вторичном узле.

Для получения дополнительной информации обращайтесь к справочным страницам инструментов администрирования:

# man drbdadm
# man drbdsetup
# man drbdmeta

Справка: Руководство пользователя DRBD.

Резюме


DRBD чрезвычайно гибок и универсален, что делает его решением для репликации хранилища, подходящим для добавления HA практически в любое приложение. В этой статье мы показали, как установить DRBD в CentOS 7, и кратко продемонстрировали, как использовать его для репликации хранилища. Не стесняйтесь делиться своими мыслями с нами с помощью формы обратной связи ниже.



Узнать подробнее о курсе.


OTUS. Онлайн-образование
Цифровые навыки от ведущих экспертов

Комментарии 8

    +1
    Предвосхищяя вопросы по мастер-мастер репликации, НЕ ДЕЛАЙТЕ ЭТОГО! Только с кворумом, когда нод 3 и больше (желательно нечётное количество).
      0
      Вот кстати вопрос — в какой момент происходит окончательная запись на диск? Есть ли там журнал и на каких стадиях происходит коммит транзакции. А то возникнет вариант — записались данные на первую ноду, начали писаться на вторую и тут внезапно вырубился свет. Коммит о записи наверх не улетел и возникает вопрос — как отработает обратное включение нод и как работает журнал (если он есть).
        0
        Если не было подтверждение на мастер, то после включения нода будет информировать о последней выполненной успешно операции и в случае расхождения данные будут высланы повторно.
        0
        Как оно живет на серверах расположенных вдалеке друг от друга?
        то есть когда скорость каналов между серверами невелика или нестабильна.
          0
          drbd84


          В какой паралельной вселенной это всё ещё акутально в 2020 году?
            0
            В мире CentOS 7. Это название пакета, не версия. Полное название с версией — drbd84-utils-9.12.2-1.el7.elrepo.x86_64.rpm
              0
              В EPEL для CentOS7 уже давно есть как минимум 9 версия DRBD, и суммарно это называется Linstor. Более того, текущая версия CentOS — 8.
                0
                Да, согласен. В этой параллельной вселенной версии kmod-drbd84 и drbd-utils84 совершенно разбежались. 8.4 и 9.12.
                Оригинальной статье уже год, тогда ещё не было восьмого CentOS. Но kmod-drbd90 был и тогда, да.

          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

          Самое читаемое