Ограничение Ping не перемещает первичный DRBD

У меня есть двухузловой кластер (на базе CentOS7), предназначенный для работы в активном/пассивном режиме с ресурсами DRBD и ресурсами приложений, зависящими от них, и IP-адресом кластера, зависящим от приложений посредством ограничений порядка. У меня нет ограничений по размещению. Вместо этого все мои ресурсы находятся в одной группе, поэтому они мигрируют все вместе.

На каждом узле есть 2 сетевых интерфейса: один — это локальная сеть, а другой — частное двухточечное соединение. DRBD настроен на использование двухточечного соединения. Обе сети настроены на RRP, при этом локальная сеть является основным соединением Pacemaker/Corosync, а двухточечное соединение выступает в качестве резервного путем установки пассивного режима RRP.

Аварийное переключение путем перезагрузки или отключения активного узла работает нормально, и все ресурсы успешно переносятся на оставшийся узел. На этом хорошие новости заканчиваются.

У меня есть ресурс ping, пингующий хост, доступный на интерфейсе LAN, с ограничением местоположения, основанным на ping, чтобы переместить группу ресурсов на пассивный узел, если работающий узел потеряет связь с хостом ping. Однако эта часть не работает правильно.

Когда я вытягиваю сетевой кабель LAN на активном узле, активный узел больше не может пинговать хост ping, и ресурсы останавливаются на текущем активном узле - как и ожидалось. Имейте в виду, что Corosync по-прежнему может взаимодействовать друг с другом при переходе в частную сеть из-за RRP. Однако ресурсы нельзя запустить на ранее пассивном узле (тот, который все еще может подключаться к шлюзу и который должен стать активным сейчас), поскольку ресурсы DRBD остаются первичными. на узле, у которого был протянут кабель, чтобы файловые системы не могли быть смонтированы на том узле, который должен взять на себя управление. Имейте в виду, что в это время DRBD продолжает подключаться к частной сети, так как его вилка не была отключена.

Я не могу понять, почему ограничение местоположения на основе ping не корректно переносит группу ресурсов на первичную/вторичную настройку DRBD. Я надеялся, что кто-то здесь может помочь. Ниже приведено состояние после того, как я вытащил кабель, и кластер зашел так далеко, как только мог, чтобы мигрировать, прежде чем застрял.

[root@za-mycluster1 ~]# pcs status
Cluster name: MY_HA
Stack: corosync
Current DC: za-mycluster1.sMY.co.za (version 1.1.20-5.el7-3c4c782f70) - partition with quorum
Last updated: Fri Apr 24 19:12:57 2020
Last change: Fri Apr 24 16:39:45 2020 by hacluster via crmd on za-mycluster1.sMY.co.za

2 nodes configured
14 resources configured

Online: [ za-mycluster1.sMY.co.za za-mycluster2.sMY.co.za ]

Full list of resources:

 Master/Slave Set: LV_DATAClone [LV_DATA]
     Masters: [ za-mycluster1.sMY.co.za ]
     Slaves: [ za-mycluster2.sMY.co.za ]
 Resource Group: mygroup
     LV_DATAFS  (ocf::heartbeat:Filesystem):    Stopped
     LV_POSTGRESFS      (ocf::heartbeat:Filesystem):    Stopped
     postgresql_9.6     (systemd:postgresql-9.6):       Stopped
     LV_HOMEFS  (ocf::heartbeat:Filesystem):    Stopped
     myapp (lsb:myapp):  Stopped
     ClusterIP  (ocf::heartbeat:IPaddr2):       Stopped
 Master/Slave Set: LV_POSTGRESClone [LV_POSTGRES]
     Masters: [ za-mycluster1.sMY.co.za ]
     Slaves: [ za-mycluster2.sMY.co.za ]
 Master/Slave Set: LV_HOMEClone [LV_HOME]
     Masters: [ za-mycluster1.sMY.co.za ]
     Slaves: [ za-mycluster2.sMY.co.za ]
 Clone Set: pingd-clone [pingd]
     Started: [ za-mycluster1.sMY.co.za za-mycluster2.sMY.co.za ]

Failed Resource Actions:
* LV_DATAFS_start_0 on za-mycluster2.sMY.co.za 'unknown error' (1): call=57, status=complete, exitreason='Couldn't mount device [/dev/drbd0] as /data',
    last-rc-change='Fri Apr 24 16:59:10 2020', queued=0ms, exec=75ms

Daemon Status:
  corosync: active/enabled
  pacemaker: active/enabled
  pcsd: active/enabled

Обратите внимание на ошибку при монтировании файловой системы DRBD в целевом объекте миграции. Глядя на состояние DRBD в этот момент, видно, что узел 1 по-прежнему является первичным, поэтому ресурс DRBD никогда не становился вторичным, когда другие ресурсы были остановлены.

