Предлагаю небольшую заметку по созданию раздела с кластерной файловой системой 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”
Методы выбираются всегда исходя из конкретной задачи. Для чего вам кластер?
для кластера лучше использовать DRBD + OCFS2 или лучше просто обойтись rsync?
Можно увидеть вывод?
в то время как я использую команду
#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
Что я должен делать?
А эникейщикам какой-нибудь профит с этого всего можно получить? Для бекапов между серверами использую rsync сейчас. Тут же совсем другой уровень, так?
ps: с выходом Squeeze в stable (-;
Debian рулез :)
Это для отказоустойчивых кластеров. Может пригодится при горизонтальном масштабировании приложений.