Solventar error «HA LVM: Improper setup detected» en clúster RHEL

En esta entrada aprendemos a solventar el error «HA LVM_ Improper setup detected» en sistemas de alta disponibilidad en clúster de RHEL 5 y RHEL 6

Solventar error «HA LVM: Improper setup detected» en clúster RHEL

El origen de este error

Este error puede tener varios orígenes. Uno de ellos es que para configurar la variante de etiquetado de HA-LVM, se requieren cambios en /etc/lvm/lvm.conf. Estos cambios deben realizar de forma coherente en /etc/lvm/lvm.conf y en el archivo lvm.conf almacenado en el archivo initrd/initramfs

Después de realizar cualquier cambio en lvm.conf, se debe actualizar initrd/initradfs para garantizar que la copia sea idéntica en /etc/lvm/lvm.conf

Los recursos de HA-LVM tienen una verificación interna para garantizar que la hora de modificación (mtime) del archivo initrd/initramfs sea posterior a la hora mtime del archivo lvm.conf. Si el mtime de lvm.conf es posterior a initrd/initramfs, HA-LVM no podrá iniciarse con una configuración incorrecta detectada.

Sobre los errores detectados

El servicio de inicio que tiene configurado el recurso LVM falla con el siguiente mensaje de error:

clurgmgrd  notice Starting stopped service service:${SERVICE_NAME}  
clurgmgrd: err HA LVM: Improper setup detected  
clurgmgrd: notice start on lvm returned 1 (generic error)  
clurgmgrd: warning #68: Failed to start service:${SERVICE_NAME}; return value: 1  
clurgmgrd: notice Stopping service service:${SERVICE_NAME}

El servicio de clúster no se inicia en los nodos de clúster, falla con el mensaje de error de LVM de la siguiente manera en el clúster HA de RHEL 6:

rgmanager[7460]: Starting stopped service service:test_service
rgmanager[7460]: start on ip "192.168.1.1/255.255.255.0" returned 1 (generic error)
rgmanager[7460]: #68: Failed to start service:test_service; return value: 1
rgmanager[7460]: Stopping service service:test_service
rgmanager[21302]: [fs] stop: Could not match /dev/test_vg/test_lv with a real device
rgmanager[21368]: [lvm] HA LVM:  Improper setup detected
rgmanager[21398]: [lvm] * initrd image needs to be newer than lvm.conf
rgmanager[21439]: [lvm] Deactivating test_vg/test_lv
rgmanager[21461]: [lvm] Making resilient : lvchange -an test_vg/test_lv
rgmanager[21486]: [lvm] Resilient command: lvchange -an test_vg/test_lv --config devices{filter=["a|/dev/sda2|","a|/dev/sdb|","a|/dev/sdc|","a|/
rgmanager[7460]: Service service:test_service is recovering
rgmanager[7460]: #71: Relocating failed service service:test_service
rgmanager[7460]: Service service:test_service is stopped

rg_test informa que el recurso HA-LVM no se pudo iniciar debido a que se detectó una configuración incorrecta:

# rg_test test /etc/cluster/cluster.conf start service SERVICE
Running in test mode.
Loading resource rule from /usr/share/cluster/lvm_by_vg.sh
...
Loading resource rule from /usr/share/cluster/nfsexport.sh
Starting SERVICE...
volume_list=["vg_root", "@node1-priv"]
err    HA LVM:  Improper setup detected
[lvm] HA LVM:  Improper setup detected
err    * initrd image needs to be newer than lvm.conf
[lvm] * initrd image needs to be newer than lvm.conf
Failed to start SERVICE

Solución a este problema

Según revisamos la documentación oficial de Red Hat, que os he dejado más abajo y es en la que me ha basada para realizar esta entrada, hay que reconstruir la imagen de ramdisk. Esta reconstrucción puede tener varios motivos para hacerla, pero nos vamos a centrar en la parte del fallo «HA LVM: Improper setup detected«, que afecta a los clústeres en RHEL 5 y en RHEL 6

Reconstruir el initrd en RHEL 5

Primero de todo es recomendado realizar una copia de seguridad del fichero de intird, de la siguiente manera:

cp /boot/initrd-$(uname -r).img /boot/initrd-$(uname -r).bak.$(date +%m-%d-%H%M%S).img

Una vez hecho esto construimos un nuevo initrd:

mkinitrd -f -v /boot/initrd-$(uname -r).img $(uname -r)

El parámetro «-v» detallado hace que mkinitrd muestre los nombres de todos los módulos que incluye en el ramdisk inicial.

El parámetro «-f» fozará una sobreescritura de cualquier imagen ramdisk inicial existente en la ruta que hayamos especificado.

Si utiliza el sistema una versión del kernel diferente al initrd que estamos compilando (incluso si está en modo de rescate), debemos especificar la versión del kernel completa, sin arquitectura:

mkinitrd -f -v /boot/initrd-2.6.18-348.2.1.el5.img 2.6.18-348.2.1.el5
Reconstruir initramfs en RHEL 6

Al igual que en el otro caso, debemos realizar una copia de seguridad previa del fichero initramfs:

cp /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r).bak.$(date +%m-%d-%H%M%S).img

Ahora reconstruimos el initramfs con la versión corriente del kernel:

dracut -f -v

Si utilizamos una versión de kernel diferente al initrd que estamos compilando (incluso si estamos en modo rescate), debemos especificar la versión completa del kernel, incluida la arquitectura:

dracut -f /boot/initramfs-2.6.32-220.7.1.el6.x86_64.img 2.6.32-220.7.1.el6.x86_64

Tenéis mucha más información en la documentación oficial de Red Hat, que os recomiendo revisar:

Starting High Availability Add-On cluster service fails with «HA LVM: Improper setup detected» on RHEL 5 and 6

How to rebuild the initial ramdisk image in Red Hat Enterprise Linux