Edición de «
ISCSI
»
De jagfloriano.com
Ir a la navegación
Ir a la búsqueda
Advertencia:
no has iniciado sesión. Tu dirección IP se hará pública si haces cualquier edición. Si
inicias sesión
o
creas una cuenta
, tus ediciones se atribuirán a tu nombre de usuario, además de otros beneficios.
Comprobación antispam. ¡
No
rellenes esto!
== Introducción == 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 == Para simular una cabina de almacenamiento se compartirá un disco mediante iSCSI hacia ambos nodos del clúster Pacemaker. --- === Instalación de paquetes requeridos === En el servidor SAN: <syntaxhighlight lang="bash"> yum --enablerepo=epel install -y \ scsi-target-utils \ targetcli \ policycoreutils-python </syntaxhighlight> --- === Configuración del iSCSI Target (targetcli) === Acceder a la consola de configuración: <syntaxhighlight lang="bash"> [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'. </syntaxhighlight> Crear el backstore y el target iSCSI: <syntaxhighlight lang="bash"> /> 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. </syntaxhighlight> Crear el LUN y asociarlo al target: <syntaxhighlight lang="bash"> /iscsi> cd iqn.2027-04.icecube:storage.target00/tpg1/luns /iscsi/iqn.20...t00/tpg1/luns> create /backstores/fileio/disk01 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/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'. </syntaxhighlight> Salir y guardar la configuración: <syntaxhighlight lang="bash"> /iscsi/iqn.20...e:www.icecube> exit Global pref auto_save_on_exit=true Configuration saved to /etc/target/saveconfig.json </syntaxhighlight> --- === Comprobación del servicio iSCSI === Verificar que el puerto iSCSI está en escucha: <syntaxhighlight lang="bash"> [root@icecube ~]# ss -napt | grep 3260 LISTEN 0 256 *:3260 *:* [root@icecube ~]# </syntaxhighlight> <syntaxhighlight lang="bash"> [root@icecube ~]# firewall-cmd --add-service=iscsi-target --permanent success [root@icecube ~]# firewall-cmd --reload success </syntaxhighlight> --- == Configuración alternativa del Target (tgt) == Ajustar contextos SELinux: <syntaxhighlight lang="bash"> [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 </syntaxhighlight> Configurar el archivo <code>/etc/tgt/targets.conf</code>: <syntaxhighlight lang="ini"> [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> </syntaxhighlight> Iniciar y habilitar el servicio: <syntaxhighlight lang="bash"> [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 ~]# </syntaxhighlight> Verificación del target: <syntaxhighlight lang="bash"> [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> --- == Configuración del iSCSI Initiator en los nodos == Los siguientes pasos deben ejecutarse en '''todos los nodos del clúster'''. --- === Instalación de paquetes === <syntaxhighlight lang="bash"> yum --enablerepo=epel install -y \ scsi-target-utils \ iscsi-initiator-utils </syntaxhighlight> --- === Configuración del iniciador === Comprobar el IQN del iniciador: <syntaxhighlight lang="bash"> [root@nodo1 ~]# cat /etc/iscsi/initiatorname.iscsi InitiatorName=iqn.2027-04.icecube:www.icecube </syntaxhighlight> Editar el archivo de configuración CHAP: <syntaxhighlight lang="bash"> [root@nodo1 ~]# vim /etc/iscsi/iscsid.conf </syntaxhighlight> Verificar parámetros de autenticación: <syntaxhighlight lang="bash"> [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> --- === Descubrimiento y conexión al target === Descubrir targets disponibles: <syntaxhighlight lang="bash"> [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> Iniciar sesión: <syntaxhighlight lang="bash"> [root@nodo1 ~]# iscsiadm -m node --login </syntaxhighlight> Verificar la sesión activa: <syntaxhighlight lang="bash"> [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> --- === Verificación del disco compartido === Comprobar que el nuevo disco aparece en el sistema: <syntaxhighlight lang="bash"> [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> Inicializar el disco como volumen físico: <syntaxhighlight lang="bash"> [root@nodo1 ~]# pvcreate /dev/sdb Physical volume "/dev/sdb" successfully created. </syntaxhighlight> ---
Resumen:
Ten en cuenta que todas las contribuciones a jagfloriano.com pueden ser editadas, modificadas o eliminadas por otros colaboradores. Si no deseas que las modifiquen sin limitaciones, no las publiques aquí.
Al mismo tiempo, asumimos que eres el autor de lo que escribiste, o lo copiaste de una fuente en el dominio público o con licencia libre (véase
Jagfloriano.com:Derechos de autor
para más detalles).
¡No uses textos con copyright sin permiso!
Cancelar
Ayuda de edición
(se abre en una ventana nueva)
Menú de navegación
Acciones de página
Página
Discusión
Leer
Editar
Historial
Page actions
Página
Discusión
Más
Herramientas
Herramientas personales
No has accedido
Discusión
Contribuciones
Crear una cuenta
Acceder
Navegación
Página principal
Linux
Ansible
Labs
Buscar
Herramientas
Lo que enlaza aquí
Cambios relacionados
Páginas especiales
Información de la página