¿Qué es el multipath en Linux?

El servicio de multipath es el que se encarga de configurar el sistema operativo para que sea capaz de acceder a los discos de cabina por diferentes caminos.

¿Qué significa el acceso a los discos por diferentes caminos?

Una cabina de discos tiene diferentes controladoras y switches que se cablean hasta los servidores para que el acceso a los discos esté disponible en todo momento, incluso, si existe alguna avería hardware en alguno de estos elementos.

Los servidores también tienen diferentes controladoras de acceso a la cabina.

Cada uno de los accesos es un camino diferente. Esto significa que en el sistema operativo veremos el mismo disco varias veces (por diferentes caminos).

¿Cómo configuramos el multipath en Linux RedHat?

Tanto en RedHat6 como en RHEL7, la configuración del servicio es la misma. El fichero de configuración se ubica en /etc/multipath.conf y tiene el siguiente aspecto:

Configuración por defecto

## Use user friendly names, instead of using WWIDs as names.
defaults {
       udev_dir                /dev
       polling_interval        5
       path_selector           "round-robin 0"
       path_grouping_policy    failover
       getuid_callout          "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
       prio                    const
       path_checker            directio
       rr_min_io               1000
       rr_weight               uniform
       failback                manual
       no_path_retry           fail
       user_friendly_names     yes
}
#

Configuración para una cabina 3PAR

En el momento en que escribo este artículo, estoy usando cabinas HP modelo 3PAR.

devices {
        device {
                vendor                  "3PARdata"
                product                 "VV"
                path_grouping_policy    multibus
                getuid_callout          "/lib/udev/scsi_id --whitelisted --replace-whitespace  --device=/dev/%n"
                path_selector           "round-robin 0"
                path_checker            tur
                hardware_handler        "0"
                failback                immediate
                rr_weight               uniform
                rr_min_io               100
                no_path_retry           18
        }

        device {
                vendor                  "HP"
                product                 "HSV2[01]0|HSV3[046]0|HSV4[05]0"
                path_grouping_policy    group_by_prio
                getuid_callout          "/lib/udev/scsi_id --whitelisted --replace-whitespace  --device=/dev/%n"
                path_selector           "round-robin 0"
                path_checker            tur
                no_path_retry           18
        }
}

Eliminación de la visibilidad de dispositivos que no queremos configurar en el multipath

blacklist {
        devnode         "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"
        devnode         "^hd[a-z][[0-9]*]"
        devnode         "^cciss!c[0-9]d[0-9]*"
        device {
                vendor  "HP"
                product "LOGICAL VOLUME"
        }
}

Personalización del nombre multipath de los discos que han sido presentados al servidor

Siempre es bueno ponerle un nombre relacionado con el servicio que vamos a dar.

multipaths {

# Servicio APP XXX

multipath {
                wwid 360002ac000000000000004680000d02c
                alias pv_p01r1t3d_bob04
        }
        multipath {
                wwid 360002ac00000000000000c99000073ae
                alias pv_p01r1t3e_bob04
        }
        multipath {
                wwid 360002ac000000000000000e9000206ca
                alias md20_bob_1
        }

}

Arranque del servicio multipath y comprobación de su estado

Una vez que ya tenemos configurado el servicio, procederemos a arrancarlo:

  • RHEL6: service multipathd start
  • RHEL7: systemctl start multipathd

Una vez arrancado, tendremos que ver el WWID (World Wide ID) de los discos por los diferentes caminos presentados al servidor. Veamos un ejemplo:

[[email protected] ~]# multipath -ll
vg2dataguard1 (360002ac0000000000000020100015efd) dm-11 3PARdata,VV
size=500G features='1 queue_if_no_path' hwhandler='0' wp=rw
`-+- policy='round-robin 0' prio=1 status=active
  |- 1:0:2:3  sdk  8:160  active ready running
  `- 2:0:2:3  sdar 66:176 active ready running
