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:
- Um armazenamento compartilhado para dados do aplicativo
- 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.