Red Hat Training

A Red Hat training course is available for RHEL 8

Capítulo 7. Sistemas de arquivo GFS2 em um cluster

Esta seção fornece:

  • Um procedimento para criar um cluster de Pacemaker que inclui sistemas de arquivo GFS2
  • Um procedimento para migrar os volumes lógicos RHEL 7 que contêm sistemas de arquivo GFS2 para um cluster RHEL 8

7.1. Configuração de um sistema de arquivo GFS2 em um cluster

Este procedimento é um esboço dos passos necessários para a criação de um cluster Pacemaker que inclui sistemas de arquivos GFS2. Este exemplo cria três sistemas de arquivos GFS2 em três volumes lógicos.

Como pré-requisito para este procedimento, você deve instalar e iniciar o software de cluster em todos os nós e criar um cluster básico de dois nós. Você também deve configurar a vedação para o cluster. Para informações sobre como criar um cluster Pacemaker e configurar a vedação para o cluster, veja Criar um cluster Red Hat High-Availability com Pacemaker.

Procedimento

  1. Em ambos os nós do cluster, instalar os pacotes lvm2-lockd, gfs2-utils, e dlm. O pacote lvm2-lockd faz parte do canal AppStream e os pacotes gfs2-utils e dlm fazem parte do canal de Armazenamento Resiliente.

    # yum install lvm2-lockd gfs2-utils dlm
  2. Definir o parâmetro global Pacemaker no_quorum_policy para freeze.

    Nota

    Por padrão, o valor de no-quorum-policy está definido para stop, indicando que uma vez perdido o quorum, todos os recursos na partição restante serão imediatamente parados. Normalmente este padrão é a opção mais segura e ótima, mas ao contrário da maioria dos recursos, o GFS2 requer quorum para funcionar. Quando o quorum é perdido, tanto as aplicações que utilizam os suportes GFS2 como o próprio suporte GFS2 não podem ser parados corretamente. Qualquer tentativa de parar estes recursos sem quorum falhará, o que resultará no final em todo o aglomerado ser cercado toda vez que o quorum for perdido.

    Para resolver esta situação, defina no-quorum-policy para freeze quando o GFS2 estiver em uso. Isto significa que quando o quorum for perdido, a partição restante não fará nada até que o quorum seja recuperado.

    # pcs property set no-quorum-policy=freeze
  3. Configurar um recurso em dlm. Esta é uma dependência necessária para configurar um sistema de arquivos GFS2 em um cluster. Este exemplo cria o recurso dlm como parte de um grupo de recursos chamado locking.

    [root@z1 ~]# pcs resource create dlm --group locking ocf:pacemaker:controld op monitor interval=30s on-fail=fence
  4. Clonar o grupo de recursos locking para que o grupo de recursos possa estar ativo nos dois nós do cluster.

    [root@z1 ~]# pcs resource clone locking interleave=true
  5. Estabelecer um recurso lvmlockd como parte do grupo locking.

    [root@z1 ~]# pcs resource create lvmlockd --group locking ocf:heartbeat:lvmlockd op monitor interval=30s on-fail=fence
  6. Verifique o status do agrupamento para garantir que o grupo de recursos locking tenha começado em ambos os nós do agrupamento.

    [root@z1 ~]# pcs status --full
    Cluster name: my_cluster
    [...]
    
    Online: [ z1.example.com (1) z2.example.com (2) ]
    
    Full list of resources:
    
     smoke-apc      (stonith:fence_apc):    Started z1.example.com
     Clone Set: locking-clone [locking]
         Resource Group: locking:0
             dlm    (ocf::pacemaker:controld):      Started z1.example.com
             lvmlockd       (ocf::heartbeat:lvmlockd):      Started z1.example.com
         Resource Group: locking:1
             dlm    (ocf::pacemaker:controld):      Started z2.example.com
             lvmlockd       (ocf::heartbeat:lvmlockd):      Started z2.example.com
         Started: [ z1.example.com z2.example.com ]
  7. Verifique se o daemon lvmlockd está rodando nos dois nós do cluster.

    [root@z1 ~]# ps -ef | grep lvmlockd
    root     12257     1  0 17:45 ?        00:00:00 lvmlockd -p /run/lvmlockd.pid -A 1 -g dlm
    [root@z2 ~]# ps -ef | grep lvmlockd
    root     12270     1  0 17:45 ?        00:00:00 lvmlockd -p /run/lvmlockd.pid -A 1 -g dlm
  8. Em um nó do agrupamento, criar dois grupos de volume compartilhado. Um grupo de volume conterá dois sistemas de arquivos GFS2 e o outro grupo de volume conterá um sistema de arquivos GFS2.

    O seguinte comando cria o grupo de volume compartilhado shared_vg1 em /dev/vdb.

    [root@z1 ~]# vgcreate --shared shared_vg1 /dev/vdb
      Physical volume "/dev/vdb" successfully created.
      Volume group "shared_vg1" successfully created
      VG shared_vg1 starting dlm lockspace
      Starting locking.  Waiting until locks are ready...

    O seguinte comando cria o grupo de volume compartilhado shared_vg2 em /dev/vdc.

    [root@z1 ~]# vgcreate --shared shared_vg2 /dev/vdc
      Physical volume "/dev/vdc" successfully created.
      Volume group "shared_vg2" successfully created
      VG shared_vg2 starting dlm lockspace
      Starting locking.  Waiting until locks are ready...
  9. No segundo nó do agrupamento, inicie o gerenciador de fechaduras para cada um dos grupos de volume compartilhado.

    [root@z2 ~]# vgchange --lock-start shared_vg1
      VG shared_vg1 starting dlm lockspace
      Starting locking.  Waiting until locks are ready...
    [root@z2 ~]# vgchange --lock-start shared_vg2
      VG shared_vg2 starting dlm lockspace
      Starting locking.  Waiting until locks are ready...
  10. Em um nó do cluster, criar os volumes lógicos compartilhados e formatar os volumes com um sistema de arquivos GFS2. É necessário um diário para cada nó que monta o sistema de arquivo. Certifique-se de criar periódicos suficientes para cada um dos nós de seu cluster.

    [root@z1 ~]# lvcreate --activate sy -L5G -n shared_lv1 shared_vg1
      Logical volume "shared_lv1" created.
    [root@z1 ~]# lvcreate --activate sy -L5G -n shared_lv2 shared_vg1
      Logical volume "shared_lv2" created.
    [root@z1 ~]# lvcreate --activate sy -L5G -n shared_lv1 shared_vg2
      Logical volume "shared_lv1" created.
    
    [root@z1 ~]# mkfs.gfs2 -j2 -p lock_dlm -t my_cluster:gfs2-demo1 /dev/shared_vg1/shared_lv1
    [root@z1 ~]# mkfs.gfs2 -j2 -p lock_dlm -t my_cluster:gfs2-demo2 /dev/shared_vg1/shared_lv2
    [root@z1 ~]# mkfs.gfs2 -j2 -p lock_dlm -t my_cluster:gfs2-demo3 /dev/shared_vg2/shared_lv1
  11. Crie um recurso LVM-activate para cada volume lógico para ativar automaticamente esse volume lógico em todos os nós.

    1. Criar um recurso LVM-activate chamado sharedlv1 para o volume lógico shared_lv1 no grupo de volume shared_vg1. Este comando também cria o grupo de recursos shared_vg1 que inclui o recurso. Neste exemplo, o grupo de recursos tem o mesmo nome do grupo de volume compartilhado que inclui o volume lógico.

      [root@z1 ~]# pcs resource create sharedlv1 --group shared_vg1 ocf:heartbeat:LVM-activate lvname=shared_lv1 vgname=shared_vg1 activation_mode=shared vg_access_mode=lvmlockd
    2. Criar um recurso LVM-activate chamado sharedlv2 para o volume lógico shared_lv2 no grupo de volume shared_vg1. Este recurso também fará parte do grupo de recursos shared_vg1.

      [root@z1 ~]# pcs resource create sharedlv2 --group shared_vg1 ocf:heartbeat:LVM-activate lvname=shared_lv2 vgname=shared_vg1 activation_mode=shared vg_access_mode=lvmlockd
    3. Criar um recurso LVM-activate chamado sharedlv3 para o volume lógico shared_lv1 no grupo de volume shared_vg2. Este comando também cria o grupo de recursos shared_vg2 que inclui o recurso.

      [root@z1 ~]# pcs resource create sharedlv3 --group shared_vg2 ocf:heartbeat:LVM-activate lvname=shared_lv1 vgname=shared_vg2 activation_mode=shared vg_access_mode=lvmlockd
  12. Clonar os dois novos grupos de recursos.

    [root@z1 ~]# pcs resource clone shared_vg1 interleave=true
    [root@z1 ~]# pcs resource clone shared_vg2 interleave=true
  13. Configurar as restrições de pedidos para garantir que o grupo de recursos locking que inclui os recursos dlm e lvmlockd comece primeiro.

    [root@z1 ~]# pcs constraint order start locking-clone then shared_vg1-clone
    Adding locking-clone shared_vg1-clone (kind: Mandatory) (Options: first-action=start then-action=start)
    [root@z1 ~]# pcs constraint order start locking-clone then shared_vg2-clone
    Adding locking-clone shared_vg2-clone (kind: Mandatory) (Options: first-action=start then-action=start)
  14. Configurar as restrições de colocação para garantir que os grupos de recursos vg1 e vg2 comecem no mesmo nó que o grupo de recursos locking.

    [root@z1 ~]# pcs constraint colocation add shared_vg1-clone with locking-clone
    [root@z1 ~]# pcs constraint colocation add shared_vg2-clone with locking-clone
  15. Em ambos os nós do agrupamento, verificar se os volumes lógicos estão ativos. Pode haver um atraso de alguns segundos.

    [root@z1 ~]# lvs
      LV         VG          Attr       LSize
      shared_lv1 shared_vg1  -wi-a----- 5.00g
      shared_lv2 shared_vg1  -wi-a----- 5.00g
      shared_lv1 shared_vg2  -wi-a----- 5.00g
    
    [root@z2 ~]# lvs
      LV         VG          Attr       LSize
      shared_lv1 shared_vg1  -wi-a----- 5.00g
      shared_lv2 shared_vg1  -wi-a----- 5.00g
      shared_lv1 shared_vg2  -wi-a----- 5.00g
  16. Criar um recurso de sistema de arquivo para montar automaticamente cada sistema de arquivo GFS2 em todos os nós.

    Você não deve adicionar o sistema de arquivo ao arquivo /etc/fstab porque ele será gerenciado como um recurso de cluster Pacemaker. As opções de montagem podem ser especificadas como parte da configuração do recurso com options=options. Execute o comando pcs resource describe Filesystem para opções de configuração completa.

    Os seguintes comandos criam os recursos do sistema de arquivos. Estes comandos adicionam cada recurso ao grupo de recursos que inclui o recurso de volume lógico para aquele sistema de arquivo.

    [root@z1 ~]# pcs resource create sharedfs1 --group shared_vg1 ocf:heartbeat:Filesystem device="/dev/shared_vg1/shared_lv1" directory="/mnt/gfs1" fstype="gfs2" options=noatime op monitor interval=10s on-fail=fence
    [root@z1 ~]# pcs resource create sharedfs2 --group shared_vg1 ocf:heartbeat:Filesystem device="/dev/shared_vg1/shared_lv2" directory="/mnt/gfs2" fstype="gfs2" options=noatime op monitor interval=10s on-fail=fence
    [root@z1 ~]# pcs resource create sharedfs3 --group shared_vg2 ocf:heartbeat:Filesystem device="/dev/shared_vg2/shared_lv1" directory="/mnt/gfs3" fstype="gfs2" options=noatime op monitor interval=10s on-fail=fence
  17. Verificar se os sistemas de arquivo GFS2 estão montados em ambos os nós do cluster.

    [root@z1 ~]# mount | grep gfs2
    /dev/mapper/shared_vg1-shared_lv1 on /mnt/gfs1 type gfs2 (rw,noatime,seclabel)
    /dev/mapper/shared_vg1-shared_lv2 on /mnt/gfs2 type gfs2 (rw,noatime,seclabel)
    /dev/mapper/shared_vg2-shared_lv1 on /mnt/gfs3 type gfs2 (rw,noatime,seclabel)
    
    [root@z2 ~]# mount | grep gfs2
    /dev/mapper/shared_vg1-shared_lv1 on /mnt/gfs1 type gfs2 (rw,noatime,seclabel)
    /dev/mapper/shared_vg1-shared_lv2 on /mnt/gfs2 type gfs2 (rw,noatime,seclabel)
    /dev/mapper/shared_vg2-shared_lv1 on /mnt/gfs3 type gfs2 (rw,noatime,seclabel)
  18. Verifique o status do agrupamento.

    [root@z1 ~]# pcs status --full
    Cluster name: my_cluster
    [...1
    
    Full list of resources:
    
     smoke-apc      (stonith:fence_apc):    Started z1.example.com
     Clone Set: locking-clone [locking]
         Resource Group: locking:0
             dlm    (ocf::pacemaker:controld):      Started z2.example.com
             lvmlockd       (ocf::heartbeat:lvmlockd):      Started z2.example.com
         Resource Group: locking:1
             dlm    (ocf::pacemaker:controld):      Started z1.example.com
             lvmlockd       (ocf::heartbeat:lvmlockd):      Started z1.example.com
         Started: [ z1.example.com z2.example.com ]
     Clone Set: shared_vg1-clone [shared_vg1]
         Resource Group: shared_vg1:0
             sharedlv1      (ocf::heartbeat:LVM-activate):  Started z2.example.com
             sharedlv2      (ocf::heartbeat:LVM-activate):  Started z2.example.com
             sharedfs1      (ocf::heartbeat:Filesystem):    Started z2.example.com
             sharedfs2      (ocf::heartbeat:Filesystem):    Started z2.example.com
         Resource Group: shared_vg1:1
             sharedlv1      (ocf::heartbeat:LVM-activate):  Started z1.example.com
             sharedlv2      (ocf::heartbeat:LVM-activate):  Started z1.example.com
             sharedfs1      (ocf::heartbeat:Filesystem):    Started z1.example.com
             sharedfs2      (ocf::heartbeat:Filesystem):    Started example.co
         Started: [ z1.example.com z2.example.com ]
     Clone Set: shared_vg2-clone [shared_vg2]
         Resource Group: shared_vg2:0
             sharedlv3      (ocf::heartbeat:LVM-activate):  Started z2.example.com
             sharedfs3      (ocf::heartbeat:Filesystem):    Started z2.example.com
         Resource Group: shared_vg2:1
             sharedlv3      (ocf::heartbeat:LVM-activate):  Started z1.example.com
             sharedfs3      (ocf::heartbeat:Filesystem):    Started z1.example.com
         Started: [ z1.example.com z2.example.com ]
    
    ...

Recursos adicionais