User Tools

Site Tools


решение_drbd

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Last revision Both sides next revision
решение_drbd [2017/10/06 12:28]
val
решение_drbd [2022/05/22 07:07]
val [Установка и настройка]
Line 1: Line 1:
 ====== Решение DRBD ====== ====== Решение DRBD ======
  
-  * [[http://www.drbd.org/]] +  * [[https://ru.wikipedia.org/wiki/​DRBD|wikipedia DRBD]] 
-  * [[http://​help.ubuntu.ru/​wiki/​руководство_по_ubuntu_server/​кластеризация/​drbd|DRBD (Руководство по Ubuntu Server)]]+  * [[https://​help.ubuntu.ru/​wiki/​руководство_по_ubuntu_server/​кластеризация/​drbd|DRBD (Руководство по Ubuntu Server)]] 
 +  * [[https://​github.com/​sbuelow/​zabbix-template-drbd|sbuelow/​zabbix-template-drbd]]
 ===== Подготовка узлов ===== ===== Подготовка узлов =====
  
Line 8: Line 9:
  
 <​code>​ <​code>​
-root@nodeN:​~# ​lshw -C disk+root@nodeN:​~# ​lsblk
  
 root@nodeN:​~#​ mkdir /disk2 root@nodeN:​~#​ mkdir /disk2
Line 14: Line 15:
  
 ===== Установка и настройка ===== ===== Установка и настройка =====
 +
 +  * В Debian для использования postfix надо предварительно [[Сервис MTA#​Установка и настройка MTA на обработку почты домена hostname]]
 +  * В Ubuntu postfix по умолчание,​ запустится визард
 +
 <​code>​ <​code>​
-root@nodeN:​~#​ apt install drbd8-utils+Лучше на каждом узле отдельно
  
-root@nodeN:​~# ​systemctl enable ​drbd.service+root@nodeN:​~# ​apt install ​drbd-utils
  
-root@nodeN:​~#​ cat /​etc/​drbd.d/​global_common.conf 
-</​code><​code>​ 
-... 
-        startup { 
-... 
-                wfc-timeout 30; 
-        } 
-... 
-</​code><​code>​ 
 root@nodeN:​~#​ cat /​etc/​drbd.d/​r0.res root@nodeN:​~#​ cat /​etc/​drbd.d/​r0.res
 </​code><​code>​ </​code><​code>​
 resource r0 { resource r0 {
 +        syncer { rate 1000M; }
 +        handlers {
 +                split-brain "/​usr/​lib/​drbd/​notify-split-brain.sh root";
 +        }
         on node1.corpX.un {         on node1.corpX.un {
                 device /dev/drbd0;                 device /dev/drbd0;
                 disk /dev/sdb;                 disk /dev/sdb;
 #                disk /​dev/​sdb1; ​ #                disk /​dev/​sdb1; ​
-                ​address 10.Z.M.100+X:​7788;​+#                ​address 10.Z.M.100+X:7788; 
 +                address 192.168.X.1:7788;
                 meta-disk internal;                 meta-disk internal;
         }         }
Line 42: Line 43:
                 disk /dev/sdb;                 disk /dev/sdb;
 #                disk /​dev/​sdb1;  ​ #                disk /​dev/​sdb1;  ​
-                ​address 10.Z.M.200+X:​7788;​+#                ​address 10.Z.M.200+X:7788; 
 +                address 192.168.X.2:7788;
                 meta-disk internal;                 meta-disk internal;
         }         }
 } }
-</​code><​code>​+</​code>​ 
 +===== Инициализация ===== 
 + 
 +<​code>​
 root@nodeN:​~#​ drbdadm create-md r0 root@nodeN:​~#​ drbdadm create-md r0
 </​code>​ </​code>​
-Одновременно на двух узлах ​(в ubuntu16 может потребоваться перезагрузка):​+**одновременно на двух узлах**
 <​code>​ <​code>​
 root@nodeN:​~#​ service drbd start root@nodeN:​~#​ service drbd start
Line 56: Line 61:
 </​code><​code>​ </​code><​code>​
 root@node1:​~#​ drbdadm -- --overwrite-data-of-peer primary r0 root@node1:​~#​ drbdadm -- --overwrite-data-of-peer primary r0
 +</​code>​
  
 +===== Мониторинг =====
 +<​code>​
 root@nodeN:​~#​ cat /proc/drbd root@nodeN:​~#​ cat /proc/drbd
 root@nodeN:​~#​ watch 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
 </​code>​ </​code>​
-Можно не ожидая синхронизации:+ 
 +===== Форматирование раздела ===== 
 + 
 +**можно не ожидая окончания синхронизации**
 <​code>​ <​code>​
 root@node1:​~#​ mkfs.ext4 /dev/drbd0 root@node1:​~#​ mkfs.ext4 /dev/drbd0
  
 root@node1:​~#​ mount /dev/drbd0 /disk2 root@node1:​~#​ mount /dev/drbd0 /disk2
 +
 +root@node1:​~#​ mount | grep ext
 </​code>​ </​code>​
 ===== Смена ролей узлов ===== ===== Смена ролей узлов =====
  
-**после окончания синхронизации**+  ​Может ​потребоваться включить в blacklist для [[Сервис multipath]] 
 +  * !!! можно не дожидаясь ​окончания синхронизации
  
 <​code>​ <​code>​
Line 84: Line 106:
 root@node2:​~#​ umount /disk2 root@node2:​~#​ umount /disk2
 root@node2:​~#​ drbdadm secondary r0 root@node2:​~#​ drbdadm secondary r0
 +</​code>​
 +
 +
 +===== Автозапуск =====
 +<​code>​
 +root@nodeN:​~#​ systemctl enable drbd.service
 </​code>​ </​code>​
  
Line 98: Line 126:
  
 <​code>​ <​code>​
 +nodeN# mail
 +
 nodeN# service drbd stop nodeN# service drbd stop
 </​code>​ </​code>​
-Выбираем узел, данные которого будут затерты.+Выбираем узел, данные которого будут затерты ​(Для поиска и "​спасения"​ модифицированных файлов можно воспользоваться [[Команда find]])
 <​code>​ <​code>​
 nodeZ# drbdadm invalidate r0 nodeZ# drbdadm invalidate r0
Line 108: Line 138:
 root@nodeN:​~#​ service drbd start root@nodeN:​~#​ service drbd start
 </​code>​ </​code>​
 +Дополнительные команды
 +<​code>​
 +nodeN# drbdadm detach r0 --force
  
 +nodeZ# drbdadm invalidate r0
 +
 +nodeN# drbdadm connect r0
 +</​code>​
 ===== DRBD и Heartbeat ===== ===== DRBD и Heartbeat =====
  
 <​code>​ <​code>​
-root@nodeN:​~#​ systemctl disable drbd.service 
- 
 root@nodeN:​~#​ service heartbeat stop root@nodeN:​~#​ service heartbeat stop
  
Line 125: Line 160:
 ===== DRBD и Pacemaker ===== ===== DRBD и Pacemaker =====
  
-  * [[https://docs.linbit.com/doc/users-guide-83/ch-pacemaker/|Integrating ​DRBD with Pacemaker ​clusters]]+  * [[https://www.theurbanpenguin.com/drbd-pacemaker-ha-cluster-ubuntu-16-04/|DRBD Pacemaker ​HA Cluster on Ubuntu 16.04]]
  
 +==== Запуск сервиса ====
 <​code>​ <​code>​
 +root@nodeN:​~#​ apt install psmisc ​  #​fuser
 +
 +root@nodeN:​~#​ systemctl stop drbd.service
 +
 root@nodeN:​~#​ systemctl disable drbd.service root@nodeN:​~#​ systemctl disable drbd.service
  
-crm(live)configureprimitive pr_drbd_r0 ocf:​linbit:​drbd params drbd_resource="​r0" op monitor interval="​15s"+node1# ​crm configure 
 +</​code><​code>​ 
 +primitive pr_drbd_r0 ocf:​linbit:​drbd params drbd_resource="​r0"​
  
-crm(live)configure# ​ms ms_drbd_r0 pr_drbd_r0 meta master-max="​1"​ master-node-max="​1"​ clone-max="​2"​ clone-node-max="​1"​ notify="​true"​+ms ms_drbd_r0 pr_drbd_r0 meta master-max="​1"​ master-node-max="​1"​ clone-max="​2"​ clone-node-max="​1"​ notify="​true"​
  
-crm(live)configure#​ primitive pr_fs_r0 ocf:​heartbeat:​Filesystem params device="/​dev/​drbd0"​ directory="/​disk2"​ fstype="​ext4"​+commit 
 +quit 
 +</​code><​code>​ 
 +node1# ​crm status
  
-crm(live)configurecolocation col_fs_on_drbd inf: pr_fs_r0 ms_drbd_r0:​Master+node1cat /​proc/​drbd 
 +</​code>​
  
-crm(live)configure# order or_fs_after_drbd infms_drbd_r0:​promote pr_fs_r0:start+  * Можно использовать для iSCSI 
 +==== Монтирование раздела ==== 
 +<​code>​ 
 +node1# ​crm configure 
 +</​code><​code>​ 
 +primitive pr_fs_r0 ocf:heartbeat:Filesystem params device="/​dev/​drbd0"​ directory="/​disk2"​ fstype="​ext4"​
  
-crm(live)configure# ​commit+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
 </​code><​code>​ </​code><​code>​
-# crm resource move pr_fs_r0 ​node1.corpX.un+node1# mount | grep ext 
 +</​code>​
  
-# crm configure show+==== Перемещение раздела ==== 
 + 
 +<​code>​ 
 +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 
 +</​code>​ 
 + 
 +===== Решение ситуации Split-Brain при использовании Pacemaker ​ ===== 
 + 
 +Выбираем узел, данные которого будут затерты. 
 + 
 +<​code>​ 
 +nodeZ# service pacemaker stop 
 + 
 +nodeZ# drbdadm invalidate r0 
 + 
 +nodeZ# service pacemaker start 
 + 
 +nodeM# crm resource cleanup pr_fs_r0 ​  # Может не понадобиться 
 +</​code>​ 
 +===== Конфигурация с двумя primaries ===== 
 + 
 +  * [[https://​habr.com/​ru/​post/​445612/​|Кластерное хранилище для небольших web-кластеров на базе drbd+ocfs2]] 
 +  * [[Сервис OCFS2]] 
 +  * Пакет Pacemaker [[Пакет Pacemaker#​Запуск после монтирования файловых систем]] 
 + 
 +<​code>​ 
 +root@nodeN:​~#​ cat /​etc/​drbd.d/​r0.res
 </​code><​code>​ </​code><​code>​
 +resource r0 {
 ... ...
-location cli-prefer-pr_fs_r0 pr_fs_r0 role=Started inf: node1.corpX.un+        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;​ 
 +        }
 ... ...
 +}
 +</​code><​code>​
 +
 +...
 +
 +node2# drbdadm primary r0
 +
 +nodeN# systemctl enable drbd
 </​code>​ </​code>​
 +
 ===== Дополнительные материалы ===== ===== Дополнительные материалы =====
  
 +==== Debian9 ====
 +<​code>​
 +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
 +</​code>​
 +==== OCFS2 ====
 <​code>​ <​code>​
 Доброго времени суток. Доброго времени суток.
решение_drbd.txt · Last modified: 2022/11/24 16:08 by val