vg4dataguard2 (360002ac0000000000000059200015ef9) dm-24 3PARdata,VV
size=100G features='1 queue_if_no_path' hwhandler='0' wp=rw
`-+- policy='round-robin 0' prio=1 status=active
  |- 1:0:5:6  sdx  65:112 active ready running
  `- 2:0:5:6  sdbe 67:128 active ready running
md1_bob_2 (360002ac0000000000000013c000206ca) dm-32 3PARdata,VV
size=200G features='1 queue_if_no_path' hwhandler='0' wp=rw
`-+- policy='round-robin 0' prio=1 status=active
  |- 1:0:6:8  sdaf 65:240 active ready running
  `- 2:0:6:8  sdbm 68:0   active ready running

Si nos fijamos en el primer disco, observaremos:

  • Nombre personalizado del disco: vg2dataguard1
  • WWID del disco: 360002ac0000000000000020100015efd
  • Caminos: /dev/sdk y /dev/sdar
  • Ambos caminos están activos

Por cierto, cuando hablo de discos, lo que quiero decir son LUNs (Logical Unit Network) que, al fin y al cabo, es un espacio de disco de la cabina.

Chequeo del doble camino de multipath

En los grandes entornos donde se utilizan cabinas de disco de dedicadas, lo normal es tener más de un camino de acceso al disco, por si se estropea un switch de cabina, una tarjeta de fibra en el servidor con acceso a la SAN, etc.

Muchas veces, durante las intervenciones de mantenimiento de cabinas, como puede ser una actualización de firmware, se suele perder alguno de los caminos de acceso a los discos, así que es conveniente averiguar si todos los caminos está funcionando correctamente antes de que el equipo de Storage realice la intervención, de lo contrario, podríamos quedarnos sin servicio.

Para este caso concreto, al administrar muchos servidores diferentes, suelo lanzar un script de manera masiva para que me devuelva el hostname y el estado de los paths de cabina de todos los servidores. Es el siguiente:

Script para chequear el estado del multipath

[root]# cat check_multipath.sh
#!/bin/sh

PATH=/sbin:/bin:/usr/bin

MULTIPATHDISABLED=$(multipath -ll |grep "DM multipath kernel driver not loaded" |wc -l)

if [ "$MULTIPATHDISABLED" -ge "1" ]
then

   echo "$(hostname);Multipath is disabled"

else

   MULTIPATHFAILED=$(multipath -ll |grep -i failed |wc -l)
   MULTIPATHACTIVE=$(multipath -ll |grep -i active |wc -l)
   RHELVERSION=`cat /etc/redhat-release`
   KERNELRELEASE=$(uname -r)
   DMSETUPLIB=$(dmsetup version|grep "Library version:")
   DMSETUPDRIVER=$(dmsetup version |grep "Driver version:")

   echo "$(hostname);$MULTIPATHFAILED paths failed"
   echo "$(hostname);$MULTIPATHACTIVE paths active"
   echo "$(hostname);$RHELVERSION"
   echo "$(hostname);$KERNELRELEASE"
   echo "$(hostname);Device Mapper - $DMSETUPLIB"
   echo "$(hostname);Device Mapper - $DMSETUPDRIVER"

   ## HBA Version "

   for HBA in `lspci | grep -i fibre |awk '{print $1}'`
   do

      HBADRIVER=$(lspci -v -s $HBA |grep "Kernel modules:" |awk '{print $3}')
      HBADESCRIPTION=$(modinfo -d $HBADRIVER)
      HBAVERSION=$(modinfo $HBADRIVER |grep "version:" |grep -v src |awk '{print $2}')

      echo "$(hostname);HBA $HBA - $HBADESCRIPTION"
      echo "$(hostname);HBA $HBA - Driver version: $HBAVERSION"

   done

fi
[root]# 

Vamos a ejecutarlo sólo en un servidor para que la salida del script sea más bien corta:

