Configuración del Destino e Iniciador iSCSI

iSCSI (Internet SCSI) habilita acceso a almacenamiento a nivel de bloques en redes IP, permitiendo que los servidores se conecten a dispositivos de almacenamiento remoto como si fueran locales. Este protocolo es fundamental para la red de almacenamiento en entornos en la nube, plataformas de virtualización y centros de datos empresariales. Esta guía cubre la configuración de destinos iSCSI utilizando targetcli, la configuración de iniciadores para conexión e implementación de características avanzadas como E/S multiruta para alta disponibilidad.

Tabla de Contenidos

  1. Descripción General de la Arquitectura iSCSI
  2. Configuración del Destino iSCSI
  3. Gestión de LUN y ACL
  4. Configuración del Iniciador iSCSI
  5. Descubrimiento de Dispositivos e Inicio de Sesión
  6. Configuración de E/S Multiruta
  7. Rendimiento y Optimización
  8. Monitoreo y Resolución de Problemas
  9. Conclusión

Descripción General de la Arquitectura iSCSI

iSCSI consta de dos componentes primarios:

  • Destino: Servidor que proporciona almacenamiento (rol del dispositivo iSCSI)
  • Iniciador: Cliente que se conecta y consume almacenamiento

La comunicación ocurre sobre TCP/IP, típicamente en puerto 3260. Los Nombres Calificados iSCSI (IQNs) identifican de manera única destinos e iniciadores usando formato: iqn.year-month.domain.reverse.identifier

Conceptos clave:

  • LUN (Logical Unit Number): Unidad de almacenamiento direccionable dentro del destino
  • Portal: Dirección de red (IP:puerto) para conexión al destino
  • ACL (Access Control List): Restringe acceso del iniciador a destinos específicos
  • TPG (Target Portal Group): Colección de portales de red para el destino

Configuración del Destino iSCSI

Instalar Software del Destino

# Instalar targetcli en Ubuntu/Debian
sudo apt-get install -y targetcli-fb

# O en CentOS/RHEL
sudo yum install -y targetcli

# Verificar instalación
targetcli --version

# Iniciar servicio de destino
sudo systemctl enable target
sudo systemctl start target

# Verificar estado del servicio
sudo systemctl status target

Estructura de Configuración del Destino

Acceda al shell interactivo de targetcli:

# Entrar en shell de targetcli
sudo targetcli

# Listar configuración actual
> ls

# Mostrar árbol de configuración completo
> status

# Obtener ayuda
> help

# Salir de targetcli
> exit

Crear Almacenamiento de Backstore

Los backstores definen recursos de almacenamiento que respaldan destinos:

# Entrar en targetcli
sudo targetcli

# Crear backstore basado en archivo
> backstores/fileio create disk1 /var/lib/iscsi-disk1.img 10G

# Crear backstore de dispositivo de bloque (preferido para rendimiento)
> backstores/block create disk2 /dev/sdb

# Crear backstore de RAMDISK (solo para pruebas)
> backstores/ramdisk create ramdisk1 1G

# Listar backstores
> backstores/
> ls

# Obtener detalles del backstore
> backstores/block/disk2
> status

Crear Destino iSCSI

Defina el destino iSCSI real:

# Crear destino
> iscsi/ create iqn.2024-01.com.example.storage:target1

# Ver destino
> iscsi/iqn.2024-01.com.example.storage:target1

# Crear grupo de portal de destino (TPG)
> iscsi/iqn.2024-01.com.example.storage:target1/tpg1

# Agregar portal de red a TPG
> iscsi/iqn.2024-01.com.example.storage:target1/tpg1/portals/ create 0.0.0.0 3260

# Verificar configuración
> ls

Habilitar Destino

# Cambiar a directorio de TPG
> iscsi/iqn.2024-01.com.example.storage:target1/tpg1

# Habilitar destino
> set attribute authentication=0
> set attribute generate_node_acls=1
> set attribute demo_mode_write_protect=0

# Habilitar TPG
> enable

# Verificar estado habilitado
> status

Gestión de LUN y ACL

Crear Unidades Lógicas

# Crear LUN desde backstore
> iscsi/iqn.2024-01.com.example.storage:target1/tpg1/luns/ create /backstores/block/disk2

# Crear LUN adicional desde backstore diferente
> iscsi/iqn.2024-01.com.example.storage:target1/tpg1/luns/ create /backstores/fileio/disk1

# Listar LUNs
> iscsi/iqn.2024-01.com.example.storage:target1/tpg1/luns/
> ls

