Guide du développeur de services de données Sun Cluster pour SE Solaris

Gestion des mises à jour des propriétés

Le service de données modèle met en oeuvre les méthodes de Validation et de Mise_à_jour afin de gérer la mise à jour des propriétés par l'administrateur du cluster.

Fonctionnement de la méthode Validate

Le RGM appelle la méthode de Validation lorsqu'un groupe est créé et lorsqu'une opération de l'administrateur met à jour les propriétés de la ressource ou du groupe qui la contient. Le RGM appelle Validation avant la création ou la mise à jour, et un code de sortie avec échec issu de la méthode sur un noeud entraîne l'annulation de la création ou de la mise à jour.

Le RGM n'appelle Validate que si l'administrateur du cluster modifie les propriétés de la ressource ou du groupe de ressources, et non lorsque le RGM définit des propriétés ou qu'un détecteur définit les propriétés de ressource Status ou Status_msg.


Remarque –

la méthode Monitor_check appelle aussi explicitement la méthode Validate à chaque fois que la méthode PROBE tente de basculer le service de données sur un nouveau noeud.


Actions de la méthode Validate

Le RGM appelle Validate avec des arguments supplémentaires par rapport à ceux passés à d'autres méthodes, et notamment avec les propriétés et valeurs qui sont mises à jour. Par conséquent, cette méthode du service de données modèle doit mettre en oeuvre une fonction parse_args() différente pour gérer les arguments supplémentaires.

La méthode Validate vérifie une seule propriété, la propriété d'extension Confdir. Cette propriété pointe vers le répertoire de configuration DNS, essentiel pour un bon fonctionnement du DNS.


Remarque –

le répertoire de configuration ne pouvant pas être modifié lorsque le DNS fonctionne, la propriété Confdir est déclarée TUNABLE = AT_CREATION dans le fichier RTR. La méthode Validate n'est donc jamais appelée pour vérifier la propriété Confdir après une mise à jour, mais seulement lors de la création de la ressource du service de données.


Si Confdir est l'une des propriétés que le RGM passe à Validate, la fonction parse_args() récupère et enregistre sa valeur. Validate vérifie que le répertoire désigné par la nouvelle valeur de Confdir est accessible et qu'il existe bien dans ce répertoire un fichier named.conf qui contient des données.

Si la fonction parse_args() ne peut récupérer la valeur de Confdir à partir des arguments de ligne de commande que lui transmet le RGM, Validate essaie malgré tout de valider la propriété Confdir. Validate utilise scha_resource_get() pour obtenir la valeur de Confdir à partir de la configuration statique. Validate effectue les mêmes contrôles pour vérifier que le répertoire de configuration est accessible et contient un fichier named.conf non vide.

Si Validate se ferme en affichant un état d'échec, la mise à jour ou la création de toutes les propriétés, et pas seulement de Confdir, échoue.

Fonction d'analyse de la méthode Validation

Le RGM passant à la méthode Validate une série d'arguments différente de celle transmise aux autres méthodes de rappel, Validate requiert une fonction d'analyse des arguments différente de celle des autres méthodes. Reportez-vous à la page de manuel rt_callbacks(1HA) pour obtenir plus d'informations sur les arguments passés à Validate et aux autres méthodes de rappel. L'exemple de code suivant illustre la fonction parse_args() de Validate .

