В этой статье я рассмотрю установку и настройку распределённой файловой системы с использованием DRBD. Данное решение может применяться для ряда задач в кластерах высокой доступности (High Availability). Для начала, разъясним понятие DRBD:
DRBD (от англ. Distributed Replicated Block Device — «Распределённое Копируемое Блочное Устройство») — это блочное устройство, обеспечивающее синхронизацию (RAID1) между локальным блочным устройством и удалённым.
Подготовка
Эта статья будет продолжением предыдущей статьи, однако это не является полностью обязательным требованием. В частности, перед началом установки из предыдущей статьи нужен раздел “Подготовка”. Так же я буду использовать из предыдущей статьи имена нод и их ip адреса.
Так же нам потребуется дополнительно два диска (или раздела), по одному на ноду, на которых мы и будем собирать DRBD. Подготовьте их самостоятельно. У меня в статье они будут фигурировать под именами /dev/sdb.
Установка
Если посмотреть на сайте разрабтчиков, то там есть несколько активных версий drbd. Основные стабильные сейчас - 8.3.x и 8.4.x. Ситуация с пакетами rpm немного сложная. Я начну с рецепта сборки из исходников, а потом приведу способ загрузки собранных пакетов на “elrepo” и выложу свою сборку.
Сборка из исходников
Итак приступим. Я остановился на версии 8.4.х. Сборку рекомендую проводить на отдельной ноде, чтоб не засорять основные сервера. Подготавливаем инструменты для сборки и окружение:
1 2 |
|
Загружаем исходники и собираем:
1 2 3 4 5 6 7 |
|
Здесь основной момент в том, что мы собираем не только сам drbd на и его модуль для ядра. Если всё отлично, то после последней команды мы увидим примерно это:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
Теперь можно приступать непосредственно к установке этих пакетов. Пакеты содержащие в имени debuginfo не обязательны к установке.
1
|
|
Все собранные пакеты я любезно упаковал в этот архив.
Установка из репозитория “elrepo”
Тут сложного ничего нет, подключаем репозиторий, и ставим.
1 2 |
|
Однако, стоит заметить что в этом репозитории отсутствуют некоторые пакеты. В частности полезным является drbd-pacemaker, который устанавливает фирменные ресурс агенты от linbit для pacemaker.
Я использовал способ сборки из исходников. Учитывайте этот момент в дальнейшем, если вы ставили из “elrepo”
Теперь можно приступать к настройке.
Настройка
Начнём с глобального конфигурационного файла /etc/drbd.d/global_common.conf. В нём прописываются параметры общие для всех ресурсов. Приведу пример (за подробнастями как обычно в man drbd.conf):
1 2 3 4 5 6 7 8 9 10 11 |
|
Здесь параметр protocol C обозначает что операция записи считается завершённой, когда и локальный, и сетевой диски сообщают об успешном завершении записи. А параметры начинающиеся на after-sb определяют действия при Split brain, полезно для автоматического восстановления при мелких неполадках.
Теперь приступим к созданию конфигурационного файла ресурса drbd. В нём прописывается имя ресурса, устройство, и сетевой адрес. Конфигурационные файлы ресурсов хранятся в /etc/drbd.d/
Вот к примеру мой /etc/drbd.d/r0.res:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
Здесь device /dev/drbd1 это устрйство drbd которое автоматически создастся. В дальнейшем с ним и будем работаем.
При создании нового ресурса, первым шагом необходимо создать метаданные для диска. Выполняем на node1 и node2:
1 2 3 4 5 6 |
|
Теперь подгружаем модуль для ядра и поднимаем наш ресурс:
1 2 |
|
Теперь проверяем состояние диска drbd. Это можно делать двумя способами: drbd-overview и cat /proc/drbd. Разница лишь в том, что второй способ более информативный.
1 2 3 |
|
ds:Inconsistent/Inconsistent - это состояние синхрнизации. На данном этапе это нормальное состояние, просто drbd не разобрался ещё кто главный. Поможем ему, выполняем на любой ноде (к примеру на node1) и смотрим сново состояние:
1 2 3 4 5 6 7 8 9 10 |
|
Устройство drbd готово к использованию.
У DRBD есть два режима работы: Active-Pacive и Active-Active. Рассмотрим оба.
Режим Active-Pacive
Начнём с примера настройки режима Active-Pacive, как более простого. В нём одна нода доступна для чтения и записи, а вторая недоступна вовсе, однако она постоянно синхронизируется на блочном уровне. Так как доступна только одна, то нет необходимости использовать кластерные файловые системы (об этом ниже). Мы будем использовать ext4.
Создаём точку монтирования, файловую систему, монтируем (выполняем на ноде которая в данный момент primary):
1 2 3 |
|
Приступим к интеграции drbd с нашим кластером pacemaker.
Перед добавлением drbd в конфигурацию pacemaker, останавливаем ресурс drbd:
1 2 |
|
Добавляем ресурс для drbd в pacemaker (не забываем запустить кластер перед этим, если он был остановлен):
1 2 3 |
|
Приведу лишь часть конфигурации которую добавляем для drbd:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
ms используется для Master/Slave ресурсов. Ещё обязательно прописываем order для очерёдности запуска и colocation для обозначения что файловая система подниматся там где у нас Primary drbd.
Теперь применяем конфигурацию и смотрим состояние кластера:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
Всё отлично. На этом настройка drbd в режиме Active-Pacive закончена.
Режим Active-Active
Тут всё немного усложняется тем, что нам уже нужно использовать кластерные файловые системы. Я приведу пример настройки GFS2.
Для начала нужно изменить конфигурацию drbd, разрешив режим active-active. Привожу изменённый файл /etc/drbd.d/global_common.conf:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
Устанавливаем необходимые пакеты для gfs2:
1
|
|
Так же для gfs2 нужен cman, но он у нас установлен ещё в предыдущей статье, как и настроена его конфигурация /etc/cluster/cluster.conf.
Создаём файловую систему gfs2 на диске drbd (на той ноде, что primary):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
По поводу параметров: -j 2 указывает что создавать надо два журнала, -t my_cluster:data указываем имя кластера (он прописан в /etc/cluster/cluster.conf) и имя таблицы блокировок. Отлично, файловая система готова. Останавливаем drbd и правим конфигурацию кластера (опять же привожу лишь часть для drbd):
1 2 3 4 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
Отличия от active-slave в том, что мы указываем master-max=”2” и само собой fstype=”gfs2”. Так же я добавил clone для fs-data.
Чтож, посмотрим что у нас вышло:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
Вот в принципе и всё. По поводу решения некоторых проблем с drbd я делал заметку тут.