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

Administración de las actualizaciones de propiedades

El servicio de datos de ejemplo implementa los métodos Validate y Update para permitir que un administrador del clúster administre la actualización de las propiedades.

Funcionamiento del método Validate

RGM llama al método Validate cuando se crea un recurso y cuando una acción administrativa actualiza las propiedades del recurso o el grupo que lo contiene. RGM invoca Validate antes de que se apliquen la creación o la actualización y un código de salida fallido del método en cualquier nodo provoque la cancelación de la creación o actualización.

RGM sólo llama a Validate cuando el administrador del clúster modifica las propiedades del recurso o grupo de recurso, y no cuando RGM establece las propiedades o el supervisor configura las propiedades de recursos Status y Status_msg.


Nota –

El método Monitor_check también llama de forma explícita a Validate cada vez que el método PROBE intenta realizar una recuperación ante fallos del servicio de datos en un nuevo nodo.


Comportamiento del método Validate

RGM llama a Validate con argumentos adicionales a aquéllos transferidos a otros métodos, incluidos los valores y las propiedades que se están actualizando. Por lo tanto, este método del servicio de datos de ejemplo debe implementar una función parse_args() diferente para administrar los argumentos adicionales.

El método Validate del servicio de datos de ejemplo verifica una única propiedad, la propiedad de extensión Confdir. Esta propiedad señala al directorio de configuración de DNS, que es fundamental para una operación satisfactoria del DNS.


Nota –

Dado que no se puede modificar el directorio de configuración mientras DNS está en ejecución, la propiedad Confdir se declara en el archivo RTR como TUNABLE = AT_CREATION . Por lo tanto, el método Validate nunca se invoca para verificar la propiedad Confdir como resultado de una actualización, sino sólo cuando se crea el recurso del servicio de datos.


Si Confdir es una de las propiedades que RGM pasa a Validate, la función parse_args() recupera y guarda su valor. Validate comprueba que el directorio al que Confdir señala está accesible y que el archivo named.conf existe en ese directorio y contiene datos.

Si la función parse_args() no puede recuperar el valor de Confdir desde los argumentos de línea de comandos transferidos por RGM, Validate intentará aún validar la propiedad Confdir. Validate utiliza scha_resource_get() para obtener el valor de Confdir desde la configuración estática. Validate realiza las mismas comprobaciones para verificar que el directorio de configuración está accesible y contiene un archivo named.conf no vacío.

Si Validate sale con un fallo, fallarán la actualización o la creación de todas las propiedades, no sólo de Confdir.

Función de análisis del método Validate

Como el método pasa al método Validate un conjunto de argumentos diferentes al de los otros métodos de rellamada, Validate require una función distinta para analizar los argumentos. Consulte la página de comando man rt_callbacks(1HA) para obtener más información sobre los argumentos que se pasan a Validate y a los otros métodos de rellamada. El siguiente código de ejemplo muestra la función parse_args() de Validate .

#########################################################################
# Parse Validate arguments.
#
function parse_args # [args...]
{

   typeset opt
   while getopts 'cur:x:g:R:T:G:' 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
                  ;;
         r)
                  # The method is not accessing any system defined
                  # properties so this is a no-op
                  ;;
         g)
                  # The method is not accessing any resource group
                  # properties, so this is a no-op
                  ;;
         c)
                  # Indicates the Validate method is being called while
                  # creating the resource, so this flag is a no-op.
                  ;;
         u)
                  # Indicates the updating of a property when the
                  # resource already exists. If the update is to the
                  # Confdir property then Confdir should appear in the
                  # command-line arguments. If it does not, the method must
                  # look for it specifically using scha_resource_get.
                  UPDATE_PROPERTY=1
                  ;;
         x)
                  # Extension property list. Separate the property and
                  # value pairs using "=" as the separator.
                  PROPERTY=`echo $OPTARG | awk -F= '{print $1}'`
                  VAL=`echo $OPTARG | awk -F= '{print $2}'`
                  # If the Confdir extension property is found on the
                  # command line, note its value.
                  if [ $PROPERTY == "Confdir" ]; then
                           CONFDIR=$VAL
                           CONFDIR_FOUND=1
                  fi
                  ;;
         *)
                  logger -p ${SYSLOG_FACILITY}.err \
                  -t [$SYSLOG_TAG] \
                  "ERROR: Option $OPTARG unknown"
                  exit 1
                  ;;
         esac
   done
}

Al igual que la función parse_args() de los otros métodos, esta función proporciona los indicadores (R) para capturar el nombre del recurso, ( G) para capturar el nombre del grupo de recursos y (T) para capturar el tipo de recurso transferido por RGM.

Se omitirán los indicadores r (que distingue una propiedad definida por el sistema), g (que distingue una propiedad del grupo de recursos) y c (que señala que se está produciendo la validación durante la creación del recurso). Se omiten porque se está llamando a este método para validar la propiedad de extensión durante la actualización del recurso.

El indicador u establece el valor de la variable del shell UPDATE_PROPERTY en 1 (TRUE). El indicador x captura el nombre y los valores de las propiedades que se están actualizando. Si Confdir es una de las propiedades que se están actualizando, su valor se incluye en la variables de shell CONFDIR y la variable CONFDIR_FOUND se establece en 1 (TRUE).

Validación de Confdir

En la función MAIN, Validate establece en primer lugar la variable CONFDIR en una cadena vacía, y UPDATE_PROPERTY y CONFDIR_FOUND en 0.

CONFDIR=""
UPDATE_PROPERTY=0
CONFDIR_FOUND=0

Validate llama a parse_args() para analizar los argumentos transferidos por RGM.

parse_args “$@”