#########################################################################
# Analyse les arguments de Validate.
#
function parse_args # [args...]
{

   typeset opt
   while getopts 'cur:x:g:R:T:G:' opt
   do
         case "$opt" in
         R)
                  # Nom de la ressource DNS.
                  RESOURCE_NAME=$OPTARG
                  ;;
         G)
                  # Nom du groupe de ressources dans lequel la 
                  # ressource est configurée.
                  RESOURCEGROUP_NAME=$OPTARG
                  ;;
         T)
                  # Nom du type de ressource.
                  RESOURCETYPE_NAME=$OPTARG
                  ;;
         r)
                  # La méthode n'accède à aucune propriété 
                  # définie au niveau système, d'où l'opération ineffective
                  ;;
         g)
                  # La méthode n'accède à aucune propriété de
                  # groupe de ressources, d'où l'opération ineffective
                  ;;
         c)
                  # Indique que la méthode Validate est appelée lors
                  # de la création de la ressource, l'indicateur est donc ineffectif.
                  ;;
         u)
                  # Indique la mise à jour d'une propriété lorsque la
                  # ressource existe déjà. Si la mise à jour concerne la 
                  # propriété Confdir, alors Confdir doit apparaître dans les
                  # arguments de ligne de commande. Sinon, la méthode doit
                  # spécifiquement le rechercher avec scha_resource_get.
                  UPDATE_PROPERTY=1
                  ;;
         x)
                  # Liste de propriétés d'extension. Séparer les paires propriété
                  # et valeur en utilisant "=" comme séparateur.
                  PROPERTY=`echo $OPTARG | awk -F= '{print $1}'`
                  VAL=`echo $OPTARG | awk -F= '{print $2}'`
                  # Si la propriété d'extension Confdir est trouvée sur la ligne
                  # de commande, enregistrer sa valeur.
                  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
}

Comme la fonction parse_args() pour d'autres méthodes, cette fonction fournit un indicateur (R) pour capturer le nom de la ressource, ( G) pour capturer le nom du groupe de ressources et (T) pour capturer le type de la ressource qui est passée par le RGM.

L'indicateur r (qui indique une propriété définie par le système), l'indicateur g (qui indique une propriété de groupe de ressource) et l'indicateur c (qui indique que la validation est effectuée pendant la création de la ressource) sont ignorés, car cette méthode est appelée pour valider une propriété d'extension lorsque la ressource est mise à jour.

L'indicateur u définit la variable de shell UPDATE_PROPERTY à 1 (TRUE). L'indicateur x capture les noms et valeurs des propriétés qui sont mises à jour. Si Confdir est l'une des propriétés mises à jour, sa valeur est placée dans la variable de shell CONFDIR et la variable CONFDIR_FOUND est définie sur 1 (TRUE).

Validation de Confdir

Dans sa fonction MAIN, Validate définit d'abord la variable CONFDIR sur la chaîne vide et UPDATE_PROPERTY et CONFDIR_FOUND sur 0.

CONFDIR=""
UPDATE_PROPERTY=0
CONFDIR_FOUND=0

Validate appelle parse_args() pour analyser les arguments passés par le RGM.

parse_args “$@”

Validate vérifie si Validate est appelée en conséquence d'une mise à jour des propriétés. Validate vérifie également si la propriété d'extension Confdir était sur la ligne de commande. Validate s'assure que la propriété Confdir a une valeur et, dans le cas contraire, se termine avec un état d'échec et un message d'erreur.

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

# Vérifie que la propriété Confdir a une valeur. Sinon, c'est un échec
# et la fonction se termine avec l'état 1
if [[ -z $CONFDIR ]]; then
         logger -p ${SYSLOG_FACILITY}.err \
            "${ARGV0} Validate method for resource "$RESOURCE_NAME " failed"
         exit 1
fi

Remarque –

spécifiquement, le code précédent vérifie si Validate est appelée en conséquence d'une mise à jour ($UPDATE_PROPERTY == 1) et si la propriété n'a pas été trouvée sur la ligne de commande ( CONFDIR_FOUND == 0). Dans ce cas, le code récupère la valeur existante de Confdir en utilisant scha_resource_get(). Si Confdir est présent sur la ligne de commande (CONFDIR_FOUND == 1), la valeur de CONFDIR est obtenue par la fonction parse_args(), non par scha_resource_get().


La méthode Validate utilise la valeur de CONFDIR pour vérifier que le répertoire est accessible. Si le répertoire n'est pas accessible, Validate consigne un message d'erreur et se termine avec un état d'erreur.

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

