Cómo configurar el servidor iSCSI (destino) y el cliente (iniciador) en Debian 9


En el mundo de los centros de datos, las redes de área de almacenamiento (SAN) de gran capacidad se han convertido en el estándar mínimo. A medida que los proveedores de nube y la virtualización también continúan teniendo un impacto masivo en el mundo de la tecnología, la necesidad de aún más espacio de almacenamiento SAN se ha vuelto evidente.

La mayor parte del hardware SAN se compone de un controlador minimalista (o conjunto de controladores) y una gran colección de unidades de alta capacidad, todas configuradas para admitir grandes cantidades de disponibilidad e integridad de datos.

Muchos de estos productos especializados están fabricados por proveedores de renombre como Netapp, Dell Equalogic, HP Storageworks o EMC y tienen etiquetas de precio adjuntas que solo las empresas más grandes pueden pagar.

Siendo realistas, estos dispositivos no son más que grandes conjuntos de discos duros con un controlador que proporciona el espacio de esos discos duros a los clientes en red. Han existido muchas tecnologías a lo largo de los años que brindan esta funcionalidad o una funcionalidad similar a un precio sustancialmente más económico.

La distribución Debian GNU/Linux proporciona paquetes que permiten que un sistema Debian sirva para el propósito de un dispositivo de almacenamiento SAN de nivel empresarial a una mera fracción del costo. Esto permite que todos, desde usuarios domésticos básicos o grandes centros de datos, obtengan los beneficios del almacenamiento SAN sin tener que gastar una fortuna en una solución patentada por el proveedor.

Este artículo analizará cómo se puede configurar un sistema Debian 9 (Stretch) para proporcionar espacio en disco utilizando un sistema conocido como Interfaz de sistemas informáticos pequeños de Internet o iSCSI para abreviar. iSCSI es un estándar basado en el Protocolo de Internet (IP) para proporcionar almacenamiento en bloque (disco duro) a otros sistemas. iSCSI funciona en un modelo de servidor cliente, pero utiliza nombres diferentes para distinguir al cliente del servidor.

En la terminología de iSCSI, el servidor que ofrece el "espacio en disco" se conoce como "Destino" iSCSI y el sistema que solicita/utiliza el espacio en disco se conoce como "Iniciador" iSCSI. En otras palabras, un "Iniciador" solicita almacenamiento en bloque de un "Destino".

Esta guía le explicará una configuración básica que incluye un servidor iSCSI simple (destino) y un cliente (iniciador), ambos ejecutando Debian 9 (Stretch).

Debian iSCSI Target: 192.168.56.101/24
Storage: Contains two extra hard drives to be used as the storage in the iSCSI setup
Debian iSCSI Initiator: 192.168.56.102/24

La red se puede ver de la siguiente manera:

Configuración de destino iSCSI de Debian

En el mundo iSCSI, el destino se considera el host que contiene los dispositivos de almacenamiento que utilizará el iniciador.

En este artículo, el servidor con la IP 192.168.56.101 se utiliza como destino. Todas las configuraciones se realizarán en ese host para esta sección.

El primer paso es la instalación de los paquetes necesarios para permitir que el sistema Debian sirva destinos iSCSI. Este paquete de software se conoce como Target Framework (TGT).

El otro elemento que se utiliza para esta guía son las herramientas de administración de volumen lógico (LVM), ya que los volúmenes lógicos (LV) se utilizarán como respaldo de almacenamiento para el destino iSCSI.

Ambos paquetes se pueden instalar con los siguientes comandos.

# apt-get update
# apt-get install tgt lvm2

Una vez instalados los paquetes, LVM se utilizará para preparar los discos duros en el destino para su uso como iSCSI LUN. El primer comando se utiliza para preparar los discos para su inclusión en una configuración LVM. ¡Asegúrese de modificar el comando según sea necesario para diferentes escenarios!

# lsblk (Only used to confirm disks to be used in the LVM setup)
# pvcreate /dev/sd{b,c}

Una vez que los discos se han preparado con el comando "pvcreate" anterior, es el momento de crear un grupo de volúmenes a partir de estos discos en particular. El grupo de volúmenes es necesario para crear los volúmenes lógicos que actuarán como almacenamiento iSCSI más adelante.

Para crear un grupo de volumen, se necesita el comando "vgcreate".

# vgcreate tecmint_iscsi /dev/sd{b,c}
# vgs  (Only needed to confirm the creation of the volume group)

Observe en el resultado anterior que el sistema responde que se creó el grupo de volumen, pero siempre es una buena idea verificar dos veces como se ve arriba con el comando "vgs". La capacidad de este grupo de volumen es de solo 9,99 GB. Si bien este es un grupo de volumen particularmente pequeño, el proceso sería el mismo para discos de mayor capacidad.

El siguiente paso es la creación del volumen lógico que actuará como disco para el cliente iSCSI (iniciador). Para este ejemplo, se utilizará la totalidad del grupo de volumen, pero no es necesario.

