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:
How to rebuild the initial ramdisk image in Red Hat Enterprise Linux