Sysadmin falla: cuando las dependencias del servicio fallan

La informática de alto rendimiento (HPC) necesita un sistema de archivos paralelo para montar el almacenamiento en todos los nodos, y necesita montar ese almacenamiento mediante el Estándar de red InfiniBand (IB). La organización de almacenamiento agrega el comando de montaje para el Sistema de archivos Lustre dentro /etc/rc.local para montar al inicio.

Cuando estaba construyendo un clúster de HPC, necesitaba montar este almacenamiento en todos mis nodos maestros y de cómputo. Pero, cuando reinicié cualquier nodo, no pudo montar el sistema de archivos Lustre. Al final, escribí un script para resolver este problema.

Índice

    Nodo

    Hay muchos escenarios en los que existen dependencias para los servicios o para que la red inicie un servicio. Puede encontrar este tipo de problema cuando trabaja con varios fabricantes de equipos originales (OEM) simultáneamente, donde una aplicación de un OEM depende de otro OEM. Estas dependencias pueden dificultar la coordinación con todos los OEM para resolver el problema.

    En mi escenario, me enfrentaba a este problema. No recibí ningún apoyo de la organización de almacenamiento o de mi proveedor de servicios InfiniBand. En este tipo de escenarios, los administradores de sistemas en una organización integradora de sistemas necesitan solucionar el problema y ejecutar todos los servicios a la perfección.

    Básicamente, los OEM de almacenamiento agregan la mount comando en /etc/rc.local para montar el sistema de archivos de red al inicio. Cuando se ejecuta el comando, existe una condición de que la red IB debe estar activa porque la estamos montando desde el almacenamiento mediante la red InfiniBand.

    En mi caso, la red InfiniBand estaba tardando demasiado en aparecer y, antes de eso, Luster estaba intentando montar el sistema de archivos.

    Creatividad > Problema

    Para evitar este problema, escribí un script y lo coloqué en mi /etc/rc.local archivo para que mi sistema de archivos se monte automáticamente en el arranque. Guardé este script en un directorio compartido (en un clúster de HPC, /home y /lscratch son NFS compartidos entre todos los nodos), luego se ejecutan desde /etc/rc.local o un cron trabajo:

    [[email protected] ~]# cat /lscratch/lustre-script.sh
    
    #!/bin/bash
    
    h=$(ibstat | grep State | awk '{print $2}')
    
    for i in {1..150}
    
    do
    #To Check Current Status of InfiniBand.
    echo "Current Status of InfiniBand $h"
    
    if [[ ( "$h" == "Active" ) ]]
        then
              echo "IB is UP, mounting lustre File System."
              /bin/mount -o flock,defaults -t lustre [email protected],[email protected]:[email protected],[email protected]:/lustreshare /Almacenamiento   
    exit
    
    else
    echo "IB is down at checking $i"
        echo "Retrying.."
        sleep 2
       	fi
    done
    
    mail -s 'Unable to mount Lustre file System on $(hostname)' [email protected] <<< 'InfiniBand is not active, therefore didn’t try to mount the Lustre File System. Need your attention'
    [[email protected] ~]# chmod +x /lscratch/lustre-script.sh
    

    Aquí guardé un script en el directorio compartido. /lscratch y cambió los permisos de ejecución. Este script se desglosa de la siguiente manera:

    1. Al principio definí una variable que verifica el estado de la red InfiniBand, filtro State de la salida del comando e imprime la segunda columna. Esta configuración busca la palabra Active, que nos dice que la red InfiniBand está operativa.
    2. En la tercera línea, usé un for bucle para probar el estado de la red InfiniBand 150 veces.
    3. En la sexta línea, el script imprime el resultado actual del estado de la red InfiniBand.
    4. En la séptima línea, usé un if condición para verificar el estado actual de la red InfiniBand, buscando la palabra Active. Si la condición en la séptima línea es verdadera, el script salta a la novena línea e imprime la oración: IB is UP, mounting lustre File System.
    5. Después de imprimir la oración, el script intenta montar el sistema de archivos Lustre y luego sale. Si la condición falla, el script imprime dos oraciones, duerme durante dos segundos y luego comienza la nueva ejecución desde la línea seis.

    Con estos pasos, este script verifica el estado de InfiniBand hasta 150 veces y, por lo tanto, se ejecuta hasta 300 segundos. Si el guión encuentra Active, luego monta el sistema de archivos Lustre y sale. También agregué una última línea en el script. Envía un correo electrónico a una dirección de correo electrónico específica si la red InfiniBand no se activa dentro de los primeros 300 segundos.

    Ahora puede ejecutar este script desde /etc/rc.local. Agregué la siguiente entrada en /etc/rc.local para crear un registro de ejecución de script:

    [[email protected] ~]#  tail -n 1 /etc/rc.local
    sh /lscratch/lustre-script.sh >> /lscratch/lustre-script.log
    

    Estos registros pueden ayudarlo a monitorear el script.

    También podemos agregar un cron trabajar para nuestro guión. Aquí hay un ejemplo que agregué en mi configuración. Se ejecuta después de cada reinicio:

    [[email protected] ~]# crontab –l
    @reboot sh /lscratch/lustre-script.sh >> /lscratch/lustre-script.log
    

    Usando este script, puedo hacer que mi comando de montaje Lustre espere hasta que la red InfiniBand se vuelva Active. Este es el script básico que escribí para ayudar a mi comando de montaje Lustre. Con la sintaxis de este script, puede crear su propio script para esperar a que se inicie cualquier servicio independiente antes que cualquier otro servicio dependiente.

    Artículos de interés

    Subir