Debian Squeeze: DRBD + OCFS2 6


Предлагаю небольшую заметку по созданию раздела с кластерной файловой системой для двух серверов под управлением 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

6 мыслей про “Debian Squeeze: DRBD + OCFS2

  • Rascal От автора

    Методы выбираются всегда исходя из конкретной задачи. Для чего вам кластер?

  • Alex

    для кластера лучше использовать DRBD + OCFS2 или лучше просто обойтись rsync?

  • Rascal От автора

    Можно увидеть вывод?

     cat /proc/drbd 
  • febrilian

    в то время как я использую команду
    #mkfs -t ocfs2 -N 2 -L ocfs2_drbd0 /dev/drbd0
    mkfs.ocfs2 1.4.4
    Cluster stack: classic o2cb
    mkfs.ocfs2: Could not open device /dev/drbd0: Read-only file system

    Что я должен делать?

  • ostin

    А эникейщикам какой-нибудь профит с этого всего можно получить? Для бекапов между серверами использую rsync сейчас. Тут же совсем другой уровень, так?

    ps: с выходом Squeeze в stable (-;

    • Rascal От автора

      Debian рулез 🙂

      Это для отказоустойчивых кластеров. Может пригодится при горизонтальном масштабировании приложений.

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