Diferencia entre revisiones de «ISCSI»
Sin resumen de edición |
|||
| (No se muestran 22 ediciones intermedias del mismo usuario) | |||
| Línea 1: | Línea 1: | ||
== Introducción == | == Introducción == | ||
El protocolo iSCSI es un protocolo que | El protocolo '''iSCSI''' es un protocolo que proporciona acceso a '''dispositivos de bloques a través de la red''' | ||
utilizando TCP/IP. A diferencia de otros protocolos de compartición de archivos como NFS o Samba, | |||
iSCSI no ofrece ficheros ni directorios, sino acceso directo a dispositivos de bloques completos. | |||
Esto significa que, desde el punto de vista del sistema cliente, el recurso iSCSI se comporta como | |||
un '''disco duro local'''. El dispositivo se presenta en bruto, sin necesidad de tabla de particiones | |||
ni sistema de ficheros, ya que estas tareas quedan bajo el control del cliente que accede al dispositivo. | |||
Una de las características más relevantes de iSCSI es que permite que un mismo dispositivo de bloques | |||
sea accedido de forma simultánea por varios clientes. Aunque esto puede provocar problemas de concurrencia | |||
si no se gestiona adecuadamente (algo que debe resolverse a otro nivel), el protocolo lo soporta de forma nativa. | |||
Todo ello lo convierte en una alternativa mucho más económica frente a tecnologías como Fibre Channel, | |||
manteniendo compatibilidad con la mayoría de sistemas operativos actuales. | |||
El protocolo iSCSI se utiliza habitualmente en '''redes de almacenamiento''', donde se busca aislar el tráfico | |||
de datos y proporcionar un entorno más seguro. Además, iSCSI incorpora sus propios mecanismos de | |||
'''autenticación y control de acceso''', como se verá a lo largo de este laboratorio. | |||
Antes de comenzar con la configuración práctica, es importante familiarizarse con la terminología | |||
básica asociada a este protocolo. | |||
=== Terminología básica === | |||
; Unidad lógica (LUN) | |||
: Dispositivo de bloques que se comparte desde el servidor iSCSI. Puede tratarse de discos duros, | |||
particiones o volúmenes lógicos. | |||
; Target | |||
: Recurso exportado por el servidor iSCSI que contiene una o varias LUN. Un cliente se conecta a un target | |||
mediante una única sesión y puede acceder a todos los dispositivos asociados a él. | |||
; Initiator | |||
: Cliente iSCSI que establece la conexión con el target para acceder a los dispositivos de bloques compartidos. | |||
; Multipath | |||
: Mecanismo que permite garantizar la disponibilidad del dispositivo remoto cuando existen múltiples rutas | |||
entre el initiator y el target. Si una ruta falla, el acceso se mantiene a través de otra. | |||
; IQN | |||
: Identificador único utilizado para nombrar recursos iSCSI. Sigue el formato | |||
<code>iqn.año-mes.dominio_invertido:nombre</code>. | |||
<br /> | |||
Ejemplo: | |||
<code>iqn.2021-02.com.alvarovf:target1</code> | |||
; iSNS | |||
: Protocolo que permite gestionar y descubrir recursos iSCSI de forma centralizada, | |||
de manera similar a Fibre Channel. | |||
== Configuración del almacenamiento SAN == | == Configuración del almacenamiento SAN == | ||
Para simular una cabina de almacenamiento se compartirá un disco mediante iSCSI hacia ambos nodos del clúster Pacemaker. | Para simular una cabina de almacenamiento se compartirá un disco mediante iSCSI hacia ambos nodos del clúster Pacemaker. | ||
=== Instalación de paquetes requeridos === | === Instalación de paquetes requeridos === | ||
| Línea 57: | Línea 60: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
yum --enablerepo=epel install -y | yum --enablerepo=epel install -y scsi-target-utils targetcli policycoreutils-python | ||
scsi-target-utils | |||
targetcli | |||
policycoreutils-python | |||
</syntaxhighlight> | </syntaxhighlight> | ||
=== Configuración del iSCSI Target (targetcli) === | === Configuración del iSCSI Target (targetcli) === | ||
| Línea 75: | Línea 73: | ||
Copyright 2011-2013 by Datera, Inc and others. | Copyright 2011-2013 by Datera, Inc and others. | ||
For help on commands, type 'help'. | For help on commands, type 'help'. | ||
</syntaxhighlight> | |||
Crear el backstore y el target iSCSI: | |||
<syntaxhighlight lang="bash"> | |||
/> cd backstores/fileio | /> cd backstores/fileio | ||
/backstores/fileio> create disk01 /var/lib/iscsi_disks/disk01.img 8G | /backstores/fileio> create disk01 /var/lib/iscsi_disks/disk01.img 8G | ||
Created fileio disk01 with size 8589934592 | Created fileio disk01 with size 8589934592 | ||
/backstores/fileio> cd /iscsi | /backstores/fileio> cd /iscsi | ||
/iscsi> create iqn.2027-04.icecube:storage.target00 | /iscsi> create iqn.2027-04.icecube:storage.target00 | ||
| Línea 85: | Línea 88: | ||
Global pref auto_add_default_portal=true | Global pref auto_add_default_portal=true | ||
Created default portal listening on all IPs (0.0.0.0), port 3260. | Created default portal listening on all IPs (0.0.0.0), port 3260. | ||
</syntaxhighlight> | |||
Crear el LUN y asociarlo al target: | |||
<syntaxhighlight lang="bash"> | |||
/iscsi> cd iqn.2027-04.icecube:storage.target00/tpg1/luns | /iscsi> cd iqn.2027-04.icecube:storage.target00/tpg1/luns | ||
/iscsi/iqn.20...t00/tpg1/luns> create /backstores/fileio/disk01 | /iscsi/iqn.20...t00/tpg1/luns> create /backstores/fileio/disk01 | ||
Created LUN 0. | Created LUN 0. | ||
</syntaxhighlight> | |||
Configurar ACLs y autenticación CHAP: | |||
<syntaxhighlight lang="bash"> | |||
/iscsi/iqn.20...t00/tpg1/luns> cd ../acls | /iscsi/iqn.20...t00/tpg1/luns> cd ../acls | ||
| Línea 102: | Línea 112: | ||
/iscsi/iqn.20...e:www.icecube> set auth password=PASSWORD2020 | /iscsi/iqn.20...e:www.icecube> set auth password=PASSWORD2020 | ||
Parameter password is now 'PASSWORD2020'. | Parameter password is now 'PASSWORD2020'. | ||
</syntaxhighlight> | |||
Salir y guardar la configuración: | |||
<syntaxhighlight lang="bash"> | |||
/iscsi/iqn.20...e:www.icecube> exit | /iscsi/iqn.20...e:www.icecube> exit | ||
Global pref auto_save_on_exit=true | Global pref auto_save_on_exit=true | ||
Configuration saved to /etc/target/saveconfig.json | Configuration saved to /etc/target/saveconfig.json | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== Comprobación del servicio iSCSI === | === Comprobación del servicio iSCSI === | ||
| Línea 159: | Línea 126: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
ss -napt | grep 3260 | |||
[root@icecube ~]# ss -napt | grep 3260 | |||
LISTEN 0 256 *:3260 *:* | |||
[root@icecube ~]# | |||
</syntaxhighlight> | </syntaxhighlight> | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
firewall-cmd --add-service=iscsi-target --permanent | [root@icecube ~]# firewall-cmd --add-service=iscsi-target --permanent | ||
firewall-cmd --reload | success | ||
[root@icecube ~]# firewall-cmd --reload | |||
success | |||
</syntaxhighlight> | </syntaxhighlight> | ||
== Configuración alternativa del Target (tgt) == | == Configuración alternativa del Target (tgt) == | ||
| Línea 176: | Línea 144: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
chcon -R -t tgtd_var_lib_t /var/lib/iscsi_disks | [root@icecube ~]# chcon -R -t tgtd_var_lib_t /var/lib/iscsi_disks | ||
semanage fcontext -a -t tgtd_var_lib_t /var/lib/iscsi_disks | [root@icecube ~]# semanage fcontext -a -t tgtd_var_lib_t /var/lib/iscsi_disks | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| Línea 183: | Línea 151: | ||
<syntaxhighlight lang="ini"> | <syntaxhighlight lang="ini"> | ||
[root@icecube ~]# cat /etc/tgt/targets.conf |grep -v ^# | |||
default-driver iscsi | default-driver iscsi | ||
<target iqn.2027-04.icecube:storage.target00> | <target iqn.2027-04.icecube:storage.target00> | ||
backing-store /var/lib/iscsi_disks/disk01.img | |||
initiator-address 192.168.0.81 | |||
initiator-address 192.168.0.82 | |||
incominguser bonzo PASSWORD2020 | |||
</target> | </target> | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| Línea 196: | Línea 165: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
systemctl start tgtd | [root@icecube ~]# systemctl start tgtd | ||
systemctl enable tgtd | [root@icecube ~]# systemctl enable tgtd | ||
Created symlink from /etc/systemd/system/multi-user.target.wants/tgtd.service to /usr/lib/systemd/system/tgtd.service. | |||
[root@icecube ~]# | |||
</syntaxhighlight> | </syntaxhighlight> | ||
| Línea 203: | Línea 175: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
tgtadm --mode target --op show | [root@icecube ~]# tgtadm --mode target --op show | ||
Target 1: iqn.2027-04.icecube:storage.target00 | |||
System information: | |||
Driver: iscsi | |||
State: ready | |||
I_T nexus information: | |||
LUN information: | |||
LUN: 0 | |||
Type: controller | |||
SCSI ID: IET 00010000 | |||
SCSI SN: beaf10 | |||
Size: 0 MB, Block size: 1 | |||
Online: Yes | |||
Removable media: No | |||
Prevent removal: No | |||
Readonly: No | |||
SWP: No | |||
Thin-provisioning: No | |||
Backing store type: null | |||
Backing store path: None | |||
Backing store flags: | |||
LUN: 1 | |||
Type: disk | |||
SCSI ID: IET 00010001 | |||
SCSI SN: beaf11 | |||
Size: 8590 MB, Block size: 512 | |||
Online: Yes | |||
Removable media: No | |||
Prevent removal: No | |||
Readonly: No | |||
SWP: No | |||
Thin-provisioning: No | |||
Backing store type: rdwr | |||
Backing store path: /var/lib/iscsi_disks/disk01.img | |||
Backing store flags: | |||
Account information: | |||
bonzo | |||
ACL information: | |||
192.168.0.81 | |||
192.168.0.82 | |||
</syntaxhighlight> | </syntaxhighlight> | ||
== Configuración del iSCSI Initiator en los nodos == | == Configuración del iSCSI Initiator en los nodos == | ||
Los siguientes pasos deben ejecutarse en '''todos los nodos del clúster'''. | Los siguientes pasos deben ejecutarse en '''todos los nodos del clúster'''. | ||
=== Instalación de paquetes === | === Instalación de paquetes === | ||
| Línea 221: | Línea 229: | ||
iscsi-initiator-utils | iscsi-initiator-utils | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=== Configuración del iniciador === | === Configuración del iniciador === | ||
| Línea 229: | Línea 235: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
cat /etc/iscsi/initiatorname.iscsi | [root@nodo1 ~]# cat /etc/iscsi/initiatorname.iscsi | ||
InitiatorName=iqn.2027-04.icecube:www.icecube | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Editar el archivo de configuración CHAP: | Editar el archivo de configuración CHAP: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
vim /etc/iscsi/iscsid.conf | [root@nodo1 ~]# vim /etc/iscsi/iscsid.conf | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| Línea 241: | Línea 247: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
grep -i node.session.auth /etc/iscsi/iscsid.conf | grep -v ^# | [root@nodo1 ~]# grep -i node.session.auth /etc/iscsi/iscsid.conf|grep -v ^# | ||
node.session.auth.authmethod = CHAP | |||
node.session.auth.username = bonzo | |||
node.session.auth.password = PASSWORD2020 | |||
</syntaxhighlight> | </syntaxhighlight> | ||
=== Descubrimiento y conexión al target === | === Descubrimiento y conexión al target === | ||
| Línea 251: | Línea 258: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
iscsiadm -m discovery -t sendtargets -p 192.168.0.80 | [root@nodo1 ~]# iscsiadm -m discovery -t sendtargets -p 192.168.0.80 | ||
192.168.0.80:3260,1 iqn.2027-04.icecube:storage.target00 | |||
[root@nodo1 ~]# iscsiadm -m node -o show | |||
# BEGIN RECORD 6.2.0.874-19 | |||
node.name = iqn.2027-04.icecube:storage.target00 | |||
node.tpgt = 1 | |||
node.startup = automatic | |||
node.leading_login = No | |||
iface.hwaddress = <empty> | |||
iface.ipaddress = <empty> | |||
iface.iscsi_ifacename = default | |||
iface.net_ifacename = <empty> | |||
iface.gateway = <empty> | |||
iface.subnet_mask = <empty> | |||
iface.transport_name = tcp | |||
iface.initiatorname = <empty> | |||
iface.state = <empty> | |||
iface.vlan_id = 0 | |||
iface.vlan_priority = 0 | |||
iface.vlan_state = <empty> | |||
iface.iface_num = 0 | |||
iface.mtu = 0 | |||
iface.port = 0 | |||
iface.bootproto = <empty> | |||
iface.dhcp_alt_client_id_state = <empty> | |||
iface.dhcp_alt_client_id = <empty> | |||
iface.dhcp_dns = <empty> | |||
iface.dhcp_learn_iqn = <empty> | |||
iface.dhcp_req_vendor_id_state = <empty> | |||
iface.dhcp_vendor_id_state = <empty> | |||
iface.dhcp_vendor_id = <empty> | |||
iface.dhcp_slp_da = <empty> | |||
iface.fragmentation = <empty> | |||
iface.gratuitous_arp = <empty> | |||
iface.incoming_forwarding = <empty> | |||
iface.tos_state = <empty> | |||
iface.tos = 0 | |||
iface.ttl = 0 | |||
iface.delayed_ack = <empty> | |||
iface.tcp_nagle = <empty> | |||
iface.tcp_wsf_state = <empty> | |||
iface.tcp_wsf = 0 | |||
iface.tcp_timer_scale = 0 | |||
iface.tcp_timestamp = <empty> | |||
iface.redirect = <empty> | |||
iface.def_task_mgmt_timeout = 0 | |||
iface.header_digest = <empty> | |||
iface.data_digest = <empty> | |||
iface.immediate_data = <empty> | |||
iface.initial_r2t = <empty> | |||
iface.data_seq_inorder = <empty> | |||
iface.data_pdu_inorder = <empty> | |||
iface.erl = 0 | |||
iface.max_receive_data_len = 0 | |||
iface.first_burst_len = 0 | |||
iface.max_outstanding_r2t = 0 | |||
iface.max_burst_len = 0 | |||
iface.chap_auth = <empty> | |||
iface.bidi_chap = <empty> | |||
iface.strict_login_compliance = <empty> | |||
iface.discovery_auth = <empty> | |||
iface.discovery_logout = <empty> | |||
node.discovery_address = 192.168.0.80 | |||
node.discovery_port = 3260 | |||
node.discovery_type = send_targets | |||
node.session.initial_cmdsn = 0 | |||
node.session.initial_login_retry_max = 8 | |||
node.session.xmit_thread_priority = -20 | |||
node.session.cmds_max = 128 | |||
node.session.queue_depth = 32 | |||
node.session.nr_sessions = 1 | |||
node.session.auth.authmethod = CHAP | |||
node.session.auth.username = bonzo | |||
node.session.auth.password = ******** | |||
node.session.auth.username_in = <empty> | |||
node.session.auth.password_in = <empty> | |||
node.session.auth.chap_algs = MD5 | |||
node.session.timeo.replacement_timeout = 120 | |||
node.session.err_timeo.abort_timeout = 15 | |||
node.session.err_timeo.lu_reset_timeout = 30 | |||
node.session.err_timeo.tgt_reset_timeout = 30 | |||
node.session.err_timeo.host_reset_timeout = 60 | |||
node.session.iscsi.FastAbort = Yes | |||
node.session.iscsi.InitialR2T = No | |||
node.session.iscsi.ImmediateData = Yes | |||
node.session.iscsi.FirstBurstLength = 262144 | |||
node.session.iscsi.MaxBurstLength = 16776192 | |||
node.session.iscsi.DefaultTime2Retain = 0 | |||
node.session.iscsi.DefaultTime2Wait = 2 | |||
node.session.iscsi.MaxConnections = 1 | |||
node.session.iscsi.MaxOutstandingR2T = 1 | |||
node.session.iscsi.ERL = 0 | |||
node.session.scan = auto | |||
node.conn[0].address = 192.168.0.80 | |||
node.conn[0].port = 3260 | |||
node.conn[0].startup = manual | |||
node.conn[0].tcp.window_size = 524288 | |||
node.conn[0].tcp.type_of_service = 0 | |||
node.conn[0].timeo.logout_timeout = 15 | |||
node.conn[0].timeo.login_timeout = 15 | |||
node.conn[0].timeo.auth_timeout = 45 | |||
node.conn[0].timeo.noop_out_interval = 5 | |||
node.conn[0].timeo.noop_out_timeout = 5 | |||
node.conn[0].iscsi.MaxXmitDataSegmentLength = 0 | |||
node.conn[0].iscsi.MaxRecvDataSegmentLength = 262144 | |||
node.conn[0].iscsi.HeaderDigest = None | |||
node.conn[0].iscsi.IFMarker = No | |||
node.conn[0].iscsi.OFMarker = No | |||
# END RECORD | |||
</syntaxhighlight> | </syntaxhighlight> | ||
| Línea 257: | Línea 373: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
iscsiadm -m node --login | [root@nodo1 ~]# iscsiadm -m node --login | ||
</syntaxhighlight> | </syntaxhighlight> | ||
| Línea 263: | Línea 379: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
iscsiadm -m | [root@nodo1 ~]# iscsiadm -m discovery -t sendtargets -p 192.168.0.80 | ||
192.168.0.80:3260,1 iqn.2027-04.icecube:storage.target00 | |||
</syntaxhighlight> | </syntaxhighlight> | ||
=== Verificación del disco compartido === | === Verificación del disco compartido === | ||
| Línea 273: | Línea 390: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
lsblk | [root@nodo1 ~]# iscsiadm -m session -o show | ||
tcp: [1] 192.168.0.80:3260,1 iqn.2027-04.icecube:storage.target00 (non-flash) | |||
[root@nodo1 ~]# lsblk | |||
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT | |||
sda 8:0 0 10.5G 0 disk | |||
├─sda1 8:1 0 1G 0 part /boot | |||
└─sda2 8:2 0 9.5G 0 part | |||
├─centos-root 253:0 0 8.4G 0 lvm / | |||
└─centos-swap 253:1 0 1G 0 lvm [SWAP] | |||
sdb 8:16 0 8G 0 disk | |||
sr0 11:0 1 1024M 0 rom | |||
</syntaxhighlight> | </syntaxhighlight> | ||
| Línea 279: | Línea 408: | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
pvcreate /dev/sdb | [root@nodo1 ~]# pvcreate /dev/sdb | ||
Physical volume "/dev/sdb" successfully created. | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Revisión actual - 17:48 2 ene 2026
Introducción[editar]
El protocolo iSCSI es un protocolo que proporciona acceso a dispositivos de bloques a través de la red utilizando TCP/IP. A diferencia de otros protocolos de compartición de archivos como NFS o Samba, iSCSI no ofrece ficheros ni directorios, sino acceso directo a dispositivos de bloques completos.
Esto significa que, desde el punto de vista del sistema cliente, el recurso iSCSI se comporta como un disco duro local. El dispositivo se presenta en bruto, sin necesidad de tabla de particiones ni sistema de ficheros, ya que estas tareas quedan bajo el control del cliente que accede al dispositivo.
Una de las características más relevantes de iSCSI es que permite que un mismo dispositivo de bloques sea accedido de forma simultánea por varios clientes. Aunque esto puede provocar problemas de concurrencia si no se gestiona adecuadamente (algo que debe resolverse a otro nivel), el protocolo lo soporta de forma nativa. Todo ello lo convierte en una alternativa mucho más económica frente a tecnologías como Fibre Channel, manteniendo compatibilidad con la mayoría de sistemas operativos actuales.
El protocolo iSCSI se utiliza habitualmente en redes de almacenamiento, donde se busca aislar el tráfico de datos y proporcionar un entorno más seguro. Además, iSCSI incorpora sus propios mecanismos de autenticación y control de acceso, como se verá a lo largo de este laboratorio.
Antes de comenzar con la configuración práctica, es importante familiarizarse con la terminología básica asociada a este protocolo.
Terminología básica[editar]
- Unidad lógica (LUN)
- Dispositivo de bloques que se comparte desde el servidor iSCSI. Puede tratarse de discos duros,
particiones o volúmenes lógicos.
- Target
- Recurso exportado por el servidor iSCSI que contiene una o varias LUN. Un cliente se conecta a un target
mediante una única sesión y puede acceder a todos los dispositivos asociados a él.
- Initiator
- Cliente iSCSI que establece la conexión con el target para acceder a los dispositivos de bloques compartidos.
- Multipath
- Mecanismo que permite garantizar la disponibilidad del dispositivo remoto cuando existen múltiples rutas
entre el initiator y el target. Si una ruta falla, el acceso se mantiene a través de otra.
- IQN
- Identificador único utilizado para nombrar recursos iSCSI. Sigue el formato
iqn.año-mes.dominio_invertido:nombre.
Ejemplo:iqn.2021-02.com.alvarovf:target1
- iSNS
- Protocolo que permite gestionar y descubrir recursos iSCSI de forma centralizada,
de manera similar a Fibre Channel.
Configuración del almacenamiento SAN[editar]
Para simular una cabina de almacenamiento se compartirá un disco mediante iSCSI hacia ambos nodos del clúster Pacemaker.
Instalación de paquetes requeridos[editar]
En el servidor SAN:
yum --enablerepo=epel install -y scsi-target-utils targetcli policycoreutils-python
Configuración del iSCSI Target (targetcli)[editar]
Acceder a la consola de configuración:
[root@icecube ~]# targetcli
Warning: Could not load preferences file /root/.targetcli/prefs.bin.
targetcli shell version 2.1.53
Copyright 2011-2013 by Datera, Inc and others.
For help on commands, type 'help'.
Crear el backstore y el target iSCSI:
/> cd backstores/fileio
/backstores/fileio> create disk01 /var/lib/iscsi_disks/disk01.img 8G
Created fileio disk01 with size 8589934592
/backstores/fileio> cd /iscsi
/iscsi> create iqn.2027-04.icecube:storage.target00
Created target iqn.2027-04.icecube:storage.target00.
Created TPG 1.
Global pref auto_add_default_portal=true
Created default portal listening on all IPs (0.0.0.0), port 3260.
Crear el LUN y asociarlo al target:
/iscsi> cd iqn.2027-04.icecube:storage.target00/tpg1/luns
/iscsi/iqn.20...t00/tpg1/luns> create /backstores/fileio/disk01
Created LUN 0.
Configurar ACLs y autenticación CHAP:
/iscsi/iqn.20...t00/tpg1/luns> cd ../acls
/iscsi/iqn.20...t00/tpg1/acls> create iqn.2027-04.icecube:www.icecube
Created Node ACL for iqn.2027-04.icecube:www.icecube
Created mapped LUN 0.
/iscsi/iqn.20...t00/tpg1/acls> cd iqn.2027-04.icecube:www.icecube
/iscsi/iqn.20...e:www.icecube> set auth userid=bonzo
Parameter userid is now 'bonzo'.
/iscsi/iqn.20...e:www.icecube> set auth password=PASSWORD2020
Parameter password is now 'PASSWORD2020'.
Salir y guardar la configuración:
/iscsi/iqn.20...e:www.icecube> exit
Global pref auto_save_on_exit=true
Configuration saved to /etc/target/saveconfig.json
Comprobación del servicio iSCSI[editar]
Verificar que el puerto iSCSI está en escucha:
[root@icecube ~]# ss -napt | grep 3260
LISTEN 0 256 *:3260 *:*
[root@icecube ~]#
[root@icecube ~]# firewall-cmd --add-service=iscsi-target --permanent
success
[root@icecube ~]# firewall-cmd --reload
success
Configuración alternativa del Target (tgt)[editar]
Ajustar contextos SELinux:
[root@icecube ~]# chcon -R -t tgtd_var_lib_t /var/lib/iscsi_disks
[root@icecube ~]# semanage fcontext -a -t tgtd_var_lib_t /var/lib/iscsi_disks
Configurar el archivo /etc/tgt/targets.conf:
[root@icecube ~]# cat /etc/tgt/targets.conf |grep -v ^#
default-driver iscsi
<target iqn.2027-04.icecube:storage.target00>
backing-store /var/lib/iscsi_disks/disk01.img
initiator-address 192.168.0.81
initiator-address 192.168.0.82
incominguser bonzo PASSWORD2020
</target>
Iniciar y habilitar el servicio:
[root@icecube ~]# systemctl start tgtd
[root@icecube ~]# systemctl enable tgtd
Created symlink from /etc/systemd/system/multi-user.target.wants/tgtd.service to /usr/lib/systemd/system/tgtd.service.
[root@icecube ~]#
Verificación del target:
[root@icecube ~]# tgtadm --mode target --op show
Target 1: iqn.2027-04.icecube:storage.target00
System information:
Driver: iscsi
State: ready
I_T nexus information:
LUN information:
LUN: 0
Type: controller
SCSI ID: IET 00010000
SCSI SN: beaf10
Size: 0 MB, Block size: 1
Online: Yes
Removable media: No
Prevent removal: No
Readonly: No
SWP: No
Thin-provisioning: No
Backing store type: null
Backing store path: None
Backing store flags:
LUN: 1
Type: disk
SCSI ID: IET 00010001
SCSI SN: beaf11
Size: 8590 MB, Block size: 512
Online: Yes
Removable media: No
Prevent removal: No
Readonly: No
SWP: No
Thin-provisioning: No
Backing store type: rdwr
Backing store path: /var/lib/iscsi_disks/disk01.img
Backing store flags:
Account information:
bonzo
ACL information:
192.168.0.81
192.168.0.82
Configuración del iSCSI Initiator en los nodos[editar]
Los siguientes pasos deben ejecutarse en todos los nodos del clúster.
Instalación de paquetes[editar]
yum --enablerepo=epel install -y \
scsi-target-utils \
iscsi-initiator-utils
Configuración del iniciador[editar]
Comprobar el IQN del iniciador:
[root@nodo1 ~]# cat /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2027-04.icecube:www.icecube
Editar el archivo de configuración CHAP:
[root@nodo1 ~]# vim /etc/iscsi/iscsid.conf
Verificar parámetros de autenticación:
[root@nodo1 ~]# grep -i node.session.auth /etc/iscsi/iscsid.conf|grep -v ^#
node.session.auth.authmethod = CHAP
node.session.auth.username = bonzo
node.session.auth.password = PASSWORD2020
Descubrimiento y conexión al target[editar]
Descubrir targets disponibles:
[root@nodo1 ~]# iscsiadm -m discovery -t sendtargets -p 192.168.0.80
192.168.0.80:3260,1 iqn.2027-04.icecube:storage.target00
[root@nodo1 ~]# iscsiadm -m node -o show
# BEGIN RECORD 6.2.0.874-19
node.name = iqn.2027-04.icecube:storage.target00
node.tpgt = 1
node.startup = automatic
node.leading_login = No
iface.hwaddress = <empty>
iface.ipaddress = <empty>
iface.iscsi_ifacename = default
iface.net_ifacename = <empty>
iface.gateway = <empty>
iface.subnet_mask = <empty>
iface.transport_name = tcp
iface.initiatorname = <empty>
iface.state = <empty>
iface.vlan_id = 0
iface.vlan_priority = 0
iface.vlan_state = <empty>
iface.iface_num = 0
iface.mtu = 0
iface.port = 0
iface.bootproto = <empty>
iface.dhcp_alt_client_id_state = <empty>
iface.dhcp_alt_client_id = <empty>
iface.dhcp_dns = <empty>
iface.dhcp_learn_iqn = <empty>
iface.dhcp_req_vendor_id_state = <empty>
iface.dhcp_vendor_id_state = <empty>
iface.dhcp_vendor_id = <empty>
iface.dhcp_slp_da = <empty>
iface.fragmentation = <empty>
iface.gratuitous_arp = <empty>
iface.incoming_forwarding = <empty>
iface.tos_state = <empty>
iface.tos = 0
iface.ttl = 0
iface.delayed_ack = <empty>
iface.tcp_nagle = <empty>
iface.tcp_wsf_state = <empty>
iface.tcp_wsf = 0
iface.tcp_timer_scale = 0
iface.tcp_timestamp = <empty>
iface.redirect = <empty>
iface.def_task_mgmt_timeout = 0
iface.header_digest = <empty>
iface.data_digest = <empty>
iface.immediate_data = <empty>
iface.initial_r2t = <empty>
iface.data_seq_inorder = <empty>
iface.data_pdu_inorder = <empty>
iface.erl = 0
iface.max_receive_data_len = 0
iface.first_burst_len = 0
iface.max_outstanding_r2t = 0
iface.max_burst_len = 0
iface.chap_auth = <empty>
iface.bidi_chap = <empty>
iface.strict_login_compliance = <empty>
iface.discovery_auth = <empty>
iface.discovery_logout = <empty>
node.discovery_address = 192.168.0.80
node.discovery_port = 3260
node.discovery_type = send_targets
node.session.initial_cmdsn = 0
node.session.initial_login_retry_max = 8
node.session.xmit_thread_priority = -20
node.session.cmds_max = 128
node.session.queue_depth = 32
node.session.nr_sessions = 1
node.session.auth.authmethod = CHAP
node.session.auth.username = bonzo
node.session.auth.password = ********
node.session.auth.username_in = <empty>
node.session.auth.password_in = <empty>
node.session.auth.chap_algs = MD5
node.session.timeo.replacement_timeout = 120
node.session.err_timeo.abort_timeout = 15
node.session.err_timeo.lu_reset_timeout = 30
node.session.err_timeo.tgt_reset_timeout = 30
node.session.err_timeo.host_reset_timeout = 60
node.session.iscsi.FastAbort = Yes
node.session.iscsi.InitialR2T = No
node.session.iscsi.ImmediateData = Yes
node.session.iscsi.FirstBurstLength = 262144
node.session.iscsi.MaxBurstLength = 16776192
node.session.iscsi.DefaultTime2Retain = 0
node.session.iscsi.DefaultTime2Wait = 2
node.session.iscsi.MaxConnections = 1
node.session.iscsi.MaxOutstandingR2T = 1
node.session.iscsi.ERL = 0
node.session.scan = auto
node.conn[0].address = 192.168.0.80
node.conn[0].port = 3260
node.conn[0].startup = manual
node.conn[0].tcp.window_size = 524288
node.conn[0].tcp.type_of_service = 0
node.conn[0].timeo.logout_timeout = 15
node.conn[0].timeo.login_timeout = 15
node.conn[0].timeo.auth_timeout = 45
node.conn[0].timeo.noop_out_interval = 5
node.conn[0].timeo.noop_out_timeout = 5
node.conn[0].iscsi.MaxXmitDataSegmentLength = 0
node.conn[0].iscsi.MaxRecvDataSegmentLength = 262144
node.conn[0].iscsi.HeaderDigest = None
node.conn[0].iscsi.IFMarker = No
node.conn[0].iscsi.OFMarker = No
# END RECORD
Iniciar sesión:
[root@nodo1 ~]# iscsiadm -m node --login
Verificar la sesión activa:
[root@nodo1 ~]# iscsiadm -m discovery -t sendtargets -p 192.168.0.80
192.168.0.80:3260,1 iqn.2027-04.icecube:storage.target00
Verificación del disco compartido[editar]
Comprobar que el nuevo disco aparece en el sistema:
[root@nodo1 ~]# iscsiadm -m session -o show
tcp: [1] 192.168.0.80:3260,1 iqn.2027-04.icecube:storage.target00 (non-flash)
[root@nodo1 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 10.5G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 9.5G 0 part
├─centos-root 253:0 0 8.4G 0 lvm /
└─centos-swap 253:1 0 1G 0 lvm [SWAP]
sdb 8:16 0 8G 0 disk
sr0 11:0 1 1024M 0 rom
Inicializar el disco como volumen físico:
[root@nodo1 ~]# pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created.