El volumen lógico se creará mediante el comando "lvcreate".

# lvcreate -l 100%FREE tecmint_lun1 tecmint_iscsi
# lvs  (Simply used to confirm the creation of the logical volume)

El comando "lvcreate" anterior puede resultar un poco confuso a primera vista, pero el desglose es el siguiente:

  • lvcreate: comando utilizado para crear el volumen lógico.
  • -l 100% GRATIS: crea el volumen lógico utilizando todo el espacio libre del grupo de volumen.
  • -n tecmint_lun1: el nombre del volumen lógico que se creará.
  • tecmint_iscsi: el nombre del grupo de volúmenes en el que se creará el volumen lógico.

Una vez que se ha creado el volumen lógico, es el momento de crear el LUN (número de unidad lógica) real. El LUN será el dispositivo de almacenamiento al que el iniciador se conectará y utilizará más adelante.

Crear un LUN es muy simple y solo requiere unos pocos pasos. El primer paso será la creación del archivo de configuración. Este archivo residirá en el directorio "/etc/tgt/conf.d" y para este artículo se llamará "TecMint_iscsi.conf".

Para crear este archivo use un editor de texto.

# nano /etc/tgt/conf.d/TecMint_iscsi.conf

Dentro de este archivo, se configurará toda la información de configuración necesaria para este LUN. Hay muchas opciones que se pueden colocar en este archivo, pero por ahora se configurará un LUN básico con el Protocolo de autenticación por desafío mutuo (CHAP).

La definición de LUN existirá entre dos declaraciones de "objetivo". Para obtener más parámetros que pueden incluirse en la declaración de destino, revise la página del manual para el archivo "targets.conf" emitiendo "man 5 targets.conf".

<target iqn.2018-02.tecmint.com:lun1>
     # Provided device as an iSCSI target
     backing-store /dev/mapper/tecmint_iscsi-tecmint_lun1
     initiator-address 192.168.56.102
    incominguser tecmint-iscsi-user password
     outgoinguser debian-iscsi-target secretpass
</target>

Están sucediendo muchas cosas arriba. Una explicación rápida puede resultar útil para la mayoría.

  • La primera línea comienza la configuración de iSCSI LUN particular. En este caso, el LUN etiquetado como "iqn.2018-02.tecmint.com:lun1". La parte "iqn" indica que será un nombre calificado iSCSI. El "2018-02" es una combinación de fechas elegida arbitrariamente. "Tecmint.com" es el dominio al que pertenece este LUN en particular. Por último, el "lun1" se utiliza como nombre para este objetivo en particular.
  • La segunda línea de arriba ilustra un comentario. Los comentarios pueden existir en los archivos de configuración de destino y deben ir precedidos de un símbolo "#".
  • La tercera línea es donde existe el espacio de almacenamiento real que será utilizado por el iniciador. En este caso, el respaldo de almacenamiento será el volumen lógico que se creó anteriormente en la guía.
  • La cuarta línea es la dirección IP que se espera del iniciador. Si bien este no es un elemento de configuración obligatorio, puede ayudar a aumentar la seguridad.
  • La quinta línea es el nombre de usuario/contraseña entrante. Al igual que la dirección del iniciador anterior, este parámetro tampoco es necesario, pero puede ayudar a proteger el LUN. Dado que esta guía también cubre el CHAP mutuo de iSCSI, este parámetro es obligatorio. Esta línea indica el nombre de usuario y la contraseña que el objetivo esperará del iniciador para conectarse a este LUN.
  • La sexta línea es el nombre de usuario/contraseña que el objetivo proporcionará al iniciador para permitir que se lleve a cabo la autenticación CHAP mutua. Normalmente, este parámetro no es obligatorio, pero este artículo cubre la autenticación CHAP mutua, por lo que este parámetro es obligatorio.
  • La última línea es la declaración de cierre de la definición de destino. ¡Preste atención a la barra oblicua de cierre delante del objetivo de la palabra clave!

Una vez que se hayan escrito las configuraciones apropiadas para el LUN, guarde los cambios y salga del editor de texto. Si usa nano, presione ctrl+o para guardar y luego presione ctrl+x para salir de nano.

Una vez que se ha creado el archivo de configuración, el servicio tgt debe reiniciarse para que tgt conozca los nuevos destinos y la configuración asociada.

Esto se puede hacer con uno de los siguientes comandos y depende del sistema de inicio en uso.

# service tgt restart  (For sysv init systems)
# systemctl restart tgt  (For systemd init systems)

Una vez que se haya reiniciado tgt, es importante verificar que el destino iSCSI esté disponible de acuerdo con el archivo de configuración creado.

Esto se puede lograr con el comando "tgtadm".

# tgtadm --mode target --op show   (This will show all targets)

Con esto concluye la configuración del objetivo. La siguiente sección trabajará a través de la configuración del iniciador.

