Перевод статьи подготовлен в преддверии старта курса
DRBD (Distributed Replicated Block Device — распределённое реплицируемое блочное устройство) представляет собой распределенное, гибкое и универсально реплицируемое решение хранения данных для Linux. Оно отражает содержимое блочных устройств, таких как жесткие диски, разделы, логические тома и т.д. между серверами. Оно создает копии данных на двух устройствах хранения для того, чтобы в случае сбоя одного из них можно было использовать данные на втором.
Можно сказать, что это нечто вроде
Первоначально 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,
Для этой статьи мы создадим тестовое блочное устройство размером 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
Теперь, если вы запустите команду /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/
Теперь скопируйте или создайте какие-нибудь файлы в указанной выше точке монтирования и сделайте длинный список с помощью
# 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 чрезвычайно гибок и универсален, что делает его решением для репликации хранилища, подходящим для добавления HA практически в любое приложение. В этой статье мы показали, как установить DRBD в CentOS 7, и кратко продемонстрировали, как использовать его для репликации хранилища. Не стесняйтесь делиться своими мыслями с нами с помощью формы обратной связи ниже.
Источник: habr.com