Sun Cluster: Guía del desarrollador de los servicios de datos del sistema operativo Solaris

Funciones comunes para todos los métodos

Esta sección describe las siguientes funciones que se emplean en todos los métodos de rellamada del servicio de datos de ejemplo:

Identificación del intérprete de órdenes y exportación de la ruta

La primera línea de una secuencia de órdenes del shell debe identificar el intérprete de éstas. Cada una de las secuencias de órdenes de los métodos del servicio de datos de ejemplo identifica el intérprete de órdenes como se indica a continuación:


#!/bin/ksh

Todas las secuencias de órdenes del método de la aplicación de ejemplo exportan la ruta a los binarios y bibliotecas de Sun Cluster, en lugar de tener en cuenta la configuración de PATH del usuario.


#######################################################################
# MAIN
#######################################################################

export PATH=/bin:/usr/bin:/usr/cluster/bin:/usr/sbin:/usr/proc/bin:$PATH

Declaración de las variables PMF_TAG y SYSLOG_TAG

Todas las secuencias de órdenes del método (salvo Validate) utilizan pmfadm para iniciar (o detener) el servicio de datos o el supervisor, pasando el nombre del recurso. Cada secuencia de órdenes define una variable, PMF_TAG, que puede pasarse a pmfadm para identificar el servicio de datos o el supervisor.

Del mismo modo, cada secuencia de órdenes del método utiliza la orden logger para guardar los mensajes en el registro del sistema. Cada secuencia de órdenes define una variable, SYSLOG_TAG, que se puede pasar a logger con la opción -t para identificar el tipo de recurso, el grupo de recursos y el nombre de recurso del recurso para el que se está registrando el mensaje.

Todos los métodos definen SYSLOG_TAG del mismo modo, como muestra el ejemplo siguiente. Los métodos dns_probe, dns_svc_start, dns_svc_stop y dns_monitor_check definen PMF_TAG como se indica a continuación (la utilización de pmfadm y logger se produce desde el método dns_svc_stop):


#########################################################################
# MAIN
#########################################################################

PMF_TAG=$RESOURCE_NAME.named

SYSLOG_TAG=$RESOURCETYPE_NAME,$RESOURCEGROUP_NAME,$RESOURCE_NAME

   # Enviar una señal SIGTERM al servicio de datos y esperar el 80% del
   # valor total del tiempo de espera.
   pmfadm -s $PMF_TAG.named -w $SMOOTH_TIMEOUT TERM
   if [ $? -ne 0 ]; then
      logger -p ${SYSLOG_FACILITY}.info \
          -t [$SYSLOG_TAG] \
          “${ARGV0} No se ha podido detener HA-DNS con SIGTERM; \
           Reitentar con SIGKILL”

Los métodos dns_monitor_start, dns_monitor_stop y dns_update definen PMF_TAG como se indica a continuación (la utilización de pmfadm se realiza desde el método dns_monitor_stop):


#########################################################################
# MAIN
#########################################################################

PMF_TAG=$RESOURCE_NAME.monitor
SYSLOG_TAG=$RESOURCETYPE_NAME,$RESOURCEGROUP_NAME,$RESOURCE_NAME
...

# Verificar si el supervisor está en ejecución; si así fuera, detenerlo.
if pmfadm -q $PMF_TAG.monitor; then
   pmfadm -s $PMF_TAG.monitor KILL

Análisis de los argumentos de función

RGM invoca todos los métodos de rellamada, salvo Validate, como se indica a continuación.


nombre_método -R nombre_recurso -T nombre_tipo_recurso -G nombre_grupo_recurso

El nombre del método es el de la ruta del programa que implementa el método de rellamada. Un servicio de datos especifica el nombre de la ruta de cada método en el archivo RTR. Estos nombres de ruta son relativos al directorio especificado por la propiedad Rt_basedir también en el archivo RTR. Por ejemplo, en el archivo RTR del servicio de datos de ejemplo, los nombres del directorio básico y del método se especifican como se indica a continuación.


RT_BASEDIR=/opt/SUNWsample/bin;
START = dns_svc_start;
STOP =  dns_svc_stop;
...

Todos los argumentos del método de rellamada se pasan como valores con indicadores, donde -R indica el nombre de la instancia de recursos, -T, el tipo del recurso y -G, el grupo en el que se configura el recurso. Consulte la página de comando man rt_callbacks(1HA) para obtener más información sobre los métodos de rellamada.


Nota –

El método Validate se invoca con argumentos adicionales (los valores de la propiedad del recurso y del grupo de recursos en el que se invoca). Consulte Manejo de las actualizaciones de propiedades para obtener más información.


