настроить DRBD для Replicate Storage на двух серверах

Thank you for reading this post, don't forget to subscribe!

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

Вы може­те думать об этом как о кон­фи­гу­ра­ции RAID 1 с дис­ка­ми, зер­каль­но отоб­ра­жа­е­мы­ми на сер­ве­рах. Одна­ко всё это рабо­та­ет совсем не так, как RAID и даже не как сете­вой RAID.

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

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

В этой ста­тье мы исполь­зу­ем кла­стер из двух узлов для настройки:

  • Узел 1: 192.168.56.101 — test.test.lan 
  • Узел 2: 192.168.56.102 — server1.test.lan 

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

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

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

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

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

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

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

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

Шаг 2: Подготовка хранилища нижнего уровня

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

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

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

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

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

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

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

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

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

Крат­ко оста­но­вим­ся на линей­ном про­то­ко­ле CDRBD под­дер­жи­ва­ет три раз­лич­ных режи­ма репли­ка­ции (три сте­пе­ни син­хрон­но­сти репли­ка­ции), которые:

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

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

Шаг 4: Добавление Resource

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

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

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

где:

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

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

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

Шаг 5: Инициализация и разрешение Resource

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

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

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

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

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

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

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

Или же:

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

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

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

После завер­ше­ния син­хро­ни­за­ции состо­я­ние обо­их дис­ков долж­но быть «UpToDate«.

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

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

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

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

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

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

На дру­гом узле (у кото­ро­го есть ресурс с допол­ни­тель­ной ролью), сде­лай­те его primary, затем под­клю­чи­те к нему устрой­ство и выпол­ни­те «-ls -l». Если настрой­ка рабо­та­ет нор­маль­но, все фай­лы, хра­ня­щи­е­ся на томе, долж­ны быть там:

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

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

Итог:

DRBD чрез­вы­чай­но гибок и уни­вер­са­лен, что дела­ет его реше­ни­ем для репли­ка­ции хра­ни­ли­ща, под­хо­дя­щим для добав­ле­ния прак­ти­че­ски в любое приложение.