cdomingos.multipath

Rol de Ansible: Multipath (DM Multipath)

Un buen rol de Ansible que despliega y configura correctamente el software de multipathing nativo de Linux (DM Multipath) para escenarios de Arranque desde SAN o Arranque Local.

Este rol de multipath es capaz de:

  • configurar DM Multipath según la documentación del producto y las mejores prácticas de la industria
  • configurar parámetros del controlador

Advertencia

Este rol reemplaza la configuración de DM Multipath
La configuración anterior se sobrescribirá, revisa multipath_backup_permanent en la sección de Variables de Rol.

Esta configuración afecta los siguientes directorios y archivos de configuración:

  • /etc/multipath/
  • /etc/multipath.conf

Si algo va mal después de reiniciar el host gestionado, algunos errores en initramfs pueden llevar a un Kernel panic al arrancar seguido de "dracut Warning: LVM rootvg/rootlv no encontrado"

En este caso, recomiendo:

  1. reiniciar el sistema utilizando una imagen ISO de rescate
  2. revertir los archivos principales:
    • /boot/<original-initramfs>.img.ansible_multipath
    • /etc/fstab.ansible_multipath
    • /etc/lvm/lvm.conf.ansible_multipath

NOTA: Hay muchas maneras de devolver tu sistema a un estado operativo, parámetros de arranque del kernel como rdshell o rd.shell además de eliminar rhgb y quiet pueden ayudarte a solucionar tu initramfs roto.

¿Cómo funciona?

Hay dos etapas principales: pre-configuración y configuración.

En la etapa de pre-configuración, este rol hace (sin cambios en el sistema, excepto por la instalación de paquetes si se declara):

  • verificar si el paquete device-mapper-multipath está instalado (puedes instalarlo o actualizarlo. Ver variables)
  • obtener propiedades del dispositivo para el sistema de archivos montado en /boot, también para /boot/efi
  • obtener propiedades y descubrir el verdadero dispositivo de disco para el sistema de archivos montado en /boot
  • cargar controladores modprobe según el proveedor y modelo del dispositivo de disco de arranque descubierto
  • autoseleccionar el tipo de configuración (¿Arranque desde SAN?) según el controlador del dispositivo de disco de arranque
  • obtener el kernel predeterminado de GRUB e initramfs
  • cargar verificaciones para escenarios de Arranque desde SAN o Arranque Local
  • definir un nombre pseudo para el verdadero dispositivo de disco
  • definir filtro de LVM

En la etapa de configuración, este rol hace (cambios en el sistema):

  • hacer copia de seguridad de algunos archivos del sistema, como /etc/fstab, el initramfs actual y /etc/lvm/lvm.conf
  • eliminar los archivos de configuración actuales de DM Multipath
  • crear un archivo inicial /etc/multipath.conf
  • configurar el archivo /etc/multipath.conf y comprobar la sintaxis o errores
  • configurar /etc/fstab
  • configurar el filtro de LVM y verificar la sintaxis o errores
  • configurar los archivos modprobe y verificar la sintaxis o errores
  • configurar initramfs y verificar errores
  • en caso de errores, eliminar archivos adicionales y revertir archivos del sistema utilizando la copia de seguridad anterior
  • reiniciar el sistema
  • eliminar archivos de copia de seguridad anteriores

Requisitos

El playbook debe ejecutarse con become: yes o privilegio raíz equivalente y gather_facts: yes también.

  • Ansible Engine 2.7.1+

Variables de Rol

El rol de multipath se configura mediante variables que comienzan con multipath_.

Lista de variables:

Variable Tipo Descripción
multipath_setup_pseudodevname cadena (m) * Definir un nombre de dispositivo pseudo (alias) para el disco de arranque gestionado por DM Multipath
multipath_package_install booleano (o) Instalar el paquete device-mapper-multipath si no está presente
multipath_package_upgrade booleano (r) Actualizar (también instalar) el paquete device-mapper-multipath
multipath_preserve_currentfiles booleano (r) Antes de la etapa de configuración, hacer una copia permanente de los archivos de configuración actuales de DM Multipath
multipath_reboot_allow booleano (r) Permitir que este rol reinicie el nodo gestionado
multipath_reboot_timeoutguest entero (o) Tiempo máximo (segundos) para 'reiniciar' esperando que un sistema huésped gestionado esté en línea de nuevo
multipath_reboot_timeoutbaremetal entero (o) Tiempo máximo (segundos) para 'reiniciar' esperando que un sistema Bare Metal gestionado esté en línea de nuevo
multipath_modprobe_custom lista (o) Cargar y definir parámetros de controladores relacionados con el proveedor o modelo del disco de arranque
multipath_configfile_commentlines booleano (o) * Comentar todas las líneas en /etc/multipath.conf
multipath_configfile_bybasic booleano (o) * Sobrescribir el archivo /etc/multipath.conf utilizando una configuración básica y funcional
multipath_configfile_bytemplate booleano (o) Sobrescribir el archivo /etc/multipath.conf utilizando plantillas predefinidas del rol
multipath_configfile_byusertemplate cadena (o) Sobrescribir el archivo /etc/multipath.conf utilizando un archivo de plantilla de usuario personalizado
multipath_configfile_bysections cadena (o) Incluir secciones personalizadas en el archivo /etc/multipath.conf
multipath_configfile_defaults lista (o) Incluir parámetros adicionales en la sección "defaults {" para /etc/multipath.conf
multipath_debug_sysfilecontent booleano (o) Antes de las tareas posteriores a la configuración (p. ej., reiniciar), mostrar el contenido de los archivos del sistema modificados
multipath_debug_showvariables booleano (r) Mostrar variables del rol y sus valores

