Si la variable probefail est différente de 0 (réussite), cela signifie que la commande nslookup a dépassé le délai imparti ou que la réponse provient d'un serveur autre que le DNS du service modèle. Dans un cas comme dans l'autre, le serveur DNS ne fonctionne pas de la manière attendue et le détecteur appelle la fonction decide_restart_or_failover() afin de déterminer s'il convient ou non de redémarrer le service de données localement ou de demander que le RGM déplace le service de données sur un autre noeud. Si la variable probefail a la valeur 0, alors un message indiquant que la sonde a réussi est généré.
if [ $probefail -ne 0 ]; then decide_restart_or_failover else logger -p ${SYSLOG_FACILITY}.err\ -t [$SYSLOG_TAG]\ "${ARGV0} Probe for resource HA-DNS successful" fi |
La fonction decide_restart_or_failover() utilise un délai (Intervalle_nouvelles_tentatives) et un compteur d'échecs (Nombre_nouvelles_tentatives) afin de déterminer s'il convient de redémarrer le DNS localement ou de demander à ce que le RGM déplace le service de données sur un autre noeud. Elle met en oeuvre le code conditionnel suivant (voir l'affichage du code pour decide_restart_or_failover () dans la rubrique Programme de SONDE).
S'il s'agit du premier échec, redémarrez le service de données. Consignez un message d'erreur et augmentez le compteur dans la variable retries.
Si ce n'est pas le premier échec, mais si le délai a été dépassé, redémarrez le service de données. Consignez un message d'erreur et réinitialisez le compteur ainsi que le délai.
Si le délai n'est pas dépassé et si le compteur des nouvelles tentatives a été dépassé, basculez vers un autre noeud. Si le basculement échoue, consignez une erreur et quittez le programme de sonde avec un état 1 (échec).
Si ni le délai ni le compteur n'ont été dépassés, redémarrez le service de données. Consignez un message d'erreur et augmentez le compteur dans la variable retries.
Si le nombre de redémarrages atteint la limite pendant le délai, la fonction demande au RGM de déplacer le service de données vers un autre noeud. Si le nombre de redémarrages se situe sous la limite ou si l'intervalle a été dépassé, entraînant une réinitialisation du compteur, la fonction tente de redémarrer le DNS sur le même noeud. Remarquez les points suivants concernant cette fonction :
L'utilitaire gettime sert à mesurer le délai entre les redémarrages. Il s'agit d'un programme C résidant dans le répertoire ( Rép_base_TR).
Les propriétés de ressource définies par le système Nombre_nouvelles_tentatives et Intervalle_nouvelles_tentatives déterminent le nombre de tentatives de redémarrage et le délai pendant lequel compter. Par défaut, elles définissent 2 tentatives sur une période de 5 minutes (300 secondes) dans le fichier RTR. Toutefois, l'administrateur du cluster peut modifier ces valeurs.
La fonction restart_service() est appelée afin de tenter de redémarrer le service de données sur le même noeud. Reportez-vous à la rubrique suivante, Redémarrage du service de données, pour obtenir de plus amples informations sur cette fonction.
La fonction API scha_control(), avec l'option GIVEOVER, met le groupe de ressources contenant le service de données modèle hors ligne, puis de nouveau en ligne, sur un autre noeud.