Configurar un iSCSI Storage Server se convirtió en una necesidad para poder armar mi cluster de Raspberries sin tener que estar dependiendo de las MicroSD y la taza de falla que tiene este medio cuando se lo usa como rootfs. Usar discos por USB era una opción pero me encarecía la solución y aumentaba la cantidad de cables y puntos de falla dando vueltas.
iSCSI (Abreviatura de Internet SCSI) es un estándar que permite el uso del protocolo SCSI sobre redes TCP/IP. iSCSI es un protocolo de la capa de transporte definido en las especificaciones SCSI-3. Otros protocolos en la capa de transporte son SCSI Parallel Interface y canal de fibra.
La adopción del iSCSI en entornos de producción corporativos se ha acelerado en estos momentos gracias al aumento del Gigabit Ethernet. La fabricación de almacenamientos basados en iSCSI (red de área de almacenamiento) es menos costosa y está resultando una alternativa a las soluciones SAN basadas en Canal de fibra.
Procedimiento:
La previa – Configurar unidad con lvm:
Utilizar LVM nos va a permitir compartimentar el disco y poder extender la partición en forma dinámica. Y van a ser volúmenes lógicos los que voy a exponer como «tartget» de nuestro iSCSI Storage Server.
El primer paso es generar las particiones para configurar LVM en el disco nuevo. En mi caso el disco es un ssd de 256gb. En mi caso es el /dev/sda (mi disco primario es el /dev/nvme0n1).
Para confirmas que es el disco nuevo vamos a ejecutar el siguiente comando:
sudo parted -l
El siguiente paso es crear la partición para el lvm. Esto lo realizamos con el comando «parted» también.
sudo parted /dev/sda
Y dentro de la consola de «parted» ejecutamos los siguientes comandos. Vean la captura de pantalla de referencia.
< mkpasrt iSCSI 0% 100% < p < set 1 lvm on < p < quit
Finalizado el paso procedemos a crear el grupo de volúmenes que van a tener los volúmenes lógicos.
sudo vgcreate vg_iscsi /dev/sda1
Podemos verificar la creación ejecutando el comando:
sudo vgdisplay
Con el grupo de volúmenes creado podemos ahora crear el volumen lógico. A este volumen lo voy a llamar rbpi3-003 porque lo voy a usar con mi 3er Raspberry PI 3.
sudo lvcreate -L 50G vg_iscsi -n lv_rbpi3-003 sudo lvdisplay
De esta pantalla tengo que resguardar es «/dev/vg_iscsi/lv_rbpi3-003«.
Instalación de iSCSI Target:
Ahora procedo a instar el paquete tgt (Linux SCSI target user-space daemon and tools). Como siempre me aseguro de tener el sistema actualizado antes.
sudo apt update && sudo apt full-upgrade -y
sudo apt install tgt -y
Vamos a verificar que tgt este corriendo correctamente..
Ahora procedo a configurar el target que voy a exponer. Creo el archivo con un nombre descriptivo para que después esto en el futuro sea sostenible.
sudo vi /etc/tgt/conf.d/target-lv-iscsi-rbpi3-003.conf
Dentro de archivo defino:
- El nombre del target lo definí como «alphaprime.sismonda.local:rbpi3-003«.
- El storage como «/dev/vg_iscsi/lv_rbpi3-003» dato que obtengo de la ejecución «lvdisplay«.
- Las direcciones ip que permito acceder son la «10.0.0.10» y «10.0.0.33».
- El usuario definido es «Usuario«
- El passowrd definido es «SuperSecreto«.
<target alphaprime.sismonda.local:rbpi3-003> backing-store /dev/vg_iscsi/lv_rbpi3-003 initiator-address 10.0.0.10 initiator-address 10.0.0.33 incominguser Usuario SuperSecreto </target>
A continuación recargo la configuración de servicio «tgt» para que tome los cambios.
systemctl reload tgt.service
Confirmamos que quedó expuesto nuestro target ejecutando el comando:
sudo tgtadm --mode target --op show
Donde se visualiza en la «LUN 1» el dispositivo que se comparte y las ip’s que tiene permisos para acceder.
Con esto podemos dar por finalizada la configuración de nuestro iSCSI Storage Server.
Configuración del cliente de nuestro iSCSI Storage Server
El primer paso a realizar es instalar las utilidades necesarias para acceder a unidades iSCSI.
sudo apt update && sudo apt full-upgrade -y sudo apt install open-iscsi
El siguiente paso es revisar que targets nos expone nuestro iSCSI Storage Server a la ip del cliente. En este caso la ip de mi servidor es la «10.0.0.1«.
sudo iscsiadm -m discovery -t sendtargets -p 10.0.0.1
Para poder establecer la conexión debemos ejecutar los siguientes comandos. Pongo en negrita los datos que son específicos de cada instancia.
sudo iscsiadm --mode node -T "alphaprime.sismonda.local:rbpi3-003" -p 10.0.0.1:3260 --op=update --name node.session.auth.authmethod --value=CHAP sudo iscsiadm --mode node -T "alphaprime.sismonda.local:rbpi3-003" -p 10.0.0.1:3260 --op=update --name node.session.auth.username --value=Usuario sudo iscsiadm --mode node -T "alphaprime.sismonda.local:rbpi3-003" -p 10.0.0.1:3260 --op=update --name node.session.auth.password --value=SuperSecreto sudo iscsiadm --mode node -T "alphaprime.sismonda.local:rbpi3-003" -p 10.0.0.1:3260 --login
Para saber que dispositivo fue el asignado para el destino iSCSI podemos ejecutar el siguiente comando:
dmesg |tail -n 11
Como la unidad esta sin formatea proceso a formatearla en ‘ext4‘ y montarla en el directorio ‘/mnt/iSCSI‘
sudo mkfs.ext4 /dev/sdb sudo mkdir -p /mnt/iSCSI sudo mount /dev/sdb /mnt/iSCSI
Verificamos que este montado ejecutando el comando:
mount |grep iSCSI
Si se quiere remover la unidad se deben ejecutar los siguientes comandos.
sudo umount /mnt/iSCSI sudo iscsiadm --mode node -T "alphaprime.sismonda.local:rbpi3-003" -p 10.0.0.1:3260 -u sudo iscsiadm --mode node -T "alphaprime.sismonda.local:rbpi3-003" -p 10.0.0.1:3260 -o delete