[root@za-mycluster1 ~]# cat /proc/drbd
version: 8.4.11-1 (api:1/proto:86-101)
GIT-hash: 66145a308421e9c124ec391a7848ac20203bb03c build by mockbuild@, 2018-11-03 01:26:55
 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
    ns:169816 nr:0 dw:169944 dr:257781 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
 1: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
    ns:6108 nr:0 dw:10324 dr:17553 al:14 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
 2: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
    ns:3368 nr:0 dw:4380 dr:72609 al:6 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

Вот так выглядит конфигурация

[root@za-mycluster1 ~]# pcs config
Cluster Name: MY_HA
Corosync Nodes:
 za-mycluster1.sMY.co.za za-mycluster2.sMY.co.za
Pacemaker Nodes:
 za-mycluster1.sMY.co.za za-mycluster2.sMY.co.za

Resources:
 Master: LV_DATAClone
  Meta Attrs: clone-max=2 clone-node-max=1 master-max=1 master-node-max=1 notify=true
  Resource: LV_DATA (class=ocf provider=linbit type=drbd)
   Attributes: drbd_resource=lv_DATA
   Operations: demote interval=0s timeout=90 (LV_DATA-demote-interval-0s)
               monitor interval=60s (LV_DATA-monitor-interval-60s)
               notify interval=0s timeout=90 (LV_DATA-notify-interval-0s)
               promote interval=0s timeout=90 (LV_DATA-promote-interval-0s)
               reload interval=0s timeout=30 (LV_DATA-reload-interval-0s)
               start interval=0s timeout=240 (LV_DATA-start-interval-0s)
               stop interval=0s timeout=100 (LV_DATA-stop-interval-0s)
 Group: mygroup
  Resource: LV_DATAFS (class=ocf provider=heartbeat type=Filesystem)
   Attributes: device=/dev/drbd0 directory=/data fstype=ext4
   Operations: monitor interval=20s timeout=40s (LV_DATAFS-monitor-interval-20s)
               notify interval=0s timeout=60s (LV_DATAFS-notify-interval-0s)
               start interval=0s timeout=60s (LV_DATAFS-start-interval-0s)
               stop interval=0s timeout=60s (LV_DATAFS-stop-interval-0s)
  Resource: LV_POSTGRESFS (class=ocf provider=heartbeat type=Filesystem)
   Attributes: device=/dev/drbd1 directory=/var/lib/pgsql fstype=ext4
   Operations: monitor interval=20s timeout=40s (LV_POSTGRESFS-monitor-interval-20s)
               notify interval=0s timeout=60s (LV_POSTGRESFS-notify-interval-0s)
               start interval=0s timeout=60s (LV_POSTGRESFS-start-interval-0s)
               stop interval=0s timeout=60s (LV_POSTGRESFS-stop-interval-0s)
  Resource: postgresql_9.6 (class=systemd type=postgresql-9.6)
   Operations: monitor interval=60s (postgresql_9.6-monitor-interval-60s)
               start interval=0s timeout=100 (postgresql_9.6-start-interval-0s)
               stop interval=0s timeout=100 (postgresql_9.6-stop-interval-0s)
  Resource: LV_HOMEFS (class=ocf provider=heartbeat type=Filesystem)
   Attributes: device=/dev/drbd2 directory=/home fstype=ext4
   Operations: monitor interval=20s timeout=40s (LV_HOMEFS-monitor-interval-20s)
               notify interval=0s timeout=60s (LV_HOMEFS-notify-interval-0s)
               start interval=0s timeout=60s (LV_HOMEFS-start-interval-0s)
               stop interval=0s timeout=60s (LV_HOMEFS-stop-interval-0s)
  Resource: myapp (class=lsb type=myapp)
   Operations: force-reload interval=0s timeout=15 (myapp-force-reload-interval-0s)
               monitor interval=60s on-fail=standby timeout=10s (myapp-monitor-interval-60s)
               restart interval=0s timeout=120s (myapp-restart-interval-0s)
               start interval=0s timeout=60s (myapp-start-interval-0s)
               stop interval=0s timeout=60s (myapp-stop-interval-0s)
  Resource: ClusterIP (class=ocf provider=heartbeat type=IPaddr2)
   Attributes: cidr_netmask=32 ip=192.168.51.185
   Operations: monitor interval=30s (ClusterIP-monitor-interval-30s)
               start interval=0s timeout=20s (ClusterIP-start-interval-0s)
               stop interval=0s timeout=20s (ClusterIP-stop-interval-0s)
 Master: LV_POSTGRESClone
  Meta Attrs: clone-max=2 clone-node-max=1 master-max=1 master-node-max=1 notify=true
  Resource: LV_POSTGRES (class=ocf provider=linbit type=drbd)
   Attributes: drbd_resource=lv_postgres
   Operations: demote interval=0s timeout=90 (LV_POSTGRES-demote-interval-0s)
               monitor interval=60s (LV_POSTGRES-monitor-interval-60s)
               notify interval=0s timeout=90 (LV_POSTGRES-notify-interval-0s)
               promote interval=0s timeout=90 (LV_POSTGRES-promote-interval-0s)
               reload interval=0s timeout=30 (LV_POSTGRES-reload-interval-0s)
               start interval=0s timeout=240 (LV_POSTGRES-start-interval-0s)
               stop interval=0s timeout=100 (LV_POSTGRES-stop-interval-0s)
 Master: LV_HOMEClone
  Meta Attrs: clone-max=2 clone-node-max=1 master-max=1 master-node-max=1 notify=true
  Resource: LV_HOME (class=ocf provider=linbit type=drbd)
   Attributes: drbd_resource=lv_home
   Operations: demote interval=0s timeout=90 (LV_HOME-demote-interval-0s)
               monitor interval=60s (LV_HOME-monitor-interval-60s)
               notify interval=0s timeout=90 (LV_HOME-notify-interval-0s)
               promote interval=0s timeout=90 (LV_HOME-promote-interval-0s)
               reload interval=0s timeout=30 (LV_HOME-reload-interval-0s)
               start interval=0s timeout=240 (LV_HOME-start-interval-0s)
               stop interval=0s timeout=100 (LV_HOME-stop-interval-0s)
 Clone: pingd-clone
  Resource: pingd (class=ocf provider=pacemaker type=ping)
   Attributes: dampen=5s host_list=192.168.51.1 multiplier=1000
   Operations: monitor interval=10 timeout=60 (pingd-monitor-interval-10)
               start interval=0s timeout=60 (pingd-start-interval-0s)
               stop interval=0s timeout=20 (pingd-stop-interval-0s)

