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
- Descripción General de la Arquitectura iSCSI
- Configuración del Destino iSCSI
- Gestión de LUN y ACL
- Configuración del Iniciador iSCSI
- Descubrimiento de Dispositivos e Inicio de Sesión
- Configuración de E/S Multiruta
- Rendimiento y Optimización
- Monitoreo y Resolución de Problemas
- 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.


