Debian Squeeze: DRBD + OCFS2

Предлагаю небольшую заметку по созданию раздела с кластерной файловой системой для двух серверов под управлением Squeeze, синхронизация между ними будет осуществляться посредством .

Node Hostname IP Block Device
Node1 deb-node1 192.168.0.101 /dev/sdb
Node2 deb-node2 192.168.0.102 /dev/sdb

Устанавливаем DRBD на обоих серверах:

 [email protected]:~$ apt-get install drbd-utils [email protected]:~$ modprobe drbd 

Приводим конфигурационный файл /etc/drbd.conf на обоих серверах к виду:

 global { usage-count no; } resource r0 { protocol C; startup { #become-primary-on both; } net { # allow-two-primaries; after-sb-0pri discard-zero-changes; after-sb-1pri discard-secondary; after-sb-2pri disconnect; } on deb-node1 { device /dev/drbd0; disk /dev/sdb; address 192.168.0.101:7788; meta-disk internal; } on deb-node2 { device /dev/drbd0; disk /dev/sdb; address 192.168.0.102:7788; meta-disk internal; } } 

И перезапускаем демона и инициализируем распределенное блочное устройство /dev/drbd0 на первом узле:

 [email protected]:~$ invoke-rc.d drbd restart [email protected]:~$ drbdadm create-md r0 Writing meta data... initializing activity log NOT initialized bitmap New drbd meta data block successfully created. [email protected]:~$ drbdadm attach r0 [email protected]:~$ drbdadm syncer r0 [email protected]:~$ drbdadm connect r0 [email protected]:~$ cat /proc/drbd version: 8.3.7 (api:88/proto:86-91) srcversion: EE47D8BF18AC166BE219757 0: cs:WFConnection ro:Secondary/Unknown ds:Inconsistent/DUnknown C r---- ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:8388316 

И на втором узле:

 [email protected]:~$ invoke-rc.d drbd restart [email protected]:~$ drbdadm create-md r0 Writing meta data... initializing activity log NOT initialized bitmap New drbd meta data block successfully created. [email protected]:~$ drbdadm attach r0 [email protected]:~$ drbdadm syncer r0 [email protected]:~$ drbdadm connect r0 [email protected]:~$ cat /proc/drbd ersion: 8.3.7 (api:88/proto:86-91) srcversion: EE47D8BF18AC166BE219757 0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r---- ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:8388316 

Запускаем синхронизацию распределенного блочного устройства между узлами:

 [email protected]:~$ drbdadm -- --overwrite-data-of-peer primary r0 

В зависимости от скорости сетевого подключения между серверами и объема устройства процесс синхронизации займет от нескольких минут до часов. После завершения синхронизации статус блочных распределенных устройств должен выглядеть примерно так:

 [email protected]:~$ cat /proc/drbd version: 8.3.7 (api:88/proto:86-91) srcversion: EE47D8BF18AC166BE219757 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r---- ns:8388316 nr:0 dw:0 dr:8388516 al:0 bm:512 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0 

На втором узле:

 [email protected]:~$ cat /proc/drbd version: 8.3.7 (api:88/proto:86-91) srcversion: EE47D8BF18AC166BE219757 0: cs:Connected ro:Secondary/Primary ds:UpToDate/UpToDate C r---- ns:0 nr:8388316 dw:8388316 dr:0 al:0 bm:512 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0 

После синхронизации устройств правим конфиг, разрешая запись на обоих узлах одновременно, для этого раскомментируем в конфиге:

 startup { become-primary-on both; } net { allow-two-primaries; ... } ... 

Перезапускаем демона и подключаем распределенной блочное устойство как primary:

 [email protected]:~$ invoke-rc.d drbd restart [email protected]:~$ drbdadm disconnect r0 [email protected]:~$ drbdadm connect r0 [email protected]:~$ drbdadm primary r0 

И на втором узле:

 [email protected]:~$ invoke-rc.d drbd restart [email protected]:~$ drbdadm disconnect r0 [email protected]:~$ drbdadm connect r0 [email protected]:~$ drbdadm primary r0 

Переходим к настройке файловой системы. Установим необходимые пакеты на обоих серверах:

 [email protected]:~$ apt-get install ocfs2-tools ocfs2console 

Приводим конфигурационный файл /etc/ocfs2/cluster.conf на обоих узлах к виду:

 node: ip_port = 7777 ip_address = 192.168.0.101 number = 0 name = deb-node1 cluster = ocfs2 node: ip_port = 7777 ip_address = 192.168.0.102 number = 1 name = deb-node2 cluster = ocfs2 cluster: node_count = 2 name = ocfs2 

В файле /etc/default/o2cb правим:

 O2CB_ENABLED=true 

Перезапускаем демонов:

 [email protected]:~$ invoke-rc.d o2cb restart [email protected]:~$ invoke-rc.d ocfs2 restart 

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

 [email protected]:~$ mkfs -t ocfs2 -N 2 -L ocfs2_drbd0 /dev/drbd0 [email protected]:~$ mkdir /cluster [email protected]:~$ mount -t ocfs2 /dev/drbd0 /cluster 

Монтируем файловую систему на втором узле:

 [email protected]:~$ mkdir /cluster [email protected]:~$ mount -t ocfs2 /dev/drbd0 /cluster 

Создаем тестовый файл на первом узле:

 [email protected]:~$ echo "test" > /cluster/test.txt [email protected]:~$ ll /cluster/ total 0 drwxr-xr-x 2 root root 3896 Feb 6 16:03 lost+found -rw-r--r-- 1 root root 5 Feb 6 16:08 test.txt 

И проверяем его наличие на втором узле:

 [email protected]:~$ ll /cluster/ total 0 drwxr-xr-x 2 root root 3896 Feb 6 16:03 lost+found -rw-r--r-- 1 root root 5 Feb 6 16:08 test.txt