# Obtener detalles de LUN
> iscsi/iqn.2024-01.com.example.storage:target1/tpg1/luns/lun0
> status

Listas de Control de Acceso (ACLs)

Restrinja acceso al destino a iniciadores específicos:

# Deshabilitar generación automática de ACL de nodo
> iscsi/iqn.2024-01.com.example.storage:target1/tpg1/set attribute generate_node_acls=0

# Crear ACL para iniciador específico
> iscsi/iqn.2024-01.com.example.storage:target1/tpg1/acls/ create iqn.2024-01.com.example.client:initiator1

# Mapear LUNs a ACL
> iscsi/iqn.2024-01.com.example.storage:target1/tpg1/acls/iqn.2024-01.com.example.client:initiator1/mapped_luns/ create 0 /backstores/block/disk2

# Crear múltiples LUNs mapeados
> iscsi/iqn.2024-01.com.example.storage:target1/tpg1/acls/iqn.2024-01.com.example.client:initiator1/mapped_luns/ create 1 /backstores/fileio/disk1

# Listar ACLs
> iscsi/iqn.2024-01.com.example.storage:target1/tpg1/acls/
> ls

Guardar Configuración

# Guardar configuración de targetcli (en shell de targetcli)
> saveconfig

# Verificar configuración guardada
> status

# Salir de targetcli
> exit

# Verificar persistencia de configuración
sudo ls -la /etc/target/saveconfig.json

Configuración del Iniciador iSCSI

Instalar Software del Iniciador

# Instalar en Ubuntu/Debian
sudo apt-get install -y open-iscsi open-iscsi-utils

# O en CentOS/RHEL
sudo yum install -y iscsi-initiator-utils iscsi-initiator-utils-devel

# Verificar instalación
iscsiadm --version

# Iniciar servicio del iniciador
sudo systemctl enable iscsid
sudo systemctl start iscsid

Configurar IQN del Iniciador

Establezca un identificador único del iniciador:

# Editar configuración del iniciador
sudo nano /etc/iscsi/initiatorname.iscsi

# Establecer nombre del iniciador
InitiatorName=iqn.2024-01.com.example.client:initiator1

# Reiniciar servicio iscsid
sudo systemctl restart iscsid

# Verificar nombre del iniciador
sudo iscsiadm -m iface -l

Descubrimiento y Conexión

# Descubrir destinos en servidor de destino
sudo iscsiadm -m discovery -t sendtargets -p 192.168.1.100

# Iniciar sesión en destino descubierto
sudo iscsiadm -m node -T iqn.2024-01.com.example.storage:target1 -p 192.168.1.100 -l

# Listar sesiones iniciadas
sudo iscsiadm -m session -P 0

# Obtener información de sesión detallada
sudo iscsiadm -m session -P 3

# Verificar dispositivos iSCSI conectados
lsblk | grep iscsi

Conexiones Persistentes

Configure el inicio automático en el arranque:

# Establecer nodo para conectarse automáticamente
sudo iscsiadm -m node -T iqn.2024-01.com.example.storage:target1 -p 192.168.1.100 --op=update --name=node.startup --value=automatic

# Verificar inicio automático
sudo iscsiadm -m node -T iqn.2024-01.com.example.storage:target1 -p 192.168.1.100

# Cerrar sesión del destino
sudo iscsiadm -m node -T iqn.2024-01.com.example.storage:target1 -p 192.168.1.100 -u

Configuración de E/S Multiruta

Instalar Herramientas Multiruta

E/S multiruta habilita múltiples rutas de red al mismo almacenamiento para redundancia:

# Instalar herramientas multiruta
sudo apt-get install -y multipath-tools

# O en CentOS/RHEL
sudo yum install -y device-mapper-multipath

# Iniciar servicio multiruta
sudo systemctl enable multipathd
sudo systemctl start multipathd

# Verificar servicio
sudo systemctl status multipathd

Configurar Multiruta

# Editar configuración de multiruta
sudo nano /etc/multipath.conf

# Ejemplo de configuración para iSCSI:
cat <<'EOF' | sudo tee -a /etc/multipath.conf
defaults {
    user_friendly_names yes
    path_grouping_policy multibus
    failback immediate
    polling_interval 10
}

multipaths {
    multipath {
        wwn iqn.2024-01.com.example.storage:target1
        alias storage-array-1
    }
}
EOF

# Recargar multiruta
sudo multipath -r

# Listar dispositivos multiruta
sudo multipath -ll

# Verificar estado de multiruta
sudo multipath -c

Crear Mapeos de Dispositivos

# Después de la configuración de multiruta, los mapeos aparecen automáticamente
# o use:
sudo multipath -a

