Задача:
Настроить кластер DRBD из двух нод
Дано:
NODE1 CentOS7
NODE2 CentOS7
DRBD 9
Диск для репликации sdb1
Решение:
Установка пакета DRBD9
Подключаем репозиторий
Устанавливаем пакет
Добавляем в автозагрузку модуль ядра
Проверяем, все ли подгрузилось
Настройка
Настройка файла hosts
Необходимо в файл /etc/hosts добавить имена нод, если они не могут выть определены с основного ДНС сервера
Создание файла ресурсов с именем /etc/drbd.d/data.res
Инициализация и запуск ресурса (по сути создание метаданных)
Данную процедуру выполняем на обоих нодах
Если возникает ошибка
То необходимо удалить остаточные данные, например, ранее диск был отформатирован под ext4 или использовался в массиве RAID
После этого можно повторно инициализировать ресурс командой drbdadm create-md
Назначаем первичную ноду и поднимаем ее. Выполняется на первичной ноде
Примечание
Файл /proc/drbd
В 9 версии нет информации в традиционном файле /proc/drbd
Информацию можно получить по следующему пути
Устранение ошибки split-brain
Ошибка может возникать в случае одновременного отключения хостов и даже кратковременной потери соединения. Первое, что необходимо, определить ноду с наиболее актуальными данными (по времени загрузки, по системе мониторинга или каким то иным способом)
На сервере 1 переводим ресурс data в состояние secondary и подключаем к data с параметром –discard-my-data,
Если выходит следующее сообщение
Отключаем data и повторяем операцию.
На втором сервере запускаем
Проверяем состояние, в случае если данные не синхронизированы начнется синхронизация разделов.
Теория
Основной файл конфигурации
minor-count — По умолчанию модуль DRBD загружается с minorcount 32, если используется много устройств и номеров не хватает их можно явно указать здесь;
dialog-refresh — Обновление экрана каждые n секунд, может быть полезно при подключение к серверу по последовательному интерфейсу;
disable-ip-verifi cation — Позволяет отключить одну из проверок drbdadm;
usage-count — Участвовать в глобальном подсчете пользователей DRBD или нет;
common {…} — Секция, опции которой наследуют все ресурсы;
syncer — Позволяет задать пропускную способность при синхронизации устройств по сети, разработчики рекомендуют использовать 30% от возможностей сети. Например, если у вас 100 Мбит сеть, то 100 * 0.3 = 30 Мб;
resource data {…} — Секция описания ресурса;
protocol — Задает протокол для DRBD, подробнее о них написано далее;
handlers {…} — Задает обработчики, например что делать в случае потери соединения первичной ноды;
startup {…} — Секция для опций используемых в процессе загрузки DRBD;
wfc-timeout — Ожидание таймаута соединения;
degr-wfc-timeout — Ожидание таймаута подключения, в случае если в кластере одна рабочая нода;
wait-after-sb — Ожидание после split brain, ситуация когда все ноды могут попытаться запустить сервис одновременно, думая что другие ноды недоступны. В свою очередь это может повлечь за собой повреждение данных;
disk {…} — Секция с настройками оповещения верхних уровней, если замечено, что происходят I/O ошибки при обращение к диску;
on-io-error detach — Нода перестает работать с носителем данных если на нем происходят I/O ошибки;
fencing — Процесс блокировки ресурсов с нод статус которых сомнителен;
net {…} — Секция задает различные опции сети, такие как размеры буфера, максимальное число запросов обрабатываемых DRBD. В обычных ситуациях значений по умолчанию достаточно;
on host {…} — Секция описания нод;
device — Указывает на устройство DRBD, они расположены в /dev/ и начинаются с 0;
disk — Физический диск или раздел, который будет задействован в работе DRBD;
address — IP-адрес и порт этой ноды, нужно указывать именно ее IP-адрес а не shared IP;
meta-disk — Meta данные могут храниться на отдельном разделе диске а могут на диске описанном в опции disk;
max-buffers — Число буферов используемых для хранения данных, пока те записываются на диск;
max-epoch-size — Максимальное число запросов на запись. Должно соответствовать max-buff ers;
timeout, ping-int — Эти значения можно повысить если наблюдаются обрывы связи;
Возможный статус соединения
StandAlone — Недоступна сетевая конфигурация. Этот ресурс еще не был подключен или был административно отключен (drbdadm disconnect), или сбросил сетевое подключение из за не пройденной аутентификации или split brain;
Disconnecting — Временное состояние пока происходит отключение,
следующее состояние StandAlone;
Unconnected — Временное состояние до попытки подключения. Следующее возможное состояние WFConnection или WFReportParams;
Timeout — Временное состояние после перерыва связи с peer-ом. Следующее возможное состояние Unconnected;
BrokenPipe — Временное состояние после потери связи с peer-ом. Следующее возможное состояние Unconnected;
NetworkFailure — Временное состояние после потери связи с партнером. Следующее возможное состояние — Unconnected;
ProtocolError — Временное состояние после потери связи с партнером. Следующее возможное состояние Unconnected;
TearDown — Временное состояние, peer закрывает соединение. Следующее возможное состояние Unconnected;
WFConnection — Нода ожидает пока peer станет виден в сети;
WFReportParams — TCP соединение было установлено, нода ожидает первый сетевой пакет от peer-ра;
Connected — DRBD соединение установлено, зеркалирование данных активно. Это нормальное состояние;
StartingSyncS — Начата полная синхронизация, выполняется администратором. Следующее возможное состояние SyncSource или PausedSyncS;
StartingSyncT — Начата полная синхронизация, выполняется администратором. Следующее возможное состояние WFSyncUUID;
WFBitMapS — Частичная синхронизация начата. Следующее возможное состояние SyncSource или PausedSyncS;
WFBitMapT — Частичная синхронизация начата. Следующее возможное состояние WFSyncUUID;
WFSyncUUID — Синхронизация скоро начнется. Следующее возможное состояние SyncTarget или PausedSyncT;
SyncSource — Синхронизация запускается, локальная нода является источником синхронизации;
SyncTarget — Синхронизация запускается, локальная нода является целью синхронизации;
PausedSyncS — Локальная нода источник синхронизации, но синхронизация находится в режиме паузы;
PausedSyncT — Локальная нода является целью синхронизации, но синхронизация находится в режиме паузы;
VerifyS — Запускается онлайн верификация, локальная нода является источником верификации;
VerifyT — Запускается онлайн верификация, локальная нода является целью верификации.
Роли ресурсов:
Primary — первичная нода;
Secondary — вторичная нода;
Unknown — роль ресурса неизвестна. Локальный ресурс не бывает в этой роли. Она отображается только для ресурса peer-ра в отключенном режиме.
Возможные состояния диска
Diskless — Драйверу DRBD не назначено блочное устройство;
Attaching — Переходное состояние пока считываются meta данные;
Failed — Переходное состояние последовавшее за I/O ошибкой локального блочного устройства, следующее возможное состояние Diskless;
Negotiating — Переходное состояние пока налаживается соединение;
Inconsistent — Данные непоследовательны. Это статус нового ресурса;
Outdated — Данные ресурса последовательны но устарели;
DUnknown — Статус используется для peer-ра если не доступно сетевое подключение;
Consistent — Последовательные данные ноды без сетевого подключения. После подключения будет решено, данные являются актуальными или устаревшими;
UpToDate — Все данные в актуальном состояние. Это нормально состояние.
Файл конфигурации ресурса
DRBD поддерживает как синхронную, так и асинхронную синхронизацию
Асинхронной репликация, протокол «A» — запись считается завершенной, как только запись завершилась на локальное устройство и данные были отправлены на удаленный узел
Промежуточный протокол репликации «B» — запись считается успешной, если она завершилась на локальный диск и удаленный узел подтвердил получение (но не локальную запись) данных
Синхронная репликация, протокол «С» — операция записи считается завершенной, когда и локальный, и сетевой диски сообщают об успешном завершении записи
on node1: состояния on on, к которым относятся вложенные операторы конфигурации
data: это имя нового ресурса
device /dev/drbd0: указывает новое виртуальное блочное устройство, управляемое DRBD
disk /dev/sdb1: это раздел блочного устройства, который является резервным устройством для устройства DRBD
meta-disk: определяет, где DRBD хранит свои метаданные. Использование Internal означает, что DRBD хранит свои метаданные на том же физическом устройстве нижнего уровня, что и фактические производственные данные
address: указывает IP-адрес и номер порта соответствующего узла
Инициализация и включение ресурса
Для взаимодействия с DRBD мы будем использовать следующие инструменты администрирования, которые взаимодействуют с модулем ядра для настройки и администрирования ресурсов DRBD:
drbdadm: инструмент администрирования высокого уровня DRBD
drbdsetup: инструмент администрирования более низкого уровня для подключения устройств DRBD к их устройствам резервного блока, для настройки пар устройств DRBD для зеркалирования их устройств резервного блока и для проверки конфигурации работающих устройств DRBD
drbdmeta: инструмент управления метаданными
Увеличение скорости синхронизации DRDB
При синхронизации идет нагрузка как на диски, так и на сеть, поэтому параметры необходимо подбирать исходя из ваших скоростей. Так у меня на 10Гб сети, стоит ограничение по нагрузке на диски в 350Мб\с, что составляет примерно 3Гб\с по трафику
В файле/etc/drbd.d/global_common.conf заданы следующие параметры
Небольшой видос
[…] the end of synchronization, both resources should have UpToDate. You can read more about statuses here in the “Theory” section. Official site with documentation. Further, it is necessary to […]