Bonjour à tous,

J’ai eu un jour un problème avec les volumes répliqués (AFR) de glusterfs. En effet si vous avez un serveur qui ne répond pas correctement comme par exemple l’arbitrer, les fichiers à répliquer vont s’accumuler et une fois que vous en avez beaucoup, vos serveurs vont monter en CPU à fond car ils n’arrivent pas à gérer ces nombres incroyables de fichiers.

Il est donc important de surveiller le nombre de « heals ». En effet, s’ils dépassent la centaine (100) il faut se poser des questions sur la lenteur ou sur l’état de santé de votre glusterfs.

On peut également vérifier directement sur le serveur avec la commande :

gluster volume heal NOM-DE-LA-BRICK statistics heal-count

Voici un script donc à utiliser sur Centreon (et Nagios/Shinken/etc…) :

#!/bin/sh
################
# Author : Bruno LEAL DE SOUSA
# Version : v1
# Configuration :
# 		Afin de faciliter la communication, il faut au prealable autoriser les connexions SSH entre les machines au travers des cles SSH.
#		Copier le contenu de du fichier .ssh/id_rsa.pub du serveur SUPERVISION dans  .ssh/authorized_keys du serveur distant
#############################################################################

STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
STATE_UNKNOWN=3

if [[ -z "$1" ]] 
then
        echo "Parametres manquants ! Syntax: ./check_rhel_gluster_heals.sh NOMSERVEUR Brick SeuilWarning SeuilCritical"
        echo "Ex: ./check_rhel_gluster_heals.sh SRV-01 SHARE-BUREAU 10 150"
        exit $STATE_UNKNOWN
fi

SRV=$1
BRICK=$2
WARN=$3
CRIT=$4

REQUEST_SSH="$(ssh root@$SRV gluster volume heal $BRICK statistics heal-count | awk '$1=="Brick"{printf $2"="};$1=="Number"{print $4","}')"

SRV1="$(echo $REQUEST_SSH | awk -F "=|," '{print  $1}')"
SRV2="$(echo $REQUEST_SSH | awk -F "=|," '{print  $3}')"
SRV3="$(echo $REQUEST_SSH | awk -F "=|," '{print  $5}')"
PERFSRV1="$(echo $REQUEST_SSH | awk -F "=|," '{print  $2}')"
PERFSRV2="$(echo $REQUEST_SSH | awk -F "=|," '{print  $4}')"
PERFSRV3="$(echo $REQUEST_SSH | awk -F "=|," '{print  $6}')"


OUTPUT="Heals : $PERFSRV1,$PERFSRV2,$PERFSRV3 | $SRV1=$PERFSRV1,$SRV2=$PERFSRV2,$SRV3=$PERFSRV3"
#echo $OUTPUT

if [ $PERFSRV1 -le $WARN ] || [ $PERFSRV2 -le $WARN ] ||  [ $PERFSRV3 -le $WARN ]
then
  echo "OK - $OUTPUT"
  exit $STATE_OK
elif [ $PERFSRV1 -le $CRIT ] || [ $PERFSRV2 -le $CRIT ] ||  [ $PERFSRV3 -le $CRIT ]
then
  echo "WARNING - $OUTPUT"
  exit $STATE_WARNING
elif [ $PERFSRV1 -gt $CRIT ] || [ $PERFSRV2 -gt $CRIT ] ||  [ $PERFSRV3 -gt $CRIT ]
then
  echo "CRITICAL - $OUTPUT"
  exit $STATE_CRITICAL
else
  echo "UNKNOWN"
  exit $STATE_UNKNOWN
fi
check-rhel-gluster-heals.sh

Il a été testé et validé sur RedHat Gluster 3.3 en RedHat 7.

A bientôt.

—————

Bruno SOUSA