User Tools

Site Tools


решение_drbd

Решение DRBD

Подготовка узлов

Добавляем жесткие диски, создаем точки монтирования

root@nodeN:~# lsblk

root@nodeN:~# mkdir /disk2

Установка и настройка

Лучше на каждом узле отдельно

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

Запуск сервиса

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

Монтирование раздела

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

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).
решение_drbd.txt · Last modified: 2022/11/24 16:08 by val