Configuración del iniciador iSCSI de Debian

El siguiente paso para utilizar el destino iSCSI configurado previamente es la configuración del iniciador iSCSI.

Un XenServer/ESXi diferente u otras distribuciones como Red Hat, Debian o Ubuntu.

El primer paso en este proceso para este iniciador Debian es la instalación de los paquetes adecuados para iSCSI.

# apt-get update
# apt-get install open-iscsi

Una vez que apt ha finalizado la configuración de los paquetes open-iscsi, puede comenzar la configuración del iniciador iSCSI. El primer paso será comunicarse con el objetivo para obtener la información de configuración inicial para el objetivo preparado.

# iscsiadm -m discovery -t st -p 192.168.56.101

Cuando se ejecute este comando, responderá con el nombre del lun configurado anteriormente para este host en particular. El comando anterior también generará dos archivos para la información de LUN recién descubierta.

Ahora, el archivo creado para este nodo deberá tener la información de CHAP configurada para que el iniciador pueda acceder a este destino iSCSI.

Técnicamente, esta información podría configurarse para todo el sistema como un todo, pero en el caso de que un host se conecte a diferentes LUN con diferentes credenciales, colocar esas credenciales en el archivo de configuración de nodo específico puede mitigar cualquier problema.

El archivo de configuración del nodo existirá en el directorio "/ etc/iscsi/nodes /" y tendrá un directorio por LUN disponible. En el caso de este artículo (tenga en cuenta que las rutas cambiarán si se cambian los nombres/direcciones IP).

# /etc/iscsi/nodes/iqn.2018-02.tecmint.com\:lun1/192.168.56.101\,3260\,1/default

Para trabajar con este archivo, se puede utilizar cualquier editor de texto.

# nano /etc/iscsi/nodes/iqn.2018-02.tecmint.com\:lun1/192.168.56.101\,3260\,1/default

Dentro de este archivo, habrá varias opciones ya configuradas para el objetivo respectivo que se determinaron durante la ejecución del comando "iscsiadm" anteriormente.

Dado que esta configuración particular de iniciador/destino de Debian utiliza CHAP mutuo, es necesario cambiar algunas opciones más y agregarlas a este archivo y luego realizar un inicio de sesión en el destino iSCSI.

Los cambios a este archivo son:

node.session.auth.authmethod = CHAP                    #Enable CHAP Authentication
node.session.auth.username = tecmint-iscsi-user        #Target to Initiator authentication
node.session.auth.password = password                  #Target to Initiator authentication
node.session.auth.username_in = debian-iscsi-target    #Initiator to Target authentication
node.session.auth.password_in = secretpass             #Initiator to Target authentication

Las opciones anteriores permitirán que este objetivo se autentique ante el iniciador y también permitirán que el iniciador se autentique ante el objetivo.

Hay otra opción en este archivo en particular que puede necesitar ser cambiada dependiendo de las preferencias del administrador y ese es el parámetro "node.startup".

Si sigue esta guía, la opción "node.startup" se establecerá en "manual" en este punto. Puede que esto no sea lo deseado. Si el administrador desea tener el objetivo iSCSI conectado cuando se inicia el sistema, cambie "manual" a "automático" como tal:

node.startup = automatic

Una vez que se hayan realizado los cambios anteriores, guarde el archivo y salga. En este punto, es necesario reiniciar el servicio de iniciador open-iscsi para leer estos nuevos cambios y conectarse al destino iSCSI.

Esto se puede lograr con uno de los siguientes comandos dependiendo del sistema de inicio que se esté usando.

# service open-iscsi restart   (For sysv init systems)
# systemctl restart open-iscsi (For systemd init systems)

Observe en el cuadro verde de arriba que el iniciador iSCSI pudo iniciar sesión en el destino. Para confirmar aún más que el destino iSCSI está realmente disponible para el iniciador, podemos verificar el sistema en busca de unidades de disco adicionales que estén disponibles usando el comando "lsblk" y verificando la salida en busca de unidades adicionales.

# lsblk

El otro comando que se puede usar en el iniciador para confirmar una conexión con el objetivo es "iscsiadm" como tal:

# iscsiadm -m session

El último lugar para confirmar una conexión sería el propio destino mediante el comando "tgtadm" para enumerar las conexiones iSCSI.

# tgtadm --mode conn --op show --tid 1

Desde este punto, el dispositivo iSCSI recién conectado se puede utilizar de forma similar a cualquier disco conectado normalmente. El particionado, la creación de sistemas de archivos, el montaje y/o el montaje persistente pueden manejarse con normalidad.

Una gran precaución a tener en cuenta con los dispositivos iSCSI es que si el destino iSCSI contiene sistemas de archivos importantes que se necesitan mientras el iniciador se está iniciando, asegúrese de usar la entrada '_netdev' en el archivo '/ etc/fstab' para asegurarse de que el iSCSI El dispositivo está conectado antes de que el sistema continúe arrancando.