Como monitorar o cluster do Pacemaker usando um script?

0

Eu criei um cluster de dois nós (ambos os nós RHEL 7) usando pacemaker . Ele é usado para executar um aplicativo personalizado. Eu criei abaixo os recursos e os atribui ao cluster:

  1. Um armazenamento compartilhado para dados do aplicativo
  2. Um IP virtual

Funciona perfeitamente bem.

Agora, temos um requisito. Atualmente, o failover acontece somente se algo der errado com o servidor inteiro. O marcapasso não tem conhecimento do status do aplicativo em execução no nó ativo e o ignora completamente. Temos um script de shell que pode executar uma verificação de integridade no aplicativo e retorna valores true / false com base na integridade do aplicativo.
Alguém pode me sugerir como configurar o marcapasso para usar este script de shell para verificar regularmente o status do aplicativo no nó ativo do cluster e iniciar o failover se o script retornar um valor falso.

Eu vi exemplos, em clusters de servidores web as pessoas criam uma página HTML de amostra e usam isso ( http://127.0.0.1/samplepage.html ) como um recurso com marca-passo para verificar a saúde do servidor web apache no nó ativo.

Por favor, guie-me como conseguir um resultado similar usando um script de shell.

Atualização:

Aqui está minha configuração:

[root@node1 ~]# pcs status
Cluster name: webspheremq
Stack: corosync
Current DC: node1 (version 1.1.15-11.el7-e174ec8) - partition with quorum
Last updated: Wed Jun 14 20:38:48 2017          Last change: Tue Jun 13 20:04:58 2017 by root via crm_attribute on svdg-stg29

2 nodes and 3 resources configured: 2 resources DISABLED and 0 BLOCKED from being started due to failures

Online: [ node1 node2 ]

Full list of resources:

 Resource Group: websphere
     websphere_fs       (ocf::heartbeat:Filesystem):    Started node1
     websphere_vip      (ocf::heartbeat:IPaddr2):       Started node1
     FailOverScript     (ocf::heartbeat:Dummy): Started node1


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

Para iniciar e parar o aplicativo, tenho dois scripts de shell. Durante o failover, eu precisaria de stop.sh para ser executado no nó do qual os recursos serão movidos e start.sh para ser executado no nó em que o cluster está apresentando failover.

Eu fiz pouca experiência e descobri que as pessoas estão usando o recurso fictício para atingir esse tipo de requisitos (para executar scripts durante o failover).

Então, aqui está o que eu fiz até agora:

Eu criei um recurso fictício ( FailOverScript ) para testar os scripts de início / parada do aplicativo, como abaixo:

[root@node1 tmp]# pcs status resources
 Resource Group: websphere
     websphere_fs       (ocf::heartbeat:Filesystem):    Started node1
     websphere_vip      (ocf::heartbeat:IPaddr2):       Started node1
     **FailOverScript     (ocf::heartbeat:Dummy): Started node1**

A partir de agora, incluí scripts de teste nas ações start e stop do recurso FailOverScript. Ele deve executar os scripts failoverstartscript.sh e failoverstopscript.sh, respectivamente, quando esse recurso simulado for iniciado e interrompido.

[root@node1 heartbeat]# pwd
/usr/lib/ocf/resource.d/heartbeat
[root@node1  heartbeat]#
[root@node1  heartbeat]# grep -A5 "start()" FailOverScript
FailOverScript_start() {
    FailOverScript_monitor
    /usr/local/bin/failoverstartscript.sh
    if [ $? =  $OCF_SUCCESS ]; then
        return $OCF_SUCCESS
    fi
[root@node1  heartbeat]#
[root@node1  heartbeat]#
[root@node1  heartbeat]# grep -A5 "stop()" FailOverScript
FailOverScript_stop() {
    FailOverScript_monitor
    /usr/local/bin/failoverstopscript.sh
    if [ $? =  $OCF_SUCCESS ]; then
        rm ${OCF_RESKEY_state}
    fi

Mas quando esse recurso fictício é iniciado / interrompido (por meio de failover manual), o script não é executado. Tentei coisas diferentes, mas ainda não consegui descobrir a razão disso. Precisa de ajuda para descobrir o motivo pelo qual os scripts não são executados automaticamente durante o failover.

    
por Vinod 09.06.2017 / 15:28

1 resposta

2

Em vez de tentar modificar o Dummy RA para executar scripts arbitrários, você poderia usar o anything resource-agent.

# pcs resource describe ocf:heartbeat:anything
ocf:heartbeat:anything - Manages an arbitrary service

This is a generic OCF RA to manage almost anything.

Resource options:
  binfile (required): The full name of the binary to be executed.
                      This is expected to keep running with the
                      same pid and not just do something and
                      exit.
  cmdline_options: Command line options to pass to the binary
  workdir: The path from where the binfile will be executed.
  pidfile: File to read/write the PID from/to.
  logfile: File to write STDOUT to
  errlogfile: File to write STDERR to
  user: User to run the command as
  monitor_hook: Command to run in monitor operation
  stop_timeout: In the stop operation: Seconds to wait for kill
                -TERM to succeed before sending kill -SIGKILL.
                Defaults to 2/3 of the stop operation timeout.

Você apontaria o anything agent em seu script como o parâmetro binfile= e, em seguida, se tiver alguma forma de monitorar seu aplicativo personalizado além de verificar um pid em execução (é o que o agente anything faz padrão), você pode definir isso no parâmetro monitor_hook .

    
por 15.06.2017 / 20:39