Avant de valider la mise à jour de la propriété Rép_conf, Validation effectue un contrôle final pour vérifier si le fichier named.conf est présent. Si le fichier n'est pas présent, la méthode consigne un message d'erreur et se termine avec un état d'erreur.

# Vérifier si le fichier named.conf est présent dans le répertoire Confdir 
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 la vérification finale réussit, Validate consigne un message indiquant le succès et se termine avec un état de succès.

# Consigner un message indiquant que la méthode Validate a réussi.
logger -p ${SYSLOG_FACILITY}.err \
   -t [$SYSLOG_TAG] \
   "${ARGV0} Validate method for resource "$RESOURCE_NAME \
   " completed successfully"

exit 0

État de Validation à la fermeture

Si Validate se termine avec succès (0), Confdir est créé avec la nouvelle valeur. Si Validate se termine avec un échec (1), Confdir et les autres propriétés éventuelles ne sont pas créées et un message en indiquant la cause est généré.

Fonctionnement de la méthode Update

Le RGM exécute la méthode de Mise_à_jour pour notifier à une ressource en cours d'exécution que ses propriétés ont changé. Le RGM exécute Update après que l'administrateur du cluster ait fini de définir les propriétés d'une ressource ou de son groupe. Cette méthode est appelée sur les noeuds sur lesquels la ressource est en ligne.

Action de la méthode Update

La méthode Update ne met pas à jour les propriétés. C'est le rôle du RGM. La méthode Update notifie certains processus en cours d'exécution qu'une mise à jour a été effectuée. Le seul processus, dans le service de données modèle, affecté par une mise à jour de propriété est le détecteur de pannes. Par conséquent, la méthode Update arrête et redémarre le processus du détecteur de pannes.

La méthode Update doit vérifier que le détecteur de pannes est en cours d'exécution, puis le tuer à l'aide de la commande pmfadm. La méthode obtient l'emplacement du programme de sonde qui met en oeuvre le détecteur de pannes, et le redémarre par l'intermédiaire de la commande pmfadm.

Arrêt du détecteur à l’aide de la méthode Update

La méthode Update utilise pmfadm -q pour vérifier que le détecteur fonctionne et, si tel est le cas, le tue avec pmfadm -s TERM. Si le détecteur se termine correctement, un message en ce sens est envoyé à l'administrateur du cluster. Si le détecteur ne peut être arrêté, Update se termine avec un code d'échec et envoie un message d'erreur à l'administrateur du cluster.

if pmfadm -q $RESOURCE_NAME.monitor; then

# Tuer le détecteur déjà en cours d'exécution
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
    # arrêt du détecteur réussi. Consigner un message.
       logger -p ${SYSLOG_FACILITY}.err \
              -t [$RESOURCETYPE_NAME,$RESOURCEGROUP_NAME,$RESOURCE_NAME] \
                 "Monitor for HA-DNS successfully stopped"
    fi

Redémarrage du détecteur

Pour redémarrer le détecteur, la méthode Mise_à_jour doit localiser le script mettant en oeuvre le programme de sonde. Le programme de sonde se trouve dans le répertoire de base du service de données, vers lequel pointe la propriété RT_basedir. Update récupère la valeur de RT_basedir et l'enregistre dans la variable RT_BASEDIR, de la manière suivante :

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

Update utilise la valeur de RT_BASEDIR avec pmfadm pour redémarrer le programme dns_probe. En cas de succès, Update se termine avec un code de succès et envoie un message en ce sens à l'administrateur du cluster. Si pmfadm ne parvient pas à démarrer le programme de sonde, Update se termine avec un code d'échec et consigne un message d'erreur.

État de Update à la fermeture

L'échec de la méthode Update entraîne le passage de son état à “update failed” (“échec de la mise à jour”). Cet état est sans effet sur la gestion de la ressource par le RGM, mais indique l'échec de l'action de mise à jour aux outils d'administration via la fonction syslog().