(m) - obligatorio
(r) - recomendado
(o) - opcional
* - se aplica valor por defecto (ver defaults/main.yml)

Lista explicada de variables:

  • multipath_setup_pseudodevname: define el nombre de dispositivo pseudo (alias) para el disco de arranque gestionado por DM Multipath (p. ej., /dev/mapper/bootLUN)

    tipo: cadena

    archivos afectados:

    • /etc/fstab
    • /etc/multipath.conf

    ejemplo:

    multipath_setup_pseudodevname: bootLUN
    

    NOTA: no uses "p" o caracteres numéricos


  • multipath_package_install: instala el paquete device-mapper-multipath si no está presente

    tipo: booleano

    archivos afectados: n/a

    ejemplo:

    multipath_package_install: yes
    

  • multipath_package_upgrade: actualiza (también instala) el paquete device-mapper-multipath

    tipo: booleano

    archivos afectados: n/a

    ejemplo:

    multipath_package_upgrade: yes
    

  • multipath_preserve_currentfiles: antes de la etapa de configuración, hace una copia permanente de los archivos de configuración actuales de DM Multipath, como /etc/multipath.conf y /etc/multipath/

    tipo: booleano

    archivos afectados: n/a

    ejemplo:

    multipath_preserve_currentfiles: yes
    

    NOTA: los archivos preservados se guardarán como /etc/multipath.conf.ansible_multipath y /etc/multipath.ansible_multipath/, una vez copiados, el rol nunca volverá a tocarlos, para el directorio actúa en modo de adición.


  • multipath_reboot_allow: permite que este rol reinicie el nodo gestionado

    tipo: booleano

    archivos afectados: n/a

    ejemplo:

    multipath_reboot_allow: yes
    

  • multipath_reboot_timeoutguest: tiempo máximo (segundos) para 'reiniciar' esperando que un sistema huésped gestionado esté en línea de nuevo

    tipo: entero

    archivos afectados: n/a

    ejemplo:

    multipath_reboot_timeoutguest: 300
    

  • multipath_reboot_timeoutbaremetal: tiempo máximo (segundos) para 'reiniciar' esperando que un sistema Bare Metal gestionado esté en línea de nuevo

    tipo: entero

    archivos afectados: n/a

    ejemplo:

    multipath_reboot_timeoutbaremetal: 1800
    

  • multipath_modprobe_custom: carga y define parámetros de controladores relacionados con el proveedor o modelo del disco de dispositivo de arranque, generando un archivo modprobe según el nombre del módulo. - consulta la guía de conectividad de su proveedor de almacenamiento empresarial

    tipo: lista

    archivos afectados:

    • /etc/modprobe.d/<nombre-del-módulo>.conf

    ejemplo:

    multipath_modprobe_custom:
      - module: lpfc
        params: lpfc_max_luns=65535 lpfc_devloss_tmo=10
        vendor: EMC
        model: any
      - module: lpfc
        params: lpfc_max_luns=65535 lpfc_devloss_tmo=14 lpfc_lun_queue_depth=16 lpfc_discovery_threads=32
        vendor: 3PARdata
        model: VV
      - module: qla2xxx
        params: ql2xmaxlun=65535 qlport_down_retry=14 ql2xmaxqdepth=16
        vendor: 3PARdata
        model: VV
      - module: scsi_transport_fc
        params: dev_loss_tmo=10
        vendor: any
        model: any
    

    NOTA: usar el valor "any" ajustará los parámetros del controlador sin coincidir/validar el controlador del dispositivo de disco de arranque, puedes obtener una lista completa de dispositivos a través de multipath -t


  • multipath_configfile_commentlines: comenta todas las líneas en /etc/multipath.conf después de que la herramienta mpathconf crea un archivo de configuración inicial

    tipo: booleano

    archivos afectados:

    • /etc/multipath.conf

    ejemplo:

    multipath_configfile_commentlines: yes
    

  • multipath_configfile_bybasic: sobrescribe el archivo /etc/multipath.conf utilizando una configuración básica y funcional (los comentarios del archivo original no se preservan)

    tipo: booleano

    archivos afectados:

    • /etc/multipath.conf

    dependencias:

    • multipath_configfile_commentlines: yes

    ejemplo:

    multipath_configfile_bybasic: yes
    

  • multipath_configfile_bytemplate: sobrescribe el archivo /etc/multipath.conf utilizando plantillas predefinidas del rol (p. ej., templates/bootfromsan_multipath.conf.j2) con configuración funcional básica (se preservan los comentarios del archivo original)

    tipo: booleano

    archivos afectados:

    • /etc/multipath.conf

    ejemplo:

    multipath_configfile_bytemplate: yes
    

  • multipath_configfile_byusertemplate: sobrescribe el archivo /etc/multipath.conf utilizando un archivo de plantilla de usuario personalizado, el archivo debe estar a nivel de directorio de playbook o en 'templates', de igual manera puedes usar hechos del rol, consulta el archivo 'templates/bootfromsan_multipath.conf.j2'

    tipo: cadena (ruta de archivo)

    archivos afectados:

    • /etc/multipath.conf

    ejemplo:

    multipath_configfile_byusertemplate: mymultipath.conf.j2
    

  • multipath_configfile_bysections: incluye secciones personalizadas en el archivo /etc/multipath.conf

    tipo: cadena (varias líneas)

    archivos afectados:

    • /etc/multipath.conf

    ejemplo:

    multipath_configfile_bysections: |
    
      devices {
              device {
                      vendor                   "COMPAQ  "
                      product                  "HSV110 (C)COMPAQ"
                      path_grouping_policy     multibus
                      path_checker             readsector0
                      path_selector            "round-robin 0"
                      hardware_handler         "0"
                      failback                 15
                      rr_weight                priorities
                      no_path_retry            queue
              }
      }
    

    NOTA: opcional combinado con multipath_configfile_commentlines: yes


  • multipath_configfile_defaults: incluye parámetros adicionales en la sección "defaults {" para /etc/multipath.conf

    tipo: lista

    archivos afectados:

    • /etc/multipath.conf

    ejemplo:

    multipath_configfile_defaults:
      - detect_prio no
      - failback "manual"
      - max_fds 1048576
      - max_polling_interval 20
    

  • multipath_debug_sysfilecontent: antes de las tareas posteriores a la configuración (p. ej., reiniciar), muestra el contenido de los archivos del sistema modificados en la secuencia del playbook como una tarea, archivos: /etc/fstab, /etc/lvm/lvm.conf y /etc/multipath.conf

    tipo: booleano

    archivos afectados: n/a

    ejemplo:

    multipath_debug_sysfilecontent: yes
    

  • multipath_debug_showvariables: muestra variables del rol y sus valores

    tipo: booleano

    archivos afectados: n/a

    ejemplo:

    multipath_debug_showvariables: yes
    

