Кластерное Хранилище Кардиостимулятора + Drbd (Двойной Основной) + Ctdb

Добрый день, хабровчане.

Мы получили задачу — развернуть отказоустойчивое хранилище High Available с помощью pacamaker + drbd (в режиме Dual Primary) + clvmd + ctdb, которое будет смонтировано на сервере.

Оговорюсь, что со всеми этими инструментами я встречаюсь впервые и буду рад критике и дополнениям/исправлениям.

Инструкций конкретно по этому подключению в интернете либо нет, либо информация устарела.

На данный момент всё работает, но есть одна проблема, решение которой я надеюсь найти в ближайшем будущем.

Все действия необходимо выполнять на обоих узлах, если не указано иное.

Давайте начнем.

У нас есть две виртуальные машины на CentOS 7. 1) На всякий случай вносим их в /etc/hosts

  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
   

192.168.0.1 node1 192.168.0.2 node2

2) В стандартных репозиториях DRBD нет, поэтому нужно подключать сторонний.



rpm --import https://www.elrepo.org/RPM-GPG-KEY-elrepo.org rpm -Uvh https://www.elrepo.org/elrepo-release-7.0-3.el7.elrepo.noarch.rpm

3) Установите drbd версии 8.4 (мне не удалось установить 9.0 в режиме Dual Primary)

yum install -y kmod-drbd84 drbd84-utils

4) Активируем и включаем в автозагрузку модуль ядра drbd

modprobe drbd echo drbd > /etc/modules-load.d/drbd.conf

5) Создайте файл конфигурации для ресурса drbd /etc/drbd.d/r0.res.

resource r0 { protocol C; device /dev/drbd0; meta-disk internal; disk /dev/sdb; net { allow-two-primaries; } disk { fencing resource-and-stonith; } handlers { fence-peer "/usr/lib/drbd/crm-fence-peer.sh"; after-resync-target "/usr/lib/drbd/crm-unfence-peer.sh"; } on node1 { address 192.168.0.1:7788; } on node2 { address 192.168.0.2:7788; }

6) Отключить блок drbd (за него в дальнейшем будет отвечать кардиостимулятор), создать метаданные для drbd-диска, поднять ресурс

systemctl disable drbd drbdadm create-md r0 drbdadm up r0

7) На первом узле сделайте ресурс основным

drbdadm primary --force r0

8) Установите кардиостимулятор

yum install -y pacemaker pcs resource-agents

9) Установить пароль пользователю hacluster для авторизации на узлах

echo CHANGEME | passwd --stdin hacluster

10) Запускаем кардиостимулятор на обоих узлах

systemctl enable pcsd systemctl start pcsd

11) Войдите в кластер.

С этого этапа делаем все на одном узле

pcs cluster auth node1 node2 -u hacluster

12) Создайте кластер с именем samba_cluster.

pcs cluster setup --force --name samba_cluster node1 node2

13) активировать узлы

pcs cluster enable --all pcs cluster start --all

14) Так как в качестве серверов мы используем виртуальные машины, то отключаем механизм STONITH

pcs property set stonith-enabled=false pcs property set no-quorum-policy=ignore

15) Создать VIP

pcs resource create virtual_ip ocf:heartbeat:IPaddr2 ip=192.168.0.10 cidr_netmask=24 op monitor interval=60s

16) Создайте ресурс drbd.

pcs cluster cib drbd_cfg pcs -f drbd_cfg resource create DRBD ocf:linbit:drbd drbd_resource=r0 op monitor interval=60s pcs -f drbd_cfg resource master DRBDClone DRBD master-max=2 master-node-max=1 clone-node-max=1 clone-max=2 notify=true interleave=true pcs cluster cib-push drbd_cfg

17) Установите необходимые пакеты для clvm и подготовьте clvm.

yum install -y lvm2-cluster gfs2-utils /sbin/lvmconf --enable-cluster

