/ / Supervisar un grupo de marcapasos con ocf: marcapasos: ClusterMon y / o agente externo - linux, redhat

Supervise un grupo de marcapasos con ocf: marcapasos: ClusterMon y / o agente externo - linux, redhat

Estoy tratando de configurar notificaciones de eventos de clúster de Pacemaker a través de un agente externo para recibir notificaciones cuando se produce el cambio de conmutación por error.
Busqué abajo los enlaces

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Configuring_the_Red_Hat_High_Availability_Add-On_with_Pacemaker/s1-eventnotification-HAAR.html

http://floriancrouzat.net/2013/01/monitor-a-pacemaker-cluster-with-ocfpacemakerclustermon-andor-external-agent/

Pero no entendiendo cómo hacer esto realmente.
¿Podría por favor dar una explicación paso a paso.

Gracias,
Ranjan.

Respuestas

2 para la respuesta № 1

El documento de RedHat es conciso, pero la entrada del blog de Florian es bastante detallada y las referencias al final son útiles.

La pregunta que se formula es algo vaga, por lo que respondo lo que creo que estás preguntando.

Brevemente, al resumir parte de la publicación de Florian, ClusterMon es un agente de recursos (ocf:pacemaker:ClusterMon) que corre crm_mon entre bastidores.

La documentación de mi recurso (SLES 11 SP3) dice:

# crm ra info ocf:pacemaker:ClusterMon
Runs crm_mon in the background, recording the cluster status to an HTML file (ocf:pacemaker:ClusterMon)

This is a ClusterMon Resource Agent.
It outputs current cluster status to the html.

Parameters (* denotes required, [] the default):

user (string, [root]):
The user we want to run crm_mon as

update (integer, [15]): Update interval
How frequently should we update the cluster status

extra_options (string): Extra options
Additional options to pass to crm_mon.  Eg. -n -r

pidfile (string, [/tmp/ClusterMon_undef.pid]): PID file
PID file location to ensure only one instance is running

htmlfile (string, [/tmp/ClusterMon_undef.html]): HTML output
Location to write HTML output to.

Operations" defaults (advisory minimum):

start         timeout=20
stop          timeout=20
monitor       timeout=20 interval=10

Pero, el verdadero poder es el extra_options porque esto le permite tener el agente de recursos decir crm_mon Qué hacer con los resultados. Específicamente, las opciones extra se pasan literalmente como opciones de línea de comando para crm_mon.

Como mencionó Florian, añadas más recientes decrm_mon (lo que realmente está haciendo el trabajo) no viene con SMTP (correo electrónico) o soporte SNMP incorporado. Sin embargo, todavía es compatible con el agente externo (a través del interruptor -E).

Por lo tanto, para entender lo que hacen las opciones extra, debe consultar man crm_mon.

De la documentación de RedHat a la que enlazó, el primer valor de "extra_options" de -T pacemaker@example.com -F pacemaker@nodeX.example.com -P PACEMAKER -H mail.example.com contar crm_mon para enviar un correo electrónico a pacemaker@example.com, desde pacemaker@nodeX.example.com, con el prefijo de asunto PACEMAKER, a través del correo Host (servidor smtp) mail.example.com.

El segundo ejemplo de "opciones extra" en el documento de RedHat al que hizo referencia tenía valor -S snmphost.example.com -C public que dice crm_mon para enviar capturas SNMP a snmphost.example.com utilizando la comunidad denominada public.

El tercer ejemplo de "extra_options" tiene valor -E /usr/local/bin/example.sh -e 192.168.12.1. Esto le dice a crm_mon para ejecutar el programa externo /usr/local/bin/example.sh y también especifica el "destinatario externo" que, de hecho, se lanza a una variable de entorno CRM_notify_recipient que se exporta antes de generar el script.

Cuando se ejecuta un agente externo, crm_mon llama al script provisto cada evento de cluster (incluyendo operaciones de monitoreo exitosas). Este script hereda un montón de variables de entorno que le dicen qué está pasando.

De: http://clusterlabs.org/doc/en-US/Pacemaker/1.1/html/Pacemaker_Explained/s-notification-external.html Las variables de entorno que se establecen son:

CRM_notify_recipient    The static external-recipient from the resource definition.
CRM_notify_node The node on which the status change happened.
CRM_notify_rsc  The name of the resource that changed the status.
CRM_notify_task The operation that caused the status change.
CRM_notify_desc The textual output relevant error code of the operation (if any) that caused the status change.
CRM_notify_rc   The return code of the operation.
CRM_notify_target_rc    The expected return code of the operation.
CRM_notify_status   The numerical representation of the status of the operation.

El trabajo del script es consumir estas variables de entorno y hacer algo razonable con ellas. Lo que es "razonable" depende de su entorno.

El ejemplo con capturas SNMP en el blog de Florian asume que está familiarizado con las trampas SNMP. Si no, esa es una pregunta completamente diferente y está fuera del alcance del agente de recursos.

El ejemplo con capturas SNMP proporciona una buena declaración condicional para identificar eventos que son eventos de monitoreo fallidos o eventos que no son eventos de monitoreo.

El andamiaje de un script de monitoreo para hacer.lo que quiera con la información disponible es una versión simplificada del script de shell snmp trap al que se hace referencia en la publicación del blog de Florian. Parece que:

#!/bin/bash

# if [[ unsuccessful monitor operation ]] or [[ not monitor op ]]
if [[ ${CRM_notify_rc} != 0 && ${CRM_notify_task} == "monitor" ]] || 
[[ ${CRM_notify_task} != "monitor" ]] ; then

# Do whatever you want with the information available in the
# environment variables mentioned above that will do something
# meaningful for you.

# EG: Fire off an email attempting to be human readable
# SUBJ="${CRM_notify_task} ${CRM_notify_desc} for ${CRM_notify_rsc} "
# SUBJ="$SUBJ on ${CRM_notify_node}"
# MSG="The ${CRM_notify_task} operation for ${CRM_notify_rsc} on "
# MSG="$MSG ${CRM_notify_node} exited with status ${CRM_notify_rc} "
# MSG="$MSG (${CRM_notify_desc}) and we expected ${CRM_notify_target_rc}"
# echo "$MSG" | mail -s "$SUBJ" you@host.com


fi
exit 0

Sin embargo, si usted está siguiendo los consejos de Florian yAl clonar el recurso, el script se ejecutará en cada nodo. Para las capturas SNMP, eso está perfectamente bien. Sin embargo, si está haciendo algo como enviar un correo electrónico desde el script, es posible que no desee que se clone.


0 para la respuesta № 2

Ambos nodos:

cat << "EOL">/usr/local/bin/crm_e-mail.sh
#!/bin/bash
echo "Please check your installation @ http://domain.com.com:2224 & http://domain.com.com/clustermon.html" | mail -s "Cluster Change Detected" sysalert@domain.com
EOL
chmod 700 /usr/local/bin/crm_e-mail.sh
chown root.root /usr/local/bin/crm_e-mail.sh

Un nodo:

pcs resource create ClusterMon-SMTP ClusterMon user=root 
update=10 extra_options="-E /usr/local/bin/crm_e-mail.sh --watch-fencing" 
pidfile=/var/run/crm_mon-smtp.pid clone