====== Решение 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]] ===== Подготовка узлов ===== Добавляем жесткие диски, создаем точки монтирования 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).