18) Добавьте ресурсы dlm и clvd в кардиостимулятор.



pcs resource create dlm ocf:pacemaker:controld op monitor interval=30s on-fail=fence clone interleave=true ordered=true pcs resource create clvmd ocf:heartbeat:clvm op monitor interval=30s on-fail=fence clone interleave=true ordered=true pcs constraint colocation add clvmd-clone with dlm-clone

19) На этом этапе запуск clvmd и dlm должен выдать ошибку.

Перейдите в веб-интерфейс кардиостимулятора.

192.168.0.1 :2224. Если кластер не появился, то добавьте его «Добавить существующий».

Далее переходим в Ресурсы — dlm — необязательные аргументы и устанавливаем значениеallow_stonith_disabled=true. 20) Установите очередь загрузки ресурсов

pcs constraint order start DRBDClone then dlm-clone pcs constraint order start dlm-clone then clvmd-clone

21) Запрещаем LVM запись кэша и очищаем его.

На обоих узлах

sed -i 's/write_cache_state = 1/write_cache_state = 0/' /etc/lvm/lvm.conf rm /etc/lvm/cache/*

22) Отредактируйте /etc/lvm/lvm.conf, чтобы lvm не видел /dev/sdb. На обоих узлах

# This configuration option has an automatic default value. # filter = [ "a|.

*/|" ] filter = [ "r|^/dev/sdb$|" ]

23) Создайте раздел CLVM. Мы делаем это только на одном узле

$ vgcreate -Ay -cy cl_vg /dev/drbd0 Physical volume "/dev/drbd0" successfully created. Clustered volume group "cl_vg" successfully created $ lvcreate -l100%FREE -n r0 cl_vg Logical volume "r0" created.

24) Размечаем раздел в gfs2.

mkfs.gfs2 -j2 -p lock_dlm -t drbd-gfs2:r0 /dev/cl_vg/r0

25) Далее добавляем монтирование этого раздела в кардиостимулятор и указываем ему загружаться после clvmd

pcs resource create fs ocf:heartbeat:Filesystem device="/dev/cl_vg/r0" directory="/mnt/" fstype="gfs2" --clone pcs constraint order start clvmd-clone then fs-clone

26) Теперь очередь ctdb, который запустит самбу

yum install -y samba ctdb cifs-utils

27) Отредактируйте конфиг /etc/ctdb/ctdbd.conf.

CTDB_RECOVERY_LOCK="/mnt/ctdb/.

ctdb.lock" CTDB_NODES=/etc/ctdb/nodes CTDB_MANAGES_SAMBA=yes CTDB_LOGGING=file:/var/log/ctdb.log CTDB_DEBUGLEVEL=NOTICE

28) Создайте файл со списком узлов.

ВНИМАНИЕ! После каждого IP-адреса в списке узлов должен быть разрыв строки.

В противном случае узел выйдет из строя во время инициализации.



cat /etc/ctdb/nodes 192.168.0.1 192.168.0.2

29) Добавляем в конфиг /etc/samba/smb.conf

[global] clustering = yes private dir = /mnt/ctdb lock directory = /mnt/ctdb idmap backend = tdb2 passdb backend = tdbsam [test] comment = Cluster Share path = /mnt browseable = yes writable = yes

30) И наконец создаем ресурс ctdb и указываем, что он должен загружаться после

pcs constraint order start fs-clone then samba

А теперь о проблеме, которую я пока не решил.

Если перезагрузить узел, то все соединение рушится, так как drbd нужно время для активации /dev/drbd0. DLM не видит раздел, так как он еще не активирован и не запускается и т.д. Временное решение — вручную активировать раздел и перезапустить ресурсы кардиостимулятора.



vgchage -a y pcs resource refresh

Теги: #Системное администрирование #DRBD #Samba #pacemaker #CTDB #clvm #gfs2

Вместе с данным постом часто просматривают: