Debian Squeeze: DRBD + OCFS2

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

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

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

root@deb-node1:~$ apt-get install drbd-utils
root@deb-node1:~$ 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 на первом узле:

root@deb-node1:~$ invoke-rc.d drbd restart
root@deb-node1:~$ drbdadm create-md r0
Writing meta data...
initializing activity log
NOT initialized bitmap
New drbd meta data block successfully created.
root@deb-node1:~$ drbdadm attach r0
root@deb-node1:~$ drbdadm syncer r0
root@deb-node1:~$ drbdadm connect r0
root@deb-node1:~$ 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

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

root@deb-node2:~$ invoke-rc.d drbd restart
root@deb-node2:~$ drbdadm create-md r0
Writing meta data...
initializing activity log
NOT initialized bitmap
New drbd meta data block successfully created.
root@deb-node2:~$ drbdadm attach r0
root@deb-node2:~$ drbdadm syncer r0
root@deb-node2:~$ drbdadm connect r0
root@deb-node2:~$ 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

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

root@deb-node1:~$ drbdadm -- --overwrite-data-of-peer primary r0

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

root@deb-node1:~$ 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

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

root@deb-node2:~$ 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:

root@deb-node1:~$ invoke-rc.d drbd restart
root@deb-node1:~$ drbdadm disconnect r0
root@deb-node1:~$ drbdadm connect r0
root@deb-node1:~$ drbdadm primary r0

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

root@deb-node2:~$ invoke-rc.d drbd restart
root@deb-node2:~$ drbdadm disconnect r0
root@deb-node2:~$ drbdadm connect r0
root@deb-node2:~$ drbdadm primary r0

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

root@deb-node1:~$ 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

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

root@deb-node1:~$ invoke-rc.d o2cb restart
root@deb-node1:~$ invoke-rc.d ocfs2 restart

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

root@deb-node1:~$ mkfs -t ocfs2 -N 2 -L ocfs2_drbd0 /dev/drbd0
root@deb-node1:~$ mkdir /cluster
root@deb-node1:~$ mount -t ocfs2 /dev/drbd0 /cluster

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

root@deb-node2:~$ mkdir /cluster
root@deb-node2:~$ mount -t ocfs2 /dev/drbd0 /cluster

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

root@deb-node1:~$ echo "test" > /cluster/test.txt
root@deb-node1:~$ 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

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

root@deb-node2:~$ 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

6 комментариев “Debian Squeeze: DRBD + OCFS2”

Комментирование закрыто.