[[email protected] admsys]# ./check_multipath.sh
Server1;0 paths failed
Server1;90 paths active
Server1;Red Hat Enterprise Linux Server release 6.9 (Santiago)
Server1;2.6.32-696.20.1.el6.x86_64
Server1;Device Mapper - Library version:   1.02.117-RHEL6 (2016-12-13)
Server1;Device Mapper - Driver version:    4.33.1
Server1;HBA 05:00.0 - QLogic Fibre Channel HBA Driver
Server1;HBA 05:00.0 - Driver version: 8.07.00.26.06.8-k
Server1;HBA 05:00.1 - QLogic Fibre Channel HBA Driver
Server1;HBA 05:00.1 - Driver version: 8.07.00.26.06.8-k
[[email protected] admsys]#

Como vemos, da dos datos importantes sobre lo que estamos buscando:

Server1;0 paths failed
Server1;90 paths active

Pero también da otros datos importantes, como la versión de sistema operativo, de multipath y de los drivers de las tarjetas de fibra.

Problemas encontrados con multipath

Multipath – Segmentation fault (core dumped)

Estaba actualizando un Linux RedHat 6 cuando tuve un problema de comunicaciones y se me cortó la sesión a mitad de la actualización. Debería haber utilizado screen para evitar este tipo de problemas. Ya es casualidad también.

El caso es que cuando volví a recuperar la conexión, la configuración del servidor no estaba muy fina. No me arrancaba el multipath. Por lo tanto, tampoco podía arrancar la base de datos si ésta no veía los discos. El error que daba era:

[root ~]# multipath show config
Segmentation fault (core dumped)
You have mail in /var/spool/mail/root
[root~]#

[root ~]# service multipathd start
Starting multipathd daemon: [ OK ]
[[email protected] ~]# service multipathd status
multipathd dead but pid file exists
[root ~]#

Para solucionar esto, actualicé todos los paquetes de multipath y el glibc y luego ya arrancó el multipath sin problemas y podía ver los discos:

[root~]# rpm -qa |egrep -i "device-mapper|multipath|glibc"
glibc-common-2.12-1.149.el6.x86_64
glibc-devel-2.12-1.209.el6_9.2.x86_64
glibc-2.12-1.209.el6_9.2.x86_64
device-mapper-event-libs-1.02.90-2.el6.x86_64
glibc-devel-2.12-1.149.el6.x86_64
glibc-common-2.12-1.209.el6_9.2.x86_64
device-mapper-multipath-libs-0.4.9-106.el6.x86_64
device-mapper-event-1.02.117-12.el6_9.1.x86_64
glibc-2.12-1.149.el6.x86_64
device-mapper-1.02.90-2.el6.x86_64
device-mapper-event-1.02.90-2.el6.x86_64
device-mapper-persistent-data-0.6.2-0.2.rc7.el6.x86_64
device-mapper-multipath-0.4.9-106.el6.x86_64
glibc-headers-2.12-1.209.el6_9.2.x86_64
device-mapper-libs-1.02.117-12.el6_9.1.x86_64
device-mapper-1.02.117-12.el6_9.1.x86_64
glibc-2.12-1.149.el6.i686
glibc-headers-2.12-1.149.el6.x86_64
device-mapper-event-libs-1.02.117-12.el6_9.1.x86_64
device-mapper-libs-1.02.90-2.el6.x86_64
[root~]#

Te puede interesar

¿Te ha gustado? ¡Compártelo!

Share on facebook
Share on twitter
Share on linkedin
Share on whatsapp
Share on telegram
Share on email

SUSCRÍBETE A PUERTO53

Recibe un email periódico con los artículos más interesantes de Puerto53.com

Antes de suscribirte lee los términos y condiciones. Gracias.

Contenido Relacionado

Este es un blog de informática. ¿Qué necesita un informático?

Portátiles

Lenovo IdeaPad 3 - Ordenador Portátil 15.6" FullHD (Intel Core i5-1035G1, 8GB RAM, 256GB...
  • Pantalla de 15.6" FullHD 1920x1080 píxeles, TN, 220nits
  • Procesador Intel Core i5-1035G1 (4C / 8T, 1.0 / 3.6GHz, 6MB)
  • Memoria RAM de 8GB
