Поднимаем DRBD+OCFS2 на Debian 6 Squeeze

DRBD — сетевой RAID-массив, частями которого являются размещенные на разных машинах блочные устройства /dev/drbd. При изменении данных на примонтированном локально устройстве происходит синхронизация измененными блоками по сети. В результате чего имеем удаленную актуальную копию, используемую в качестве резервной в случае исчезновения связи с основным хранилищем.
Более подробную информацию можно найти в официальной документации, дальше же лаконичное how-to по быстрой настройке кластера из двух DRBD-нод.
Ставим необходимый софт:

apt-get install drbd8-utils ocfs2-tools

DRBD

  • Конфигурируем /etc/drbd.conf (конфиг должен быть максимально одинаков на обеих машинах):

    global {
    usage-count yes;
    }
    common {
    protocol C;
    syncer {
    rate 10M;
    al-extents 257;
    }
    }
    resource netdisk { ### netdisk имя моего кластера
    protocol C;
    startup {
    become-primary-on both; ### For Primary/Primary ###
    degr-wfc-timeout 60;
    wfc-timeout 0; # указываем DRBD ждать соединения с удалёнными ресурсами неограниченно долго
    }
    disk {
    on-io-error detach;
    }
    net {
    allow-two-primaries; ### For Primary/Primary ###
    cram-hmac-alg sha1;
    shared-secret «FooFunFactory»;
    after-sb-0pri discard-zero-changes;
    after-sb-1pri violently-as0p;
    after-sb-2pri violently-as0p;
    max-buffers 2048;
    ko-count 4;
    }
    on node1 { # node1 имя виртуальной машины и имя ноды первого узла
    device /dev/drbd0;
    flexible-meta-disk /dev/sdb1;
    disk /dev/sdb2; # дополнительный раздел
    address 10.10.10.1:7777; # IP адрес и произвольный порт первой ноды
    }
    on node2 { # node2 соответственно для второго узла
    device /dev/drbd0;
    flexible-meta-disk /dev/sdb1;
    disk /dev/sdb2; # дополнительный раздел
    address 10.10.10.2:7777; # IP адрес и порт второй ноды
    }
    }

  • Прописываем обе ноды в /etc/hosts на обеих машинах

    10.10.10.1 node1
    10.10.10.2 node2

  • Создаем 2 пары ключей и обмениваемся ими между серверами (повторяем то же самое для второго сервера):
    ssh-keygen
    ssh-copy-id root@10.10.10.1
  • Очищаем выделенные под кластер разделы дисков:
    dd if=/dev/zero bs=1M count=1 of=/dev/sdb1
    dd if=/dev/zero bs=1M count=1 of=/dev/sdb2
  • Инициализируем drbd-модуль (на обеих нодах):
    modprobe drbd
  • Создаем устройство с метаданными (им может быть отдельный раздел или часть выделенного под кластер пространства):
    drbdadm -- --force create-md netdisk
  • Поднимаем кластер (на обеих нодах):
    drbdadm up netdisk

Проверку состояния сетевого RAID-массива можно производить командой 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:501760

Как видим, на этом этапе у нас должно получиться 2 раздельных ноды в состоянии Secondary/Inconsistent.

Следующим шагом необходимо синхронизировать данных между частями кластера, явно выделив главный и вторичный члены кластера. Для этого выполняем ТОЛЬКО на одной ноде команду

drbdadm -- --overwrite-data-of-peer primary netdisk

Если связь между узлами в порядке и версии программы и системных файлов совпадают, начнется синхронизация. Наблюдать за которой можно командой watch cat /proc/drbd

Every 2,0s: cat /proc/drbd Tue Feb 28 17:18:25 2012
version: 8.3.7 (api:88/proto:86-91)
srcversion: EE47D8BF18AC166BE219757
0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r—-
ns:249856 nr:0 dw:0 dr:250056 al:0 bm:15 lo:32 pe:0 ua:32 ap:0 ep:1 wo:b oos:251904
[=========>……….] sync’ed: 50.5% (251904/501760)K
finish: 0:00:22 speed: 11,256 (10,408) K/sec

Процесс синхронизации занимает некоторое время, можно увеличить скорость первичного обмена данными, для этого необходимо выполнить команду

drbdsetup /dev/drbd0 syncer -r 110M

. После окончания синхронизации вернуться к настройкам из файла /etc/drbd.conf можно командой

drbdadm adjust netdisk

OCFS2

  1. Конфигурируем
    /etc/ocfs2/cluster.conf

    node:
    name = node1
    cluster = ocfs2
    number = 0
    ip_address = 10.10.10.1
    ip_port = 7778

    node:
    name = node2
    cluster = ocfs2
    number = 1
    ip_address = 10.10.10.2
    ip_port = 7778

    cluster:
    name = ocfs2
    node_count = 2

  2. Настраиваем механизм работы OCFS-драйвера (на обеих нодах, YES или Enter по умолчанию):
    dpkg-reconfigure ocfs2-tools
  3. Форматируем новый сетевой диск (на одной ноде, которая Primary):
    mkfs -t ocfs2 -N 2 -L ocfs2_drbd0 /dev/drbd0
  4. После завершения форматирования можно вывести обе ноды в режим чтения/записи:
    drbdadm primary netdisk
  5. После этого устройство монтируется в систему как обычный локальный диск:
    mkdir /mnt/disk
    mount -t ocfs2 /dev/drbd0 /mnt/disk

Обновление модуля DRBD

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

apt-get install git-core git-buildpackage fakeroot debconf-utils docbook-xml docbook-xsl dpatch xsltproc autoconf flex

mkdir drbd
cd drbd
git clone http://git.drbd.org/drbd-8.3.git .
git checkout drbd-8.3.10
dpkg-buildpackage -rfakeroot -b -uc
make clean all
make install

Ссылки: