====== Решение DRBD ======
* [[https://ru.wikipedia.org/wiki/DRBD|wikipedia DRBD]]
* [[https://help.ubuntu.ru/wiki/руководство_по_ubuntu_server/кластеризация/drbd|DRBD (Руководство по Ubuntu Server)]]
* [[https://github.com/sbuelow/zabbix-template-drbd|sbuelow/zabbix-template-drbd]]
* [[https://sidmid.ru/1-%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0-drbd9/|НАСТРОЙКА DRBD9]]
* [[https://www.theurbanpenguin.com/create-3-node-drbd-9-cluster-using-drbd-manage/|Create a 3 Node DRBD 9 Cluster Using DRBD Manage]]
===== Подготовка узлов =====
Добавляем жесткие диски, создаем точки монтирования
root@nodeN:~# lsblk
root@nodeN:~# mkdir /disk2
===== Установка и настройка =====
* В Debian для использования postfix надо предварительно [[Сервис MTA#Установка и настройка MTA на обработку почты домена hostname]]
* В Ubuntu postfix по умолчание, запустится визард
Лучше на каждом узле отдельно
root@nodeN:~# apt install drbd-utils
root@nodeN:~# cat /etc/drbd.d/r0.res
resource r0 {
syncer { rate 1000M; }
handlers {
split-brain "/usr/lib/drbd/notify-split-brain.sh root";
}
on node1.corpX.un {
device /dev/drbd0;
disk /dev/sdb;
# disk /dev/sdb1;
# address 10.Z.M.100+X:7788;
address 192.168.X.1:7788;
meta-disk internal;
}
on node2.corpX.un {
device /dev/drbd0;
disk /dev/sdb;
# disk /dev/sdb1;
# address 10.Z.M.200+X:7788;
address 192.168.X.2:7788;
meta-disk internal;
}
}
===== Инициализация =====
root@nodeN:~# drbdadm create-md r0
**одновременно на двух узлах**
root@nodeN:~# service drbd start
root@nodeN:~# ps ax | grep drbd
root@node1:~# drbdadm -- --overwrite-data-of-peer primary r0
===== Мониторинг =====
root@nodeN:~# cat /proc/drbd
root@nodeN:~# watch cat /proc/drbd
root@nodeN:~# drbdadm sh-resources
root@nodeN:~# drbdadm cstate r0
root@nodeN:~# drbdadm dstate r0
root@nodeN:~# drbdadm role r0
===== Форматирование раздела =====
**можно не ожидая окончания синхронизации**
root@node1:~# mkfs.ext4 /dev/drbd0
root@node1:~# mount /dev/drbd0 /disk2
root@node1:~# mount | grep ext
===== Смена ролей узлов =====
* Может потребоваться включить в blacklist для [[Сервис multipath]]
* !!! можно не дожидаясь окончания синхронизации
root@node1:~# cp /etc/hostname /disk2
root@node1:~# umount /disk2
root@node1:~# drbdadm secondary r0
root@node2:~# drbdadm primary r0
root@node2:~# mount /dev/drbd0 /disk2
root@node2:~# cat /disk2/hostname
===== Отключение зеркалируемого раздела =====
root@node2:~# umount /disk2
root@node2:~# drbdadm secondary r0
===== Автозапуск =====
root@nodeN:~# systemctl enable drbd.service
===== Восстановление после сбоя =====
* Устанавливаем новый диск
root@nodeNEW:~# drbdadm create-md r0
root@nodeNEW:~# service drbd start
===== Решение ситуации Split-Brain =====
nodeN# mail
nodeN# service drbd stop
Выбираем узел, данные которого будут затерты (Для поиска и "спасения" модифицированных файлов можно воспользоваться [[Команда find]])
nodeZ# drbdadm invalidate r0
Одновременно на двух узлах:
root@nodeN:~# service drbd start
Дополнительные команды
nodeN# drbdadm detach r0 --force
nodeZ# drbdadm invalidate r0
nodeN# drbdadm connect r0
===== DRBD и Heartbeat =====
root@nodeN:~# service heartbeat stop
root@nodeN:~# cat /etc/ha.d/haresources
node1.corpX.un drbddisk Filesystem::/dev/drbd0::/disk2::ext4
root@nodeN:~# service heartbeat start
===== DRBD и Pacemaker =====
* [[https://www.theurbanpenguin.com/drbd-pacemaker-ha-cluster-ubuntu-16-04/|DRBD Pacemaker HA Cluster on Ubuntu 16.04]]
==== Запуск сервиса ====
root@nodeN:~# apt install psmisc #fuser
root@nodeN:~# systemctl stop drbd.service
root@nodeN:~# systemctl disable drbd.service
node1# crm configure
primitive pr_drbd_r0 ocf:linbit:drbd params drbd_resource="r0"
ms ms_drbd_r0 pr_drbd_r0 meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true"
commit
quit
node1# crm status
node1# cat /proc/drbd
* Можно использовать для [[Сервис iSCSI#iSCSI target]]
==== Монтирование раздела ====
node1# crm configure
primitive pr_fs_r0 ocf:heartbeat:Filesystem params device="/dev/drbd0" directory="/disk2" fstype="ext4"
colocation col_fs_on_drbd inf: pr_fs_r0 ms_drbd_r0:Master
order or_fs_after_drbd Mandatory: ms_drbd_r0:promote pr_fs_r0:start
commit
quit
node1# mount | grep ext
==== Перемещение раздела ====
node1# crm resource move pr_fs_r0 node1
node1# crm configure location cli-prefer-pr_fs_r0 pr_fs_r0 role=Started inf: node1
node1# crm configure show
node1# crm configure delete cli-prefer-pr_fs_r0
===== Решение ситуации Split-Brain при использовании Pacemaker =====
Выбираем узел, данные которого будут затерты.
nodeZ# service pacemaker stop
nodeZ# drbdadm invalidate r0
nodeZ# service pacemaker start
nodeM# crm resource cleanup pr_fs_r0 # Может не понадобиться
===== Конфигурация с двумя primaries =====
* [[https://habr.com/ru/post/445612/|Кластерное хранилище для небольших web-кластеров на базе drbd+ocfs2]]
* [[Сервис OCFS2]]
* Пакет Pacemaker [[Пакет Pacemaker#Запуск после монтирования файловых систем]]
root@nodeN:~# cat /etc/drbd.d/r0.res
resource r0 {
...
startup {
become-primary-on both;
wfc-timeout 1;
}
net {
allow-two-primaries;
after-sb-0pri discard-zero-changes;
after-sb-1pri discard-secondary;
after-sb-2pri disconnect;
}
...
}
...
node2# drbdadm primary r0
nodeN# systemctl enable drbd
===== Дополнительные материалы =====
==== Debian9 ====
debian9# primitive pr_drbd_r0 ocf:linbit:drbd params drbd_resource="r0" op monitor interval="15s"
debian9#order or_fs_after_drbd inf: ms_drbd_r0:promote pr_fs_r0:start
==== OCFS2 ====
Доброго времени суток.
DRBD можно совместить с OCFS2 так:
1. Конфигурируем ресурс DRBD как обычный (без поддержки нескольких primary)
2. Инициализируем DRBD (create-md, service drbd start) и выключаем
3. Конфигурируем ресурс DRBD как во вложении
4. Конфигурируем OCFS (cluster.conf из вложения + dpkg-reconfigure
ocfs2-utils), запускаем
5. Запускаем DRBD, создаём ФС.
Опирался на статью: http://www.drbd.org/users-guide/ch-ocfs2.html (без
использования Pacemaker).