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
решение_drbd [2019/01/31 09:46]
val [DRBD и Pacemaker]
решение_drbd [2022/11/24 16:08] (current)
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 =====
  
Line 125: Line 162:
   * [[https://​www.theurbanpenguin.com/​drbd-pacemaker-ha-cluster-ubuntu-16-04/​|DRBD Pacemaker HA Cluster on Ubuntu 16.04]]   * [[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:​~#​ apt install psmisc ​  #​fuser
 +
 +root@nodeN:​~#​ systemctl stop drbd.service
  
 root@nodeN:​~#​ systemctl disable drbd.service root@nodeN:​~#​ systemctl disable drbd.service
Line 132: Line 172:
 node1# crm configure node1# crm configure
 </​code><​code>​ </​code><​code>​
-primitive pr_drbd_r0 ocf:​linbit:​drbd params drbd_resource="​r0" op monitor interval="​15s"+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"​ 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
 +</​code><​code>​
 +node1# crm status
 +
 +node1# cat /proc/drbd
 +</​code>​
 +
 +  * Можно использовать для [[Сервис iSCSI#iSCSI target]]
 +==== Монтирование раздела ====
 +<​code>​
 +node1# crm configure
 +</​code><​code>​
 primitive pr_fs_r0 ocf:​heartbeat:​Filesystem params device="/​dev/​drbd0"​ directory="/​disk2"​ fstype="​ext4"​ 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 colocation col_fs_on_drbd inf: pr_fs_r0 ms_drbd_r0:​Master
  
-order or_fs_after_drbd ​inf: ms_drbd_r0:​promote pr_fs_r0:​start+order or_fs_after_drbd ​Mandatory: ms_drbd_r0:​promote pr_fs_r0:​start
  
 commit 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.1548917218.txt.gz · Last modified: 2019/01/31 09:46 by val