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 [2019/09/05 08:53]
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 15: Line 16:
 ===== Установка и настройка ===== ===== Установка и настройка =====
  
-  * Потянет ​exim+  * В Debian для использования postfix ​надо предварительно [[Сервис MTA#​Установка и настройка MTA на обработку почты домена hostname]] 
 +  * В Ubuntu postfix по умолчание,​ запустится визард
  
 <​code>​ <​code>​
 +Лучше на каждом узле отдельно
 +
 root@nodeN:​~#​ apt install drbd-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 43: 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 57: 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 105: 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 115: 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 132: 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 141: 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
 +==== Монтирование раздела ====
 +<​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>​
  
-node1# crm resource cleanup pr_fs_r0+===== Решение ситуации Split-Brain при использовании Pacemaker ​ =====
  
-node1mount | grep ext+Выбираем узел, данные которого будут затерты. 
 + 
 +<​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.txt · Last modified: 2022/11/24 16:08 by val