Rebajas
ASUS ZenBook 14 UM431DA-AM022 - Portátil de 14" FullHD (Ryzen 7 3700U, 16GB RAM, 512GB...
  • Pantalla de 14" FullHD (1920x1080)
  • Procesador Ryzen 7-3700U
  • Memoria RAM de 16GB (16GB en placa) DDR4 2400MHz
Rebajas
Huawei Matebook D15 - Ordenador Portátil de 15.6'' FullHD (AMD Ryzen 5 3500u,...
  • El portátil Huawei Matebook D15 cuenta con una pantalla Fullview de 15.6 pulgadas y tiene un grosor de 16.9 mm
  • Con una arquitectura potente y un software de grandes capabilidades, ofrece el mayor tamaño de pantalla y el peso más reducido para un equipo de estas...
  • La tecnología multi-screen collaboration fácilita en gran medida la interacción con otros dispositivos, permitiendo proyectar la pantalla de tu móvil...

Monitores PC

HP 22w - Monitor 21.5" (Full HD, 1920 x 1080 pixeles, tiempo de respuesta de 5 ms, 1 x...
  • Regálale a tu escritorio un toque de elegancia
  • Esta pantalla IPS de 53.61 cm (21,5 pulgadas) en diagonal dispone de 178 ángulos de visualización para ofrecer una experiencia de entretenimiento...
  • Con los puertos VGA y HDMI, esta pantalla hace que conectar tu ordenador portátil o pc de sobremesa sea una tarea sencilla y fluida
Philips 243V7QDSB/00 - Monitor IPS de 24" (Full HD, 1920x1080, Sin bordes, Flicker Free,...
  • Esta pantalla cuenta con una resolución full hd de 1920 x 1080
  • Los led blancos son dispositivos de estado sólido que se iluminan completamente, con un brillo constante y un tiempo de inicio de ahorro de energía más...
  • Las nuevas pantallas philips tienen bordes ultra estrechos que permiten reducir al mínimo las distracciones y maximizar el tamaño de visualización
Rebajas
Lenovo L22e-20 21.5 " FHD VA FreeSync Gaming Monitor 4 ms VGA+HDMI 3 lados sin bordes -...
  • 21.5" Full HD VA: Esta pantalla VA de 21.5" pulgadas ofrece una experiencia de usuario fantástica e imágenes nítidas y óptimas gracias a su resolución...
  • Diseño elegante: Este monitor ergonómico casi sin bordes dispone de la tecnología TUV Low Blue Light para cuidar tu vista y regalarte una experiencia...
  • 4 ms: Atrévete a jugar con este monitor, tendrás una imagen más fluida gracias a su tiempo de respuesta de 4 ms

NAS

Synology Diskstation DS218+ - Memoría externa DS218+ NAS 2bay
  • Procesador de doble núcleo con aceleración de cifrado AES-NI
  • No lleva disco
  • Admite la transcodificación 4K en tiempo real
Rebajas
Western Digital My Cloud Home - Almacenamiento En Red NAS de 3 TB, 1 Bahía, Blanco y...
  • Configuración sencilla y rápida desde el teléfono
  • Acceso desde cualquier lugar con la aplicación para móviles o para ordenadores de My Cloud Home, o bien desde MyCloud.com
  • Copia de seguridad automática de las fotos y los vídeos del teléfono
Synology diskstation ds120j.
  • Almacenamiento de 1 bahía fácil de usar en una nube personal para usuarios de nas inexpertos
  • Rendimiento secuencial más de 112 mb/s de lectura, 106 mb/s de escritura
  • Plataforma para compartir archivos y sincronización entre dispositivos
Rebajas
WD 4TB My Cloud EX2 Ultra Almacenamiento en Red
  • Almacenamiento en red centralizado y acceso desde cualquier lugar
  • Equipado con My Cloud OS 3
  • Sincronización automática de archivos en todos sus ordenadores

Deja un comentario

About Author