Cómo configurar un servidor de almacenamiento iSCSI en Ubuntu
iSCSI (Internet Small Computer System Interface) es un protocolo de Red de Área de Almacenamiento (SAN) que puede utilizarse para la gestión del almacenamiento en línea. Es un estándar de red de almacenamiento basado en IP que proporciona acceso a nivel de bloque a los dispositivos de almacenamiento transportando comandos SCSI a través de una red TCP/IP.
iSCSI consta de dos componentes: el objetivo iSCSI y el iniciador iSCSI. El objetivo iSCSI es un servicio del servidor iSCSI que ofrece acceso al almacenamiento compartido, y el iniciador iSCSI es un cliente iSCSI que se conecta al objetivo y accede al almacenamiento compartido.
En este tutorial, te mostraremos cómo configurar el objetivo iSCSI y el iniciador iSCSI en un servidor Ubuntu 18.04.
Requisitos
- Un servidor Ubuntu 18.04 nuevo para el objetivo iSCSI con un disco duro externo de 2 GB.
- Un servidor Ubuntu 18.04 nuevo para el iniciador iSCSI.
- Se ha configurado una dirección IP estática 192.168.0.103 en el objetivo iSCSI y 192.168.0.102 en el iniciador iSCSI.
- En ambos servidores se ha configurado una contraseña de root.
Cómo empezar
Antes de empezar, tendrás que actualizar ambos servidores con la última versión. Puedes actualizarlos ejecutando el siguiente comando en ambos $
apt-get update -y apt-get upgrade -y
Una vez actualizados ambos servidores reinícialos para aplicar los cambios.
Instalar el Objetivo iSCSI
En primer lugar, tendrás que instalar el paquete Target Framework (TGT) en el servidor de destino iSCSI. Puedes instalarlo con el siguiente comando:
apt-get install tgt -y
Una vez instalado TGT, comprueba el estado de TGT ejecutando el siguiente comando:
systemctl status tgt
Deberías ver la siguiente salida:
? tgt.service - (i)SCSI target daemon Loaded: loaded (/lib/systemd/system/tgt.service; enabled; vendor preset: enabled) Active: active (running) since Fri 2019-11-08 07:40:28 UTC; 27s ago Docs: man:tgtd(8) Main PID: 2343 (tgtd) Status: "Starting event loop..." Tasks: 1 CGroup: /system.slice/tgt.service ??2343 /usr/sbin/tgtd -f Nov 08 07:40:28 ubuntu systemd[1]: Starting (i)SCSI target daemon... Nov 08 07:40:28 ubuntu tgtd[2343]: tgtd: iser_ib_init(3431) Failed to initialize RDMA; load kernel modules? Nov 08 07:40:28 ubuntu tgtd[2343]: tgtd: work_timer_start(146) use timer_fd based scheduler Nov 08 07:40:28 ubuntu tgtd[2343]: tgtd: bs_init(387) use signalfd notification Nov 08 07:40:28 ubuntu systemd[1]: Started (i)SCSI target daemon.
Una vez hecho esto, puedes pasar al siguiente paso.
Configurar el objetivo iSCSI
A continuación, tendrás que crear un dispositivo LUN (Logical Unit Number) en tu servidor iSCSI. El LUN es un dispositivo de almacenamiento backend al que se conectará y utilizará posteriormente el iniciador.
Puedes hacerlo creando el archivo de configuración dentro del directorio /etc/tgt/conf.d:
nano /etc/tgt/conf.d/iscsi.conf
Añade las siguientes líneas:
<target iqn.2019-11.example.com:lun1> # Provided device as an iSCSI target backing-store /dev/sdb1 initiator-address 192.168.0.102 incominguser iscsi-user password outgoinguser iscsi-target secretpass </target>
Guarda y cierra el archivo cuando hayas terminado. A continuación, reinicia el servicio TGT para aplicar los cambios de configuración:
systemctl restart tgt
He aquí una breve explicación de cada parámetro:
target: Es el nombre del objetivo concreto.
backing-store: Esta opción especifica el disco de almacenamiento que utilizará el iniciador.
dirección del inici ador : Es la dirección IP del iniciador.
incominguser: Este es el nombre de usuario/contraseña de entrada para asegurar el LUN.
outgoinguser: Es el nombre de usuario/contraseña de salida para la autenticación mutua CHAP.
Tras reiniciar el servicio TGT, comprueba el servidor de destino iSCSI con el siguiente comando:
tgtadm --mode target --op show
Deberías ver que el objetivo iSCSI está disponible:
Target 1: iqn.2019-11.example.com:lun1 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: 2146 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: /dev/sdb1 Backing store flags: Account information: iscsi-user iscsi-target (outgoing) ACL information: 192.168.0.102
Instalar y configurar el iniciador iSCSI
A continuación, tendrás que instalar el paquete del iniciador iSCSI en el servidor del iniciador iSCSI. Puedes instalarlo con el siguiente comando:
apt-get install open-iscsi -y
Una vez completada la instalación, ejecuta la detección de objetivos en nuestro servidor de objetivos iSCSI para averiguar los objetivos compartidos.
iscsiadm -m discovery -t st -p 192.168.0.103
Deberías ver los objetivos disponibles en la siguiente salida:
192.168.0.103:3260,1 iqn.2019-11.example.com:lun1
El comando anterior también genera dos archivos con información LUN. Puedes verlos con el siguiente comando:
ls -l /etc/iscsi/nodes/iqn.2019-11.example.com\:lun1/192.168.0.103\,3260\,1/ /etc/iscsi/send_targets/192.168.0.103,3260/
Deberías ver los siguientes archivos:
/etc/iscsi/nodes/iqn.2019-11.example.com:lun1/192.168.0.103,3260,1/: total 4 -rw------- 1 root root 1840 Nov 8 13:17 default /etc/iscsi/send_targets/192.168.0.103,3260/: total 8 lrwxrwxrwx 1 root root 66 Nov 8 13:17 iqn.2019-11.example.com:lun1,192.168.0.103,3260,1,default -> /etc/iscsi/nodes/iqn.2019-11.example.com:lun1/192.168.0.103,3260,1 -rw------- 1 root root 547 Nov 8 13:17 st_config
A continuación, tendrás que editar el archivo predeterminado y definir la información CHAP que has configurado en el objetivo iSCSI para acceder al objetivo iSCSI desde el iniciador iSCSI.
nano /etc/iscsi/nodes/iqn.2019-11.example.com\:lun1/192.168.0.103\,3260\,1/default
Añade / Cambia las siguientes líneas:
node.session.auth.authmethod = CHAP node.session.auth.username = iscsi-user node.session.auth.password = password node.session.auth.username_in = iscsi-target node.session.auth.password_in = secretpass node.startup = automatic
Guarda y cierra el archivo cuando hayas terminado. A continuación, reinicia el servicio del iniciador iSCSI para aplicar los cambios de configuración:
systemctl restart open-iscsi
Deberías ver la siguiente salida:
* Unmounting iscsi-backed filesystems [ OK ] * Disconnecting iSCSI targets iscsiadm: No matching sessions found [ OK ] * Stopping iSCSI initiator service [ OK ] * Starting iSCSI initiator service iscsid [ OK ] * Setting up iSCSI targets Logging in to [iface: default, target: iqn.2019-11.example.com:lun1, portal: 192.168.0.103,3260] (multiple) Login to [iface: default, target: iqn.2019-11.example.com:lun1, portal: 192.168.0.103,3260] successful. [ OK ] * Mounting network filesystems [ OK ]
Ahora puedes comprobar el disco de almacenamiento compartido desde el objetivo iSCSI con el siguiente comando:
lsblk
Deberías ver que el disco de almacenamiento está ahora disponible para el iniciador como sdb:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 465.8G 0 disk ??sda1 8:1 0 93.1G 0 part / ??sda2 8:2 0 1K 0 part ??sda5 8:5 0 186.3G 0 part /home ??sda6 8:6 0 181.6G 0 part /Data ??sda7 8:7 0 4.8G 0 part [SWAP] sdb 8:16 0 2G 0 disk
También puedes verificar las conexiones iSCSI con el siguiente comando:
tgtadm --mode conn --op show --tid 1
Deberías obtener la siguiente salida:
Session: 1 Connection: 0 Initiator: iqn.1993-08.org.debian:01:2e1e2383de41 IP Address: 192.168.0.102
A continuación, tendrás que crear un sistema de archivos en este dispositivo compartido (sdb) y montarlo para que este dispositivo sea utilizable.
En primer lugar, crea un sistema de archivos en el dispositivo compartido (sdb) con el siguiente comando:
fdisk /dev/sdb
Deberías ver la siguiente salida:
Welcome to fdisk (util-linux 2.31.1). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Device does not contain a recognized partition table. Created a new DOS disklabel with disk identifier 0x06091fe8. 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): First sector (2048-4194303, default 2048): Last sector, +sectors or +size{K,M,G,T,P} (2048-4194303, default 4194303): Created a new partition 1 of type 'Linux' and of size 2 GiB. Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks.
A continuación, formatea esta partición con el siguiente comando:
mkfs.ext4 /dev/sdb1
A continuación, monta esta partición en el directorio /mnt con el siguiente comando:
mount /dev/sdb1 /mnt
Ahora, puedes comprobar el dispositivo montado con el siguiente comando:
df -h
Deberías ver la siguiente salida:
Filesystem Size Used Avail Use% Mounted on udev 1.9G 4.0K 1.9G 1% /dev tmpfs 384M 1.2M 383M 1% /run /dev/sda1 92G 36G 51G 42% / none 4.0K 0 4.0K 0% /sys/fs/cgroup none 5.0M 0 5.0M 0% /run/lock none 1.9G 54M 1.9G 3% /run/shm none 100M 48K 100M 1% /run/user /dev/sda5 184G 96G 79G 55% /home /dev/sda6 179G 32G 138G 19% /Data /dev/sdb1 2.0G 3.0M 1.9G 1% /mnt
Enhorabuena! has instalado correctamente el servidor de destino iSCSI y lo has conectado desde el iniciador iSCSI. Ahora puedes utilizar este dispositivo iSCSI compartido como disco adjunto normal.