Para el monitoreo del cluster se ha elegido
Ganglia por sus ventajas y porque está ampliamente testeado en muchos cluster que están en la actualidad funcionando.
Los componentes principales de Ganglia son:
- gmond: demonio que se encarga de recoger y distribuir el estado del nodo. Debe correr en TODOS los nodos
- gmetad: sirve de parser, obtiene los datos de los gmond y
los procesa. Sólo corre en el nodo front-end, es decir, en el nodo con
el que nos comunicamos
- web front-end: es una interfaz web en php que nos muestra
el estado del cluster de manera gráfica. Se instala en el nodo que tenga
el gmetad. Está escrito en php4 y no se visualiza bien si utilizamos
php5. Se puede obtener las últimas versiones de php4 para openSuSE en
esta dirección http://download.opensuse.org/repositories/home:/michal-m:/php4/openSUSE_10.2/ (se puede añadir como canal RPM-MetaData de Smart)
INSTALACIÓN
sudo apt-get install rrdtool librrds-perl librrd2-dev php5-gd
wget http://downloads.sourceforge.net/ganglia/ganglia-3.0.7.tar.gz
cd ganglia*
./configure --with-gmetad
make
mkdir /var/www/ganglia
sudo cp -r web/* /var/www/ganglia
gmond se ha de instalar en TODAS las máquinas a monitorizar.
En la máquina front-end del cluster instalamos
gmetad y el
web-front-end. Para compilar el
gmetad hay que añadir a la orden de configuración:
./configure –with-gmetad. El fichero de configuración de gmetad,
gmetad.conf se
puede encontrar en el directorio correspondiente dentro de las fuentes y
se puede copiar a /etc. La instalación de este último es solo
descomprimir las fuentes dentro del DocumentRoot del servidor web.
Opcionalmente, podemos instalar gexec, para correr la misma orden en varias o todas las máquinas del cluster simultáneamente.
CONFIGURACIÓN
gmond: el archivo de configuración de
gmond es
/etc/gmond.conf Para crearlo se puede usar
gmond -t > /etc/gmond.conf que crea un archivo de configuración por defecto. Lo más importante de este archivo es:
Dentro de globals:
daemonize = yes # para que corra como demonio del sistema
gexec = yes # si tenemos instalado gexec
Dentro de cluster:
name = “nombre” # nombre del cluster, es mejor especificar alguno
udp_send_channel: para enviar la información del host. Todos
los nodos de un mismo cluster han de tener la misma configuración aquí.
Se puede enviar por multicast o unicast y se pueden poner todos los
canales de envío que se deseen (varios unicast, varios multicast,…)
- Multicast: utilizar una dirección IP multicast. Deberemos variarla y
poner cada cluster con una IP multicast diferente. Ejemplo:
239.2.11.72, 239.2.11.73,… La que asignemos aquí también la tenemos
que cambiar en udp_recv_channel. El puerto no es necesario modificarlo y
es mejor dejarlo así. Ejemplo
- Unicast: se manda la información al nodo principal directamente.
Puede ser más útil en algunos casos que el multicast dé problemas.
}
udp_recv_channel: para el nodo encargado de recibir toda la
información y crear el fichero XML. Pueden tenerlo todos los nodos o
sólo algunos. Generalmente, irá en el nodo cabecera (con gmetad y la
interfaz web).
udp_recv_channel {
mcast_join = 239.2.11.71
bind = 239.2.11.71
port = 8649
}
Posteriormente, viene una lista con las métricas que serán recolectadas por gmond.
Su configuración por defecto es correcta, aunque se puede modificar la
frecuencia con la que se recolectan y añadir o borrar algunos.
Más información en: http://ganglia.sourceforge.net/docs/gmond.conf.html
gmetad: El principal aspecto a configurar son las fuentes de donde recopila la información. Es de la forma
data_source “nombre” [intervalo de sondeo] dirección1:puerto dirección2:puerto…
Puede haber tantas fuentes como se desee. Para ello, se añade una línea como la de arriba por fuente. Por ejemplo
data_source “Proteus” 192.168.2.4, 192.168.2.5
data_source “Servidor” 127.0.0.1
en la primera fuente, hay 2 ips redundantes, por si alguna de las máquinas se cae.
Hay que crear el directorio donde gmetad almacenará los datos de los
distintos nodos, en formato de base de datos round-robin. Este
directorio viene dado por el atributo
rrd_rootdir del fichero de configuración
gmetad.conf. Por defecto, es el directorio
/var/lib/ganglia/rrds y a de pertenecer al usuario
nobody.nobody
web front-end
Se puede elegir entre los templates disponibles.
Monitorización de la temperatura
Por defecto, Ganglia no monitoriza la temperatura pero podemos añadir
esta opción utilizando la herramienta gmetric que incorpora. Esta
herramienta permite añadir las métricas que se deseen desde la línea de
comandos. Más información:
http://ganglia.sourceforge.net/docs/ganglia.html#gmetric
Para medir la temperatura, usaremos el programa
sensors. Lo primero de todo es configurarlo con
sensors-detect. Este
programa busca el tipo de sensores de temperatura, revoluciones de
ventiladores, voltaje,… que tiene nuestro equipo y crea el fichero
/etc/sysconfig/lm_sensors
donde se indica que módulos cargar para manejarlos. Si los sensores no
estuvieran soportados por el kernel, tendríamos que buscar las
correspondientes fuentes y recompilar el kernel. También se crea el
fichero /etc/init.d/lm_sensors para cargar estos módulos automáticamente
al inicio del sistema.
Sólo nos falta enviar periódicamente la información de los sensores. Para ello, añadimos una entrada a cron del tipo:
*/5 * * * * root /admin/ganglia/temp.sh
donde
temp.sh es un fichero que coge la información de
sensors y utiliza gmetric para enviarla:
#!/bin/bash
GMETRIC=/usr/bin/gmetric
SENSORS=/usr/bin/sensors
# send cpu temps if gmond is running
`/sbin/service gmond status > /dev/null`
if [ $? -eq 0 ]; then
# send cpu temperatures
let count=0
for temp in `${SENSORS} | grep “CPU Temp” | cut -b 12-16`; do
$GMETRIC -t float -n “cpu${count}_temp” -u “C” -v $temp
let count+=1
done
# send cpu fan speed
let count=0
for fan in `${SENSORS} | grep CPU_Fan | cut -b 12-15`; do
$GMETRIC -t uint32 -n “cpu${count}_fan” -u “RPM” -v $fan
let count+=1
done
fi