Como configurar un servidor iscsi Target y iscsi cliente initiator en Rhel/Rocky Linux 8
¿Qué es ISCSI?
iscsi es un acrónimo de I nternet S mall Computer S ystem Interface. Podemos considerar iscsi como un almacenamiento en bloque, ya que se accede al almacenamiento en la capa de bloques. Básicamente, iSCSI es un protocolo a nivel de bloque para compartir dispositivos de almacenamiento RAW a través de una red IP. También lo llamamos tecnología SAN, es decir, iSCSI SAN. Dado que funciona a través de una red IP, no lo mezcle ni lo confunda con tecnologías NAS como NFS o SMB. También funcionan a través de la red IP, pero operan en la capa del sistema de archivos. pero en iSCSI trabajamos en bloques RAW. En este artículo, compartiré los pasos para configurar el destino y el iniciador iscsi en RHEL/Rocky Linux 8
Arquitectura ISCSI
Al configurar una SAN iSCSI, se configura un servidor como destino iSCSI. Este es el servidor que ofrece
acceso a los dispositivos de almacenamiento compartido. Cuando se configura RHEL o Rocky Linux 8 como
destino iSCSI, los dispositivos de almacenamiento compartido suelen ser volúmenes lógicos LVM, pero
también pueden ser discos completos o particiones.
El otro servidor se va a utilizar como iniciador iSCSI. Este es el servidor que se conecta a la SAN. Después
de conectarse a la SAN, el iniciador iSCSI ve un dispositivo de disco
Descripción de Términos iSCSI
Item | Descripción |
---|---|
IQN | El nombre completo de iSCSI. Un nombre único que se utiliza para identificar destinos e iniciadores. |
Backend Storage | Los dispositivos de almacenamiento en el destino iSCSI a los que el componente de destino iSCSI proporciona acceso. |
Target | El servicio en un servidor iSCSI que da acceso a los dispositivos de almacenamiento back-end. |
Initiator | El cliente iSCSI que se conecta a un destino y es identificado por IQN. |
ACL | La lista de control de acceso que se basa en el IQN del iniciador iSCSI y se utiliza para proporcionar acceso a un usuario específico. |
LUN | Un número de unidad lógica. Los dispositivos de almacenamiento back-end que se comparten a través del destino. Puede ser cualquier dispositivo que admita operaciones de lectura/escritura, como discos, particiones, volúmenes lógicos, archivos o cintas. |
Portal | La dirección IP y el puerto que utiliza un destino o iniciador para establecer conexiones. |
TPG | El grupo de portales de destino. Esta es la colección de la dirección IP y los puertos TCP a los que escuchará un destino iSCSI específico. |
Discovery | Proceso mediante el cual un iniciador encuentra los destinos configurados en un portal y almacena la información localmente para futuras referencias. La detección se realiza mediante el comando iscsiadm. |
Login | Autenticación que proporciona a un iniciador acceso a los LUN del destino. Después de iniciar sesión correctamente, la información de inicio de sesión se almacena automáticamente en el iniciador. El inicio de sesión se realiza mediante el comando iscsiadm. |
Inicio de Configuración del laboratorio
Propiedades
Propiedades | Cliente initiator | Server storage iscsi target |
---|---|---|
OS | Rocky Linux/8 | Rocky Linux/8 |
vCPU | 1 | 1 |
RAM | 2 GB | 2GB |
Disco | 15 GB | 15GB |
Nombre | cliente01 | srviscsi |
FQDN | client01.kalishell.local | srviscsi.kalishell.local |
Dirección IP | 192.168.65.110 | 192.168.65.90 |
1. Pasos para configurar el objetivo iSCSI
- Cree los dispositivos de almacenamiento de respaldo.
- Cree el IQN y el grupo de portales de destino (TPG) predeterminado.
- Configure una o más ACL para el TPG.
- Cree LUN para proporcionar acceso a los dispositivos de almacenamiento de respaldo.
- Cree un portal para proporcionar una interfaz de red a la que puedan conectarse los iniciadores
iSCSI. - Verifique y confirme la configuración.
2. Instale targetcli
Para administrar el servicio de destino iSCSI basado en kernel en RHEL/Rocky Linux/8, necesitaremos instalar el paquete, como se muestra en el siguiente comando: targetcli
[root@srviscsi ~]# yum install targetcli -y
3. Administración de objetivos iSCI con targetcli
Para invocar el shell, ejecutaremos este comando como root . Verá que en la primera ejecución del comando, se crea un archivo de preferencias. Esto se ilustra en el siguiente fragmento targetcli
[root@srviscsi ~]# targetcli
targetcli shell version 2.1.53
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.
Como puede ver en el resultado anterior, puede escribir help para mostrar una lista de comandos que se pueden introducir. Para ver los objetos de configuración disponibles, podemos usar el comando ls. El resultado se muestra en la siguiente captura de pantalla:
/> ls o- / ..................................................................... [...] o- backstores .......................................................... [...] | o- block .............................................. [Storage Objects: 0] | o- fileio ............................................. [Storage Objects: 0] | o- pscsi .............................................. [Storage Objects: 0] | o- ramdisk ............................................ [Storage Objects: 0] o- iscsi ........................................................ [Targets: 0] o- loopback ..................................................... [Targets: 0] />
4. Crear backstore de bloque
Trabajaremos desde la raíz de la targetclit configuración; Esto debería ser exactamente dónde estamos, pero siempre podemos usar el comando pwd para mostrar nuestro directorio de trabajo. Si es necesario, podemos cambiarlo a la raiz de la configuración con cd /
Para crear un nuevo bloque, vuelva a almacenarlo en el disco nuevo agregado
targetcli shell version 2.1.53 Copyright 2011-2013 by Datera, Inc and others. For help on commands, type 'help'. /> cd /backstores/block /backstores/block> create dev=/dev/sda name=disk-sda Created block storage object disk-sda using /dev/sda.
Esto creará el almacén de bloques con un nombre llamado disk-sda. Usando el comando ls nuevamente enumerara el objeto adicional dentro de la jerarquía. En la siguiente captura de pantalla, veamos la creación del backstore y el listado posterior:
/backstores/block> ls o- block .................................................. [Storage Objects: 1] o- disk-sda ...................... [/dev/sda (13.0GiB) write-thru deactivated] o- alua ................................................... [ALUA Groups: 1] o- default_tg_pt_gp ....................... [ALUA state: Active/optimized] /backstores/block>
Para volver al directorio de inicio
/backstores/block> cd / />
5. Creación de objetivos iSCI
Aquí ahora crearemos un objetivo iSCSI proporcionando un IQN personalizado. Para ello, creamos el objeto y especificamos el nombre que normalmente se escribe para contener la fecha y el nombre DNS invertido. Aquí hemos utilizado un ejemplo de IQN
/> cd iscsi /scsi>
/iscsi> create wwn=iqn.2023-10.local.kalishell:srvisci Created target iqn.2023-10.local.kalishell:srvisci. Created TPG 1. Global pref auto_add_default_portal=true Created default portal listening on all IPs (0.0.0.0), port 3260. /iscsi>
En este caso añadí srvisci como nombre de objetivo para mi servidor iSCI Target
Podemos filtrar lo que se muestra usando el comando ls agregando la jerarquía de objetos que queremos enumerar. Por ejemplo, para enumerar objetivos, usaremos el comando. El resultado de este comando se muestra en la siguiente captura de pantalla: ls iscsi
/iscsi> ls o- iscsi ......................................................................... [Targets: 1] o- iqn.2023-10.local.kalishell:srvisci ............................................ [TPGs: 1] o- tpg1 ............................................................ [no-gen-acls, no-auth] o- acls ....................................................................... [ACLs: 0] o- luns ....................................................................... [LUNs: 0] o- portals ................................................................. [Portals: 1] o- 0.0.0.0:3260 .................................................................. [OK] /iscsi>
Ahora tenemos nuestro nombre personalizado para el destino, pero aún tenemos que agregar los LUNS o unidades lógicas para que la SAN (Red de Área de Almacenamiento) sea efectiva.
6. Adición de ACL
Para crear una ACL, limitamos el acceso desde LUN a un nombre o nombres de iniciador determinados que mencionamos en la lista de control de acceso (ACL). El iniciador es el cliente iSCSI y tendrá un IQN de cliente único configurado en el iniciador del archivo. /etc/iscsi/initiatorname.iscsi
El nombre de archivo utilizado para configurar el nombre del iniciador será coherente para los clientes Linux, pero será diferente para otros sistemas operativos. Para agregar una ACL, nos quedaremos con la jerarquía de configuración actual: y ejecutaremos el siguiente comando, nuevamente escrito como una sola línea: /iscsi/iqn….:srviscsi/tpg1
/iscsi> cd iqn.2023-10.local.kalishell:srvisci/tpg1/acls /iscsi/iqn.20...sci/tpg1/acls> create wwn=iqn.2023-10.local.kalishell:client01 Created Node ACL for iqn.2023-10.local.kalishell:client01 /iscsi/iqn.20...sci/tpg1/acls> cd /
Usando el comando de esta ubicación en la jerarquía de configuración, vemos el resultado similar a la siguiente captura de pantalla, que también incluye el comando para crear la ACL: ls
/> ls o- / ............................................................................................... [...] o- backstores .................................................................................... [...] | o- block ........................................................................ [Storage Objects: 1] | | o- disk-sda ............................................ [/dev/sda (13.0GiB) write-thru deactivated] | | o- alua ......................................................................... [ALUA Groups: 1] | | o- default_tg_pt_gp ............................................. [ALUA state: Active/optimized] | o- fileio ....................................................................... [Storage Objects: 0] | o- pscsi ........................................................................ [Storage Objects: 0] | o- ramdisk ...................................................................... [Storage Objects: 0] o- iscsi .................................................................................. [Targets: 1] | o- iqn.2023-10.local.kalishell:srvisci ..................................................... [TPGs: 1] | o- tpg1 ..................................................................... [no-gen-acls, no-auth] | o- acls ................................................................................ [ACLs: 1] | | o- iqn.2023-10.local.kalishell:client01 ....................................... [Mapped LUNs: 0] | o- luns ................................................................................ [LUNs: 0] | o- portals .......................................................................... [Portals: 1] | o- 0.0.0.0:3260 ........................................................................... [OK] o- loopback ............................................................................... [Targets: 0] />
NOTA IMPORTANTE:
Esta ACL restringe el acceso al iniciador enumerado en la ACL. Tenga cuidado si alguna vez cambia el nombre del iniciador, ya que la ACL también deberá actualizarse. El iniciador es el cliente iSCSI.
7. Adición de LUN al destino iSCSI
Siguiendo con el shell, ahora pasaremos a nuestro objetivo y al objeto TPG (Target Portal Group). Al igual que el sistema de archivos, esto se logra mediante el comando, como se muestra en el siguiente comando: cd
/> cd iscsi/iqn.2023-10.local.kalishell:srvisci/tpg1/luns
Tenemos un portal que escucha todas las interfaces IPv4 en el puerto TCP 3260. Actualmente, no tenemos acls ni luns. Para agregar un LUN, usaremos el siguiente comando, que utilizará el almacén de bloques LVM
/iscsi/iqn.20...sci/tpg1/luns> create /backstores/block/disk-sda Created LUN 0. Created LUN 0->0 mapping in node ACL iqn.2023-10.local.kalishell:client01
El destino iSCSI ya está configurado. Una vez que salga, la configuración se guardará en o, opcionalmente, también puede ejecutarse en el terminal. /etc/target/saveconfig.json saveconfig
/iscsi/iqn.20...sci/tpg1/luns> exit Global pref auto_save_on_exit=true Configuration saved to /etc/target/saveconfig.json [root@srviscsi ~]#
8. Configurar el Firewall
Ahora que se ha configurado el destino iSCSI, debe asegurarse de que se puede acceder a él a través del firewall y de que el servicio se inicia automáticamente. Para abrir el puerto 3260 en el firewall, ejecute los siguientes comandos
[root@srviscsi ~]# firewall-cmd --add-port=3260/tcp --permanent [root@srviscsi ~]# firewall-cmd --reload
9. Inice y habilite el servicio iscsi target
Ahora que se ha configurado el destino iSCSI, debemos iniciar y habilitar el servicio de destino
[root@srviscsi ~]# systemctl start target [root@srviscsi ~]# systemctl enable target
Configuración del iniciador iSCSI en el servidor que servirá como cliente (client01)
El iniciador o cliente iSCSI en RHEL/Rocky Linux/8 se instala con el paquete; Puede verificar que esto está instalado en su sistema usando el comando, como se muestra en el siguiente ejemplo: yum iscsi-initiator-utils
[root@client01 ~]# rpm -qa iscsi-initiator-utils iscsi-initiator-utils-6.2.1.4-8.git095f59c.el8_8.x86_64
Si el paquete no se encuentra instalado procedemos a instalarlo con el siguiente comando yum -y install iscsi-initiator-utils
1. Configuración del nombre iniciador iSCI
Para el propósito de este ejercicio, usaremos un sistema RHEL/Rocky Linux 8 separado como nuestro iniciador y lo conectaremos al objetivo existente. Necesitaremos editar el archivo en el nuevo sistema RHEL/Rocky Linux 8 para asegurarnos de que el nombre esté configurado para que coincida con el nombre que agregamos a la ACL en la sección anterior de este artículo /etc/iscsi/initiatorname.iscsi
Por defecto se creará un nombre automático tal como se ve en la siguiente imagen
[root@client01 ~]# cat /etc/iscsi/initiatorname.iscsi InitiatorName=iqn.1994-05.com.redhat:5116f439b09f
Ahora vamos a cambiar manualmente ese nombre por el nombre que se creó en la acl initiator en el paso 6 de esta guía
[root@client01 ~]# cat /etc/iscsi/initiatorname.iscsi InitiatorName=iqn.2023-10.local.kalishell:client01
Acontuniación, Reinicie el servicio de iscsid con el siguiente comando:
[root@client01 ~]# systemctl restart iscsid
verificamos el estado del servicio con el siguiente comando:
[root@client01 ~]# systemctl status iscsid
● iscsid.service - Open-iSCSI Loaded: loaded (/usr/lib/systemd/system/iscsid.service; disabled; vendor preset: disabled) Active: active (running) since Mon 2023-10-23 15:44:28 -05; 2min 41s ago Docs: man:iscsid(8) man:iscsiuio(8) man:iscsiadm(8) Main PID: 1895 (iscsid) Status: "Ready to process requests" Tasks: 1 (limit: 10944) Memory: 3.9M CGroup: /system.slice/iscsid.service └─1895 /usr/sbin/iscsid -f Oct 23 15:44:28 client01.kalishell.local systemd[1]: Starting Open-iSCSI... Oct 23 15:44:28 client01.kalishell.local systemd[1]: Started Open-iSCSI.
2. Descubrir Los LUN
Cuando se utiliza la detección iSCSI, se necesitan tres argumentos diferentes:
- --type sendtargets: Esto indica al modo de detección cómo encontrar los destinos iSCSI.
- --portal: Este argumento le dice al comando qué dirección IP y puerto debe dirigirse para realizar la detección. Puede utilizar una dirección IP o un nombre de nodo como argumento y, opcionalmente, también puede especificar un puerto. Si no se especifica ningún puerto, se utiliza el puerto predeterminado 3260. iscsiadm
- --discover: Este argumento indica al servicio que realice una detección. iscsid
Usaremos la Herramienta principal del cliente para descubrir los LUNs iSCSI en el destino iscsiadm
[root@client01 ~]# iscsiadm --mode discovery --type sendtargets --portal 192.168.65.90 --discover 192.168.65.90:3260,1 iqn.2023-10.local.kalishell:srvisci
Después de actualizar la siguiente base de datos de detección
[root@client01 ~]# ls -l /var/lib/iscsi/nodes total 0 drwx------. 3 root root 34 Oct 23 16:07 iqn.2023-10.local.kalishell:srvisci
[root@client01 ~]# ls -l /var/lib/iscsi/send_targets/192.168.65.90,3260/ total 4 lrwxrwxrwx. 1 root root 77 Oct 23 16:07 iqn.2023-10.local.kalishell:srvisci,192.168.65.90,3260,1,default -> /var/lib/iscsi/nodes/iqn.2023-10.local.kalishell:srvisci/192.168.65.90,3260,1 -rw-------. 1 root root 583 Oct 23 16:07 st_config
3. Realizar la conexión
Ahora, hemos visto que podemos conectarnos al objetivo iSCSI y que nos envie los LUNs configurados. Ahora debemos conectarnos a este LUN y usar el mismo comando con las siguientes opciones
[root@client01 ~]# iscsiadm --mode node --targetname iqn.2023-10.local.kalishell:srvisci --login Logging in to [iface: default, target: iqn.2023-10.local.kalishell:srvisci, portal: 192.168.65.90,3260] Login to [iface: default, target: iqn.2023-10.local.kalishell:srvisci, portal: 192.168.65.90,3260] successful.
En este comando, se utiliza algunas opciones:
- --mode node: Esto especifica iscsiadm para entrar en el modo. Este el modo en el que se puede establecer la conexión real con objetivo node
- --targetname: Esto especifica el nombre del destino tal como se detecta al utilizar el proceso de detección iSCI
- --portal: Esta es la dirección IP y el puerto en el que el destino esta escuchando
- --login: Esto se autentica en el destino y tambien almacenara las credenciales para garantizar que, al reiniciar la conexión se pueda restablecer nuevamente de forma automatica
Después de iniciar sesión, se establece una sesión con el destino iSCSI. Tanto la sesión como la conexión del nodo se pueden monitorizar, utilizando la opción -P
[root@client01 ~]# iscsiadm --mode node -P 1 Target: iqn.2023-10.local.kalishell:srvisci Portal: 192.168.65.90:3260,1 Iface Name: default
Después de realizar la conexión con el destino iSCSI, verá los nuevos dispositivos SCSI que ofrece el destino. Un comando conveniente para enumerar esto. Usaremos el comando lsscsi
[root@client01 ~]# lsscsi [3:0:0:0] cd/dvd NECVMWar VMware SATA CD01 1.00 /dev/sr0 [33:0:0:0] disk LIO-ORG disk-sda 4.0 /dev/sda [N:0:0:1] disk VMware Virtual NVMe Disk__1 /dev/nvme0n1
4. Quitar la conexíon iSCI
para quitar una conexión iSCI y que no se restaure después de un reinicio, primero debemos cerrar la sesión para desconectar la sesión real. Utilizaremos el siguiente comando
[root@client01 ~]# iscsiadm --mode node --targetname iqn.2023-10.local.kalishell:srvisci --portal 192.168.65.90 -u Logging out of session [sid: 1, target: iqn.2023-10.local.kalishell:srvisci, portal: 192.168.65.90,3260] Logout of [sid: 1, target: iqn.2023-10.local.kalishell:srvisci, portal: 192.168.65.90,3260] successful.
A continuación, debe eliminar el subdirectorio IQN correspondiente y todo su contenido. Puede hacer esto con el siguiente comando
[root@client01 ~]# iscsiadm --mode node --targetname iqn.2023-10.local.kalishell:srvisci --portal 192.168.65.90 -o delete
Como formatear y montar un disco iSCI
[root@client01 ~]# fdisk /dev/sda Welcome to fdisk (util-linux 2.32.1). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Command (m for help): n Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions) Select (default p): p Partition number (1-4, default 1): 1 First sector (8192-27262975, default 8192): Last sector, +sectors or +size{K,M,G,T,P} (8192-27262975, default 27262975): Created a new partition 1 of type 'Linux' and of size 13 GiB. Command (m for help): t Selected partition 1 Hex code (type L to list all codes): 8e Changed type of partition 'Linux' to 'Linux LVM'. Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks.
Vamos a crear un vg llamado vg_iscsi-disk de acuerdo a la partición que creamos
[root@client01 ~]# vgcreate vg_isci-disk /dev/sda1
Physical volume "/dev/sda1" successfully created.
Volume group "vg_isci-disk" successfully created
ahora vamos a crear un volumen lógico a partir del vg creado a este volumen lógico le llamaremos lv_iscsi lo crearemos con el siguiente comando
[root@client01 ~]# lvcreate -L +6GB -n lv_iscsi vg_isci-disk
Logical volume "lv_iscsi" created.
Una vez creado el volumen lógico procederemos a darle formato de sistema o filesystem. Esto lo realizaremos con el siguiente comando
[root@client01 ~]# mkfs.xfs /dev/vg_isci-disk/lv_iscsi
meta-data=/dev/vg_isci-disk/lv_iscsi isize=512 agcount=4, agsize=393216 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1 bigtime=0 inobtcount=0
data = bsize=4096 blocks=1572864, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
Ahora vamos a añadir el mapper del volumen lógico el fichero /etc/fstab para su persistencia después de algún reinicio del servidor. Para ello vamos a ver el UUID del disco esto lo vemos con el siguiente comando blkid y el path mapper del volumen logico /dev/mapper/vg_isci--disk-lv_iscsi
[root@client01 ~]# blkid /dev/mapper/vg_isci--disk-lv_iscsi
/dev/mapper/vg_isci--disk-lv_iscsi: UUID="45af1e0d-c5a5-4a4c-9855-ed999675d861" BLOCK_SIZE="512" TYPE="xfs"
# /etc/fstab # Created by anaconda on Sun Oct 22 23:31:03 2023 # # Accessible filesystems, by reference, are maintained under '/dev/disk/'. # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info. # # After editing this file, run 'systemctl daemon-reload' to update systemd # units generated from this file. UUID=45af1e0d-c5a5-4a4c-9855-ed999675d861 /u01 xfs defaults 0 0
Ahora crearemos un directorio llamado u01 en el siguiente path /u01 montaremos el punto de montaje en este directorio tal y como se ve en la siguiente imagen
[root@client01 ~]# mkdir /u01
[root@client01 ~]# systemctl daemon-reload
[root@client01 ~]# mount -a
[root@client01 ~]#
[root@client01 ~]# df -hT Filesystem Type Size Used Avail Use% Mounted on devtmpfs devtmpfs 856M 0 856M 0% /dev tmpfs tmpfs 874M 0 874M 0% /dev/shm tmpfs tmpfs 874M 8.7M 865M 1% /run tmpfs tmpfs 874M 0 874M 0% /sys/fs/cgroup /dev/mapper/rl-root xfs 17G 2.5G 15G 15% / /dev/nvme0n1p1 xfs 1014M 285M 729M 29% /boot tmpfs tmpfs 175M 0 175M 0% /run/user/0 /dev/mapper/vg_isci--disk-lv_iscsi xfs 6.0G 76M 6.0G 2% /u01