Cada método de rellamada necesita una función para analizar los argumentos que se le pasan. Dado que las rellamadas pasan siempre por los mismos argumentos, el servicio de datos proporciona una única función de análisis para todas las rellamadas de la aplicación.

A continuación se muestra la función parse_args() empleada para los métodos de rellamada en la aplicación de ejemplo.


#########################################################################
# Analizar argumentos del programa.
#
function parse_args # [args ...]
{
      typeset opt

      while getopts 'R:G:T:' opt
      do
             case "$opt" in
             R)
                  # Nombre del recurso de DNS.
                  RESOURCE_NAME=$OPTARG
                  ;;
             G)
                  # Nombre del grupo de recursos en el que se ha configurado
                  # el recurso.
                  RESOURCEGROUP_NAME=$OPTARG
                  ;;
             T)
                  # Nombre del tipo de recurso.
                  RESOURCETYPE_NAME=$OPTARG
                  ;;
             *)
                  logger -p ${SYSLOG_FACILITY}.err \
                  -t [$RESOURCETYPE_NAME,$RESOURCEGROUP_NAME,$RESOURCE_NAME] \
                  "ERROR: Opción $OPTARG desconocida"
                  exit 1
                      ;;
             esac
    done
}


Nota –

Aunque el método PROBE de la aplicación de ejemplo está definido por el usuario (no es un método de rellamada de Sun Cluster), se invoca con los mismos argumentos que los métodos de rellamada. Por tanto, este método contiene una función de análisis idéntica a la que utilizan otros métodos de rellamada.


La función de análisis se invoca en MAIN como:


parse_args “$@”

Generación de mensajes de error

Se recomienda que los métodos de rellamada utilicen la función syslog para enviar mensajes de error a los usuarios finales. Todos los métodos de rellamada del servicio de datos de ejemplo utilizan la función scha_cluster_get() para recuperar el número del recurso syslog utilizado para el registro del clúster, como se indica a continuación:


SYSLOG_FACILITY=`scha_cluster_get -O SYSLOG_FACILITY` 

El valor se almacena en una variable del shell, SYSLOG_FACILITY, y se puede utilizar como el recurso de la orden logger para guardar mensajes en un registro del clúster. Por ejemplo, el método Start del servicio de datos de ejemplo recupera el recurso syslog y registra un mensaje que indica que el servicio de datos se ha iniciado, como se muestra a continuación:


SYSLOG_FACILITY=`scha_cluster_get -O SYSLOG_FACILITY`
...

if [ $? -eq 0 ]; then
   logger -p ${SYSLOG_FACILITY}.err \
         -t [$SYSLOG_TAG] \
         "${ARGV0} HA-DNS iniciado satisfactoriamente"
fi

Consulte la página de comando man scha_cluster_get(1HA) para obtener más información.

Obtención de la información de la propiedad

La mayoría de los métodos de rellamada necesitan obtener información sobre las propiedades de recurso y el tipo de recurso del servicio de datos. La API proporciona la función scha_resource_get() con este fin.

Hay dos tipos disponibles de propiedades de recurso: propiedades definidas por el sistema y propiedades de extensión; aquellas están predefinidas; éstas se definen en el archivo RTR.

Cuando se usa scha_resource_get() para obtener el valor de una propiedad definida por el sistema, se especifica el nombre de ésta con el parámetro -O. La orden sólo devuelve el valor de la propiedad. Por ejemplo, en el servicio de datos de ejemplo, el método Monitor_start necesita ubicar el programa de análisis para poder ejecutarlo; éste reside en el directorio básico del servicio de datos, señalado por la propiedad RT_BASEDIR. De esta manera el método Monitor_start recupera el valor de RT_BASEDIR y lo sitúa en la variable RT_BASEDIR como se muestra a continuación.


RT_BASEDIR=`scha_resource_get -O RT_BASEDIR -R $RESOURCE_NAME -G \
$RESOURCEGROUP_NAME`

Las propiedades de extension se deben especificar con la opción -O e indicar el nombre de la propiedad como el último parámetro. Para estas propiedades, la orden devuelve el tipo y el valor de la propiedad. Por ejemplo, en el servicio de datos de ejemplo, el programa de análisis recupera el tipo y el valor de la propiedad de extensión probe_timeout y después usa awk para poner el valor sólo en la variable del shell PROBE_TIMEOUT como se muestra a continuación.


probe_timeout_info=`scha_resource_get -O Extension -R $RESOURCE_NAME \
-G $RESOURCEGROUP_NAME Probe_timeout`
PROBE_TIMEOUT=`echo $probe_timeout_info | awk '{print $2}'`