Red Hat Training

A Red Hat training course is available for RHEL 8

2.2. Aprendendo a configurar o failover

Este procedimento fornece uma introdução à criação de um agrupamento de Pacemaker executando um serviço que irá falhar de um nó para outro quando o nó no qual o serviço está sendo executado se tornar indisponível. Trabalhando através deste procedimento, você pode aprender como criar um serviço em um cluster de dois nós e então você pode observar o que acontece com esse serviço quando ele falha no nó em que está rodando.

Este procedimento de exemplo configura um cluster de dois nós Pacemaker rodando um servidor Apache HTTP. Você pode então parar o serviço Apache em um nó para ver como o serviço permanece disponível.

Este procedimento requer como pré-requisito que você tenha dois nós rodando o Red Hat Enterprise Linux 8 que possam se comunicar um com o outro, e requer um endereço IP flutuante que resida na mesma rede que um dos endereços IP atribuídos estaticamente a um dos nós.

  • Os nós utilizados neste exemplo são z1.example.com e z2.example.com.
  • O endereço IP flutuante usado neste exemplo é 192.168.122.120.
Nota

Certifique-se de que os nomes dos nós que você está usando estão no arquivo /etc/hosts em cada nó.

  1. Em ambos os nós, instalar os pacotes de software Red Hat High Availability Add-On do canal High Availability, e iniciar e habilitar o serviço pcsd.

    # yum install pcs pacemaker fence-agents-all
    ...
    # systemctl start pcsd.service
    # systemctl enable pcsd.service

    Se você estiver rodando o daemon firewalld, em ambos os nós habilite as portas que são exigidas pelo Add-On de Alta Disponibilidade da Red Hat.

    # firewall-cmd --permanent --add-service=high-availability
    # firewall-cmd --reload
  2. Em ambos os nós do cluster, defina uma senha para o usuário hacluster.

    # passwd hacluster
  3. Autentique o usuário hacluster para cada nó do cluster no nó a partir do qual você estará executando os comandos pcs.

    # pcs host auth z1.example.com z2.example.com
  4. Criar um cluster chamado my_cluster com ambos os nós como membros do cluster. Este comando cria e inicia o agrupamento em uma única etapa. Você só precisa executar isto a partir de um nó no cluster porque os comandos de configuração pcs entram em vigor para o cluster inteiro.

    Em um nó em cluster, execute o seguinte comando.

    # pcs cluster setup my_cluster --start z1.example.com z2.example.com
  5. Um aglomerado Red Hat High Availability requer que você configure a vedação para o aglomerado. As razões para esta exigência estão descritas em Esgrima em um Aglomerado de Alta Disponibilidade da Red Hat. Para esta introdução, porém, para mostrar apenas como funciona o failover nesta configuração, desabilite a vedação definindo a opção de cluster stonith-enabled para false

    Atenção

    O uso do stonith-enabled=false é completamente inadequado para um cluster de produção. Ele diz ao aglomerado para simplesmente fingir que os nós falhados estão cercados com segurança.

    # pcs property set stonith-enabled=false
  6. Após criar um agrupamento e desativar a vedação, verifique o status do agrupamento.

    Nota

    Quando você executa o comando pcs cluster status, ele pode mostrar uma saída que difere temporariamente dos exemplos à medida que os componentes do sistema são iniciados.

    # pcs cluster status
    Cluster Status:
     Stack: corosync
     Current DC: z1.example.com (version 2.0.0-10.el8-b67d8d0de9) - partition with quorum
     Last updated: Thu Oct 11 16:11:18 2018
     Last change: Thu Oct 11 16:11:00 2018 by hacluster via crmd on z1.example.com
     2 nodes configured
     0 resources configured
    
    PCSD Status:
      z1.example.com: Online
      z2.example.com: Online
  7. Em ambos os nós, configure um navegador web e crie uma página web para exibir uma mensagem de texto simples. Se você estiver executando o daemon firewalld, habilite as portas que são exigidas por httpd.

    Nota

    Não utilize systemctl enable para permitir que quaisquer serviços que serão gerenciados pelo cluster comecem na inicialização do sistema.

    # yum install -y httpd wget
    ...
    # firewall-cmd --permanent --add-service=http
    # firewall-cmd --reload
    
    # cat <<-END >/var/www/html/index.html
    <html>
    <body>My Test Site - $(hostname)</body>
    </html>
    END

    Para que o agente de recursos Apache obtenha o status do Apache, em cada nó do cluster crie a seguinte adição à configuração existente para habilitar a URL do servidor de status.

    # cat <<-END > /etc/httpd/conf.d/status.conf
    <Location /server-status>
    SetHandler server-status
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
    Allow from ::1
    </Location>
    END
  8. Crie recursos para o cluster IPaddr2 e apache para gerenciá-lo. O recurso 'IPaddr2' é um endereço IP flutuante que não deve ser um já associado a um nó físico. Se o dispositivo NIC do recurso 'IPaddr2' não for especificado, o IP flutuante deve residir na mesma rede que o endereço IP estaticamente atribuído usado pelo nó.

    Você pode exibir uma lista de todos os tipos de recursos disponíveis com o comando pcs resource list. Você pode usar o comando pcs resource describe resourcetype para exibir os parâmetros que você pode definir para o tipo de recurso especificado. Por exemplo, o seguinte comando exibe os parâmetros que você pode definir para um recurso do tipo apache:

    # pcs resource describe apache
    ...

    Neste exemplo, o recurso de endereço IP e o recurso apache são ambos configurados como parte de um grupo chamado apachegroup, o que garante que os recursos sejam mantidos juntos para funcionar no mesmo nó.

    Execute os seguintes comandos a partir de um nó no aglomerado:

    # pcs resource create ClusterIP ocf:heartbeat:IPaddr2 ip=192.168.122.120 --group apachegroup
    
    # pcs resource create WebSite ocf:heartbeat:apache configfile=/etc/httpd/conf/httpd.conf statusurl="http://localhost/server-status" --group apachegroup
    
    # pcs status
    Cluster name: my_cluster
    Stack: corosync
    Current DC: z1.example.com (version 2.0.0-10.el8-b67d8d0de9) - partition with quorum
    Last updated: Fri Oct 12 09:54:33 2018
    Last change: Fri Oct 12 09:54:30 2018 by root via cibadmin on z1.example.com
    
    2 nodes configured
    2 resources configured
    
    Online: [ z1.example.com z2.example.com ]
    
    Full list of resources:
    
    Resource Group: apachegroup
        ClusterIP  (ocf::heartbeat:IPaddr2):       Started z1.example.com
        WebSite    (ocf::heartbeat:apache):        Started z1.example.com
    
    PCSD Status:
      z1.example.com: Online
      z2.example.com: Online
    ...

    Note que, neste caso, o serviço apachegroup está rodando no nó z1.example.com.

  9. Acesse o site que você criou, pare o serviço no nó em que ele está funcionando e observe como o serviço falha até o segundo nó.

    1. Aponte um navegador para o site que você criou usando o endereço IP flutuante que você configurou. Isto deve exibir a mensagem de texto que você definiu, exibindo o nome do nó no qual o site está rodando.
    2. Pare o serviço web apache. O uso do killall -9 simula uma falha no nível de aplicação.

      # killall -9 httpd

      Verifique o status do agrupamento. Você deve ver que parar o serviço web causou uma ação falhada, mas que o software de cluster reiniciou o serviço no nó no qual ele estava rodando e você ainda deve ser capaz de acessar o navegador web.

      # pcs status
      Cluster name: my_cluster
      Stack: corosync
      Current DC: z1.example.com (version 2.0.0-10.el8-b67d8d0de9) - partition with quorum
      Last updated: Fri Oct 12 09:54:33 2018
      Last change: Fri Oct 12 09:54:30 2018 by root via cibadmin on z1.example.com
      
      2 nodes configured
      2 resources configured
      
      Online: [ z1.example.com z2.example.com ]
      
      Full list of resources:
      
      Resource Group: apachegroup
          ClusterIP  (ocf::heartbeat:IPaddr2):       Started z1.example.com
          WebSite    (ocf::heartbeat:apache):        Started z1.example.com
      
      Failed Resource Actions:
      * WebSite_monitor_60000 on z1.example.com 'not running' (7): call=31, status=complete, exitreason='none',
          last-rc-change='Fri Feb  5 21:01:41 2016', queued=0ms, exec=0ms

      Limpar o status de falha uma vez que o serviço esteja funcionando novamente.

      # pcs resource cleanup WebSite
    3. Coloque o nó sobre o qual o serviço está funcionando em modo de espera. Observe que, como desativamos a vedação, não podemos efetivamente simular uma falha no nível do aceno (como puxar um cabo de força) porque a vedação é necessária para que o aglomerado se recupere de tais situações.

      # pcs node standby z1.example.com
    4. Verifique o status do grupo e anote onde o serviço está funcionando agora.

      # pcs status
      Cluster name: my_cluster
      Stack: corosync
      Current DC: z1.example.com (version 2.0.0-10.el8-b67d8d0de9) - partition with quorum
      Last updated: Fri Oct 12 09:54:33 2018
      Last change: Fri Oct 12 09:54:30 2018 by root via cibadmin on z1.example.com
      
      2 nodes configured
      2 resources configured
      
      Node z1.example.com: standby
      Online: [ z2.example.com ]
      
      Full list of resources:
      
      Resource Group: apachegroup
          ClusterIP  (ocf::heartbeat:IPaddr2):       Started z2.example.com
          WebSite    (ocf::heartbeat:apache):        Started z2.example.com
    5. Acesse o site. Não deve haver perda de serviço, embora a mensagem de exibição deva indicar o nó em que o serviço está agora em execução.
  10. Para restaurar os serviços de agrupamento para o primeiro nó, tire o nó do modo de espera. Isto não irá necessariamente mover o serviço de volta para aquele nó.

    # pcs node unstandby z1.example.com
  11. Para a limpeza final, pare os serviços de agrupamento em ambos os nós.

    # pcs cluster stop --all