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:
- reiniciar el sistema utilizando una imagen ISO de rescate
- 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á presentetipo: booleano
archivos afectados: n/a
ejemplo:
multipath_package_install: yes
multipath_package_upgrade
: actualiza (también instala) el paquete device-mapper-multipathtipo: 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 gestionadotipo: 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 nuevotipo: 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 nuevotipo: 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 empresarialtipo: 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 inicialtipo: 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.conftipo: 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.conftipo: 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.conftipo: booleano
archivos afectados: n/a
ejemplo:
multipath_debug_sysfilecontent: yes
multipath_debug_showvariables
: muestra variables del rol y sus valorestipo: 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 sistemaansible-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:
- Guía para Configurar Device Mapper Multipath en Red Hat Enterprise Linux 8
- Guía para Configurar Device Mapper Multipath en Red Hat Enterprise Linux 7
- Guía para Configurar Device Mapper Multipath en Red Hat Enterprise Linux 6
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
Configure native linux multipathing (DM Multipath) for Boot from SAN or Local Boot
ansible-galaxy install cdomingos.multipath