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
- Конфигурируем
/etc/ocfs2/cluster.conf
node:
name = node1
cluster = ocfs2
number = 0
ip_address = 10.10.10.1
ip_port = 7778node:
name = node2
cluster = ocfs2
number = 1
ip_address = 10.10.10.2
ip_port = 7778cluster:
name = ocfs2
node_count = 2 - Настраиваем механизм работы OCFS-драйвера (на обеих нодах, YES или Enter по умолчанию):
dpkg-reconfigure ocfs2-tools
- Форматируем новый сетевой диск (на одной ноде, которая Primary):
mkfs -t ocfs2 -N 2 -L ocfs2_drbd0 /dev/drbd0
- После завершения форматирования можно вывести обе ноды в режим чтения/записи:
drbdadm primary netdisk
- После этого устройство монтируется в систему как обычный локальный диск:
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
Ссылки: