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 comandos y exportación de la ruta

La primera línea de una secuencia de comandos del shell debe identificar el intérprete de éstas. Cada secuencia de comandos del método del servicio de datos de ejemplo identifica el intérprete de comandos de la siguiente forma:

#!/bin/ksh

Todas las secuencias de comandos de la aplicación de ejemplo exportan la ruta a los binarios y las bibliotecas de Sun Cluster en lugar de utilizar 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 comandos del método, excepto Validate, utilizan pmfadm para iniciar o detener el servicio de datos o el supervisor, pasando el nombre del recurso. Cada secuencia de comandos 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 comandos del método utiliza el comando logger para almacenar mensajes en el registro del sistema. Cada secuencia de comandos define una variable, SYSLOG_TAG, que puede pasarse a logger con la opción -t para identificar el tipo, el nombre y el grupo de recursos del recurso para el que se está registrando el mensaje.

Todos los métodos definen SYSLOG_TAG del mismo modo, como se muestra en el siguiente código de ejemplo. Los métodos dns_probe, dns_svc_start , dns_svc_stop y dns_monitor_check definen PMF_TAG de la siguiente forma (pmfadm y logger se utilizan con el método dns_svc_stop).

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

PMF_TAG=$RESOURCE_NAME.named

SYSLOG_TAG=$RESOURCETYPE_NAME,$RESOURCEGROUP_NAME,$RESOURCE_NAME

   # Send a SIGTERM signal to the data service and wait for 80% of the
   # total timeout value.
   pmfadm -s $PMF_TAG.named -w $SMOOTH_TIMEOUT TERM
   if [ $? -ne 0 ]; then
      logger -p ${SYSLOG_FACILITY}.info \
          -t [$SYSLOG_TAG] \
          “${ARGV0} Failed to stop HA-DNS with SIGTERM; Retry with \
           SIGKILL”

Los métodos dns_monitor_start, dns_monitor_stop y dns_update definen PMF_TAG de la siguiente forma (tpmfadm se utiliza con el método dns_monitor_stop):

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

PMF_TAG=$RESOURCE_NAME.monitor
SYSLOG_TAG=$RESOURCETYPE_NAME,$RESOURCEGROUP_NAME,$RESOURCE_NAME
...
# See if the monitor is running, and if so, kill it. 
if pmfadm -q $PMF_TAG.monitor; then
   pmfadm -s $PMF_TAG.monitor KILL

Análisis de los argumentos de función

RGM ejecuta todos los métodos de rellamada, excepto Validate, como se indica a continuación:

method-name -R resource-name -T resource-type-name -G resource-group-name

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 en relación con el 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, el directorio básico y los nombres de métodos se especifican de la siguiente forma:

RT_basedir=/opt/SUNWsample/bin;
Start = dns_svc_start;
Stop =  dns_svc_stop;
...

Todos los argumentos de los métodos de rellamada se pasan como valores marcados. El argumento -R indica el nombre de la instancia del recurso. El argumento -T indica el tipo de recurso. El argumento -G indica el grupo en el que se ha configurado 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 –

Se llama al método Validate con argumentos adicionales, es decir, los valores de propiedades del recurso y el grupo de recursos. Consulte Administración 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 ésta transfiere. 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.

El siguiente ejemplo muestra la función parse_args() utilizada para los métodos de rellamada en la aplicación de ejemplo.

#########################################################################
# Parse program arguments.
#
function parse_args # [args ...]
{
      typeset opt

      while getopts 'R:G:T:' opt
      do
             case "$opt" in
             R)
                  # Name of the DNS resource.
                  RESOURCE_NAME=$OPTARG
                  ;;
             G)
                  # Name of the resource group in which the resource is
                  # configured.
                  RESOURCEGROUP_NAME=$OPTARG
                  ;;
             T)
                  # Name of the resource type.
                  RESOURCETYPE_NAME=$OPTARG
                  ;;
             *)
                  logger -p ${SYSLOG_FACILITY}.err \
                  -t [$RESOURCETYPE_NAME,$RESOURCEGROUP_NAME,$RESOURCE_NAME] \
                  "ERROR: Option $OPTARG unknown"
                  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 lo tanto, este método contiene una función de análisis idéntica a la utilizada por los otros métodos de rellamada.


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

parse_args “$@”

Generación de mensajes de error

Los métodos de rellamada deberían utilizar la función syslog() para proporcionar los mensajes de error a los usuarios finales. Todos los métodos de rellamada del servicio de datos de ejemplo utilizan el comando scha_cluster_get para recuperar el número de la función syslog() utilizado por el registro del sistema, como se indica a continuación:

SYSLOG_FACILITY=`scha_cluster_get -O SYSLOG_FACILITY`

El valor se almacena en la variable del shell, SYSLOG_FACILITY, y puede emplearse como utilidad del comando logger para incluir mensajes en el registro del clúster. Por ejemplo, el método Start del servicio de datos de ejemplo recupera la función 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 successfully started"
fi

Para obtener más información, consulte la página de comando man scha_cluster_get(1HA).

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.

Están disponibles tanto las propiedades definidas por el sistema como las propiedades de extensión. Las propiedades definidas por el sistema son predefinidas, mientras que las propiedades de extensión se definen en el archivo RTR.

Al utilizar la funcion scha_resource_get() para obtener el valor de una propiedad definida por el sistema, se debe especificar el nombre de la propiedad con la opción -O. El comando sólo devuelve el valor de la propiedad. Por ejemplo, en el servicio de datos de ejemplo, el método Monitor_start debe encontrar el programa de análisis para poder iniciarlo. Éste reside en el directorio básico del servicio de datos, al que señala la propiedad Rt_basedir. El método Monitor_start recupera el valor de RT_basedir y lo ubica 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`

Debe utilizar la opción -O para especificar que una propiedad es de extensión. Además, debe proporcionar el nombre de la propiedad como último argumento. Para las propiedades de extensión, el comando devuelve el tipo y el valor de la propiedad. Por ejemplo, en el servicio de datos, el programa de análisis recupera el tipo y el valor de la propiedad de extensión Probe_timeout y utiliza el comando awk para incluir sólo el valor en la variable de shell PROBE_TIMEOUT, como se indica 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}'`