Dependencias

N/A

Etiquetas

Hay dos etiquetas disponibles:

  • role:multipath:prereqs: requisitos previos del rol, verifica las variables del rol, sin cambios en el sistema

    ansible-playbook multipathing.yml --tags role:multipath:prereqs
    
  • role:multipath:presetup: validaciones de pre-configuración, sin cambios en el sistema (excepto por si se solicita instalar o actualizar el paquete DM Multipath usando las variables multipath_package_install o multipath_package_upgrade)

    ansible-playbook multipathing.yml --tags role:multipath:presetup
    

Ejemplo de Playbook

Un playbook básico debería verse así:

- hosts: servers
  become: yes
  gather_facts: yes

  roles:
    - cdomingos.multipath

Una lista de ejemplos de playbooks se puede encontrar en tests/ en la estructura del directorio del rol.

Licencia

MIT

Información sobre el Autor

Este rol fue creado en 2019 por Cláudio Domingos

Información Adicional

Probado en:

  • HP ProLiant BL460c Gen9 (UEFI)
  • 3PAR Storage Array
  • HP ProLiant BL460c G7
  • VMAX Storage Array
  • RHEL 8
  • RHEL 7
  • RHEL 6
  • Fedora 31

Este rol es muy apropiado para utilizar en máquinas Bare Metal; en huéspedes no tiene sentido, ya que el software de multipathing de alta disponibilidad debe estar en el nivel de hipervisor.

¿Quieres aplicar la configuración de mejores prácticas de DM Multipath usando un Array de Almacenamiento específico? Contacta con tu proveedor de Array de Almacenamiento, también puedes buscar la Guía de Conectividad para Linux y verificar lo que recomienda tu proveedor de Array de Almacenamiento.

Este rol está inspirado en:

TODO

Resolver problemas críticos como dracut Warning: LVM rootvg/rootlv not found

a. Implementar un script para revertir en la etapa de arranque initramfs/dracut cuando el sistema falla durante el ciclo de reinicio
b. Habilitar los servicios de red y sshd en la etapa de arranque initramfs/dracut y realizar las tareas de rescate necesarias para solucionarlo usando Ansible

Acerca del proyecto

Configure native linux multipathing (DM Multipath) for Boot from SAN or Local Boot

Instalar
ansible-galaxy install cdomingos.multipath
Licencia
mit
Descargas
1.7k
Propietario