Validate comprueba si se está llamando al método Validate como resultado de la actualización de las propiedades. Validate también comprueba si la propiedad de extensión Confdir se encuentra en la línea de comandos. Validate verifica que la propiedad Confdir tiene un valor y, en caso de no ser así, sale con un estado de fallo y un mensaje de error.

if ( (( $UPDATE_PROPERTY == 1 )) &&  (( CONFDIR_FOUND == 0 )) ); then
         config_info=`scha_resource_get -O Extension -R $RESOURCE_NAME \
            -G $RESOURCEGROUP_NAME Confdir`
         CONFDIR=`echo $config_info | awk '{print $2}'`
fi

# Verify that the Confdir property has a value. If not there is a failure
# and exit with status 1
if [[ -z $CONFDIR ]]; then
         logger -p ${SYSLOG_FACILITY}.err \
            "${ARGV0} Validate method for resource "$RESOURCE_NAME " failed"
         exit 1
fi

Nota –

En concreto, el código anterior comprueba si se está llamando a Validate como resultado de la actualización ($UPDATE_PROPERTY == 1) y si la propiedad no se encuentra en la línea de comandos ( CONFDIR_FOUND == 0). En ese caso, el código recupera el valor existente de Confdir mediante scha_resource_get(). Si Confdir se encuentra en la línea de comandos (CONFDIR_FOUND == 1), el valor de CONFDIR proviene de la función parse_args() y no de scha_resource_get().


El método Validate utiliza el valor de CONFDIRpara comprobar que se puede acceder al directorio. De lo contrario, Validate registra un mensaje de error y sale con un estado de error.

# Check if $CONFDIR is accessible.
if [ ! -d $CONFDIR ]; then
   logger -p ${SYSLOG_FACILITY}.err \
         -t [$SYSLOG_TAG] \
         "${ARGV0} Directory $CONFDIR missing or not mounted"
   exit 1
fi

Antes de validar la actualización de la propiedad Confdir, Validate realiza una comprobación final para verificar si se encuentra el archivo named.conf. Si no lo está, el método registra un mensaje de error y sale con un estado de error.

# Check that the named.conf file is present in the Confdir directory
if [ ! -s $CONFDIR/named.conf ]; then
         logger -p ${SYSLOG_FACILITY}.err \
            -t [$SYSLOG_TAG] \
            "${ARGV0} File $CONFDIR/named.conf is missing or empty"
         exit 1
fi

Si se supera la comprobación final, Validate registra un mensaje satisfactorio y sale con un estado de éxito.

# Log a message indicating that the Validate method was successful.
logger -p ${SYSLOG_FACILITY}.err \
   -t [$SYSLOG_TAG] \
   "${ARGV0} Validate method for resource "$RESOURCE_NAME \
   " completed successfully"

exit 0

Estado de salida de Validate

Si Validate sale con éxito (0), se crea Confdir con el valor nuevo. Si, por el contrario, Validate sale con fallos (1), no se crean Confdir ni las demás propiedades y se genera un mensaje en el que se indica el motivo.

Funcionamiento del método Update

RGM ejecuta el método Update para notificar a un recurso en ejecución que se han modificado sus propiedades. RGM ejecuta Update después de que el administrador del clúster consiga configurar las propiedades de un recurso o su grupo. Este método se invoca en los nodos en los que el recurso esté en línea.

Comportamiento del método Update

El método Update no actualiza las propiedades, sino RGM. El método Update notifica a los procesos que se están ejecutando que se ha realizado una actualización. El único proceso del servicio de datos de ejemplo que se ve afectado por la actualización de propiedades es el supervisor de fallos. Por lo tanto, el único proceso que detiene y reinicia el método Update es el del supervisor.

El método Update debe comprobar que el supervisor de fallos se está ejecutando y, a continuación, desactivarlo con el comando pmfadm. El método obtiene la ubicación del programa de análisis que implementa el supervisor de fallos y lo reinicia con el comando pmfadm.

Parada del supervisor con Update

El método Update utiliza pmfadm -q para comprobar que el supervisor se está ejecutando y, si es así, lo desactiva con el comando pmfadm -s TERM. Si se finaliza con éxito el supervisor, se envía un mensaje en relación con esta acción al administrador del clúster. Si el supervisor no se puede detener, Update sale con un estado de fallo y envía un mensaje de error al administrador del clúster.

if pmfadm -q $RESOURCE_NAME.monitor; then

# Kill the monitor that is running already
pmfadm -s $PMF_TAG TERM
    if [ $? -ne 0 ]; then
       logger -p ${SYSLOG_FACILITY}.err \
              -t [$SYSLOG_TAG] \
                 "${ARGV0} Could not stop the monitor"
       exit 1
    else
    # could successfully stop DNS. Log a message.
       logger -p ${SYSLOG_FACILITY}.err \
              -t [$RESOURCETYPE_NAME,$RESOURCEGROUP_NAME,$RESOURCE_NAME] \
                 "Monitor for HA-DNS successfully stopped"
    fi

Reinicio del supervisor

Para reiniciar el supervisor, el método Update debe encontrar la secuencia que implementa el programa de análisis. Éste reside en el directorio básico del servicio de datos, al que señala la propiedad Rt_basedir. Update recupera el valor de RT_basedir y lo guarda 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`

Update utiliza el programa RT_BASEDIR con pmfadm para reiniciar el programa dns_probe. Si esta acción se realiza satisfactoriamente, Update sale con éxito y envía un mensaje en relación a esto al administrador del clúster. Si pmfadm no puede iniciar el programa de análisis, Update sale con un estado de fallo y registra un mensaje de error.

Estado de salida de Update

Un fallo del método Update hace que el recurso se ponga en estado de “actualización no satisfactoria”. Este estado no afecta a la administración del recurso por parte de RGM, pero indica el fallo de la actualización a las herramientas de administración mediante la función syslog().