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/04/25 15:07]
val [Установка и настройка]
решение_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:​~#​ 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 40: 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>​+</​code>​ 
 +**одновременно на двух узлах** 
 +<​code>​
 root@nodeN:​~#​ service drbd start root@nodeN:​~#​ service drbd start
  
Line 52: 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 100: 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 110: 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 127: 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
Line 136: 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 commit
-exit+quit
 </​code><​code>​ </​code><​code>​
 node1# crm status node1# crm status
  
 node1# cat /proc/drbd node1# cat /proc/drbd
 +</​code>​
  
 +  * Можно использовать для [[Сервис iSCSI#iSCSI target]]
 +==== Монтирование раздела ====
 +<​code>​
 node1# crm configure node1# crm configure
 </​code><​code>​ </​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
-exit+quit
 </​code><​code>​ </​code><​code>​
-node1# crm resource move pr_fs_r0 node1.corpX.un+node1# mount | grep ext 
 +</​code>​ 
 + 
 +==== Перемещение раздела ==== 
 + 
 +<​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 show
  
 node1# crm configure delete cli-prefer-pr_fs_r0 node1# crm configure delete cli-prefer-pr_fs_r0
 +</​code>​
  
-node1mount | grep ext+===== Решение ситуации Split-Brain при использовании Pacemaker ​ ===== 
 + 
 +Выбираем узел, данные которого будут затерты. 
 + 
 +<​code>​ 
 +nodeZservice pacemaker stop 
 + 
 +nodeZ# drbdadm invalidate r0 
 + 
 +nodeZ# service pacemaker start 
 + 
 +nodeM# crm resource cleanup pr_fs_r0 ​  # Может не понадобиться
 </​code>​ </​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>​
 +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;
 +        }
 +...
 +}
 +</​code><​code>​
 +
 +...
 +
 +node2# drbdadm primary r0
 +
 +nodeN# systemctl enable drbd
 +</​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.1556194074.txt.gz · Last modified: 2019/04/25 15:07 by val