Stonith Devices:
Fencing Levels:

Location Constraints:
  Resource: mygroup
    Constraint: location-mygroup
      Rule: boolean-op=or score=-INFINITY  (id:location-mygroup-rule)
        Expression: pingd lt 1  (id:location-mygroup-rule-expr)
        Expression: not_defined pingd  (id:location-mygroup-rule-expr-1)
Ordering Constraints:
  promote LV_DATAClone then start LV_DATAFS (kind:Mandatory) (id:order-LV_DATAClone-LV_DATAFS-mandatory)
  promote LV_POSTGRESClone then start LV_POSTGRESFS (kind:Mandatory) (id:order-LV_POSTGRESClone-LV_POSTGRESFS-mandatory)
  start LV_POSTGRESFS then start postgresql_9.6 (kind:Mandatory) (id:order-LV_POSTGRESFS-postgresql_9.6-mandatory)
  promote LV_HOMEClone then start LV_HOMEFS (kind:Mandatory) (id:order-LV_HOMEClone-LV_HOMEFS-mandatory)
  start LV_HOMEFS then start myapp (kind:Mandatory) (id:order-LV_HOMEFS-myapp-mandatory)
  start myapp then start ClusterIP (kind:Mandatory) (id:order-myapp-ClusterIP-mandatory)
Colocation Constraints:
Ticket Constraints:

Alerts:
 No alerts defined

Resources Defaults:
 resource-stickiness=INFINITY
Operations Defaults:
 timeout=240s

Cluster Properties:
 cluster-infrastructure: corosync
 cluster-name: MY_HA
 dc-version: 1.1.20-5.el7-3c4c782f70
 have-watchdog: false
 no-quorum-policy: ignore
 stonith-enabled: false

Quorum:
  Options:

Любое понимание будет приветствоваться.


person Waslap    schedule 24.04.2020    source источник


Ответы (1)


Предполагая, что ресурсы файловой системы в вашей группе существуют на устройствах DRBD за пределами группы, вам потребуется по крайней мере один порядок и одно ограничение совместного размещения для каждого устройства DRBD, сообщающее кластеру, что он может запускаться только mygroup после того, как устройства DRBD будут повышены до основных и включенных. узел, где они являются первичными. Ваш ресурс ping работает, так как вы видите, что mygroup останавливается и пытается запуститься на одноранговом узле, но он не запускается, потому что ничто не говорит первичному DRBD перемещаться вместе с группой, и именно здесь живут файловые системы.

Попробуйте добавить в кластер следующие ограничения:

# pcs cluster cib drbd_constraints

# pcs -f drbd_constraints constraint colocation add mygroup LV_DATAClone INFINITY with-rsc-role=Master
# pcs -f drbd_constraints constraint order promote LV_DATAClone then start mygroup

# pcs -f drbd_constraints constraint colocation add mygroup LV_POSTGRESClone INFINITY with-rsc-role=Master
# pcs -f drbd_constraints constraint order promote LV_POSTGRESClone then start mygroup

# pcs -f drbd_constraints constraint colocation add mygroup LV_HOMEFS INFINITY with-rsc-role=Master
# pcs -f drbd_constraints constraint order promote LV_HOMEFS then start mygroup

# pcs cluster push cib drbd_constraints
person Matt Kereczman    schedule 26.04.2020