# Verificar mapeos
sudo multipath -ll

# Obtener información de ruta detallada
sudo multipath -l

# Listar todas las rutas al dispositivo
sudo dmsetup table

Operaciones de Sistema de Archivos en Dispositivos Multiruta

# Listar nombres de dispositivos multiruta
sudo multipath -l | grep "^mpath"

# Formatear dispositivo multiruta (cuidado: destructivo)
sudo mkfs.ext4 /dev/mapper/storage-array-1

# Crear punto de montaje
sudo mkdir -p /mnt/shared-storage

# Montar dispositivo
sudo mount /dev/mapper/storage-array-1 /mnt/shared-storage

# Agregar a fstab para persistencia
echo '/dev/mapper/storage-array-1 /mnt/shared-storage ext4 defaults,_netdev 0 2' | sudo tee -a /etc/fstab

# Verificar montaje
df -h /mnt/shared-storage

Rendimiento y Optimización

Parámetros de Sesión iSCSI

# Ver parámetros de sesión predeterminados
sudo iscsiadm -m session -P 2 | grep -i "chap\|initial\|max"

# Modificar parámetros de sesión
sudo iscsiadm -m node -T iqn.2024-01.com.example.storage:target1 \
  -p 192.168.1.100 \
  --op=update --name=node.session.initial_login_retry_cnt --value=3

# Ajustar parámetros de conexión para rendimiento
sudo iscsiadm -m node -T iqn.2024-01.com.example.storage:target1 \
  -p 192.168.1.100 \
  --op=update --name=node.conn[0].iscsi.MaxRecvDataSegmentLength --value=262144

# Habilitar digests de encabezado y datos para integridad
sudo iscsiadm -m node -T iqn.2024-01.com.example.storage:target1 \
  -p 192.168.1.100 \
  --op=update --name=node.conn[0].iscsi.HeaderDigest --value=CRC32C

Ajuste de Rendimiento del Destino

# En targetcli, optimizar parámetros de TPG
sudo targetcli

# Establecer profundidad de cola
> iscsi/iqn.2024-01.com.example.storage:target1/tpg1/set attribute queue_depth=32

# Habilitar datos inmediatos (reduce latencia)
> iscsi/iqn.2024-01.com.example.storage:target1/tpg1/set attribute immediate_data=1

# Habilitar comandos bidireccionales
> iscsi/iqn.2024-01.com.example.storage:target1/tpg1/set attribute default_cmdsn_depth=32

Monitoreo y Resolución de Problemas

Monitoreo de Sesión

# Ver sesiones activas y conexiones
sudo iscsiadm -m session -P 3

# Verificar estadísticas de iSCSI
cat /proc/iscsi_transport

# Monitorear estado de multiruta continuamente
watch -n 1 'sudo multipath -ll'

# Verificar fallos de ruta
sudo multipath -ll | grep "failed"

Diagnosticar Problemas de Conexión

# Habilitar registro de depuración
sudo iscsiadm -d 8 -m discovery -t sendtargets -p 192.168.1.100

# Verificar registros de iscsid
sudo tail -f /var/log/syslog | grep iscsi

# Verificar conectividad de red al destino
ping 192.168.1.100
nc -zv 192.168.1.100 3260

# Verificar estado del servicio iscsi
sudo systemctl status iscsid
sudo systemctl status multipathd

# Rescanear para nuevos LUNs
sudo iscsiadm -m node -R

Resolución de Problemas de Rendimiento

# Monitorear tráfico de iSCSI
sudo tcpdump -i eth0 port 3260

# Verificar rendimiento de E/S del dispositivo
sudo fio --name=seqread --ioengine=libaio --iodepth=32 --rw=read \
  --bs=128k --size=1G --filename=/dev/mapper/storage-array-1

# Ver estadísticas del dispositivo de bloque
cat /proc/diskstats | grep iscsi

# Monitorear conmutación por error multiruta
sudo dmsetup status | grep mpath

Conclusión

iSCSI proporciona red de almacenamiento de bloques rentable adecuada para diversos escenarios de infraestructura. Configurando correctamente destinos con LUNs y ACLs apropiados, e implementando E/S multiruta para redundancia, establece una infraestructura de almacenamiento confiable. Comprender parámetros de ajuste de rendimiento e implementar monitoreo apropiado garantiza entrega de datos óptima. Ya sea desplegando para almacenamiento de máquinas virtuales, bases de datos compartidas o infraestructura de copia de seguridad, dominar la configuración de iSCSI ofrece la flexibilidad y rendimiento requerido para entornos modernos de centros de datos.