lunes, 11 de mayo de 2015

Configuración SAN SWITCH - Proyecto - SAN (Storage Area Network)

Configuración "Switch Fabric" - Proyecto - SAN (Storage Area Network)




Storage Area Networks (SAN) es una tecnología consolidad de un coste de implementación muy inferior si comparamos con algunos años atrás.
En la actualidad es empleada en Startup's como unidad centralizada de datos. Unidades lógicas ofrecidas directamente sin formato previo sobre FC o ethernet. A diferencia de las NAS que previamente se tenían que presentar como NFS o CIFS. Además en estas útimas de pedía un fichero y ahora se puede pedir un bloque (disco entero).

En el artículo anterior habíamos configurado un ejemplo de unidad presentado utilizado la red mediante el protocolo iSCSI encapsulado dentro de IP.

Como información adicional el protocolo iSCSI se puede implementar como medida de seguridad para evitar ataques MitM utilizado IPSEC. Hablaremos más tarde en otro artículo para implementar este tipo de configuración.

Regresando a la topología que teníamos vamos a realizar otra modificación y esta vez añadiremos un switch de fibra. Más adelante configurareos una Fabria de switch para añadir alta disponibilidad en la arquitectura.
 






El swith de fibra utilizado es de la marca: HP modelo: StorageWorks 4/8 SAN switch. En este escenario la configuración es muy simple. Se configura una zona con los intervinientes. Los únicos actores en esta configuración es un servidor (SRV-ANUBIS) Ubuntu 14.04.2 LTS como cliente y un servidor SAN.


swd77:root> aliCreate HBA_SRV_SAN, 21:01:00:1b:32:ad:0c:f3
swd77:root> aliCreate HBA_SRV_ANUBIS, 21:01:00:1b:32:29:bd:74
swd77:root> zoneCreate "SAN", "HBA_SRV_SAN; HBA_SRV_ANUBIS"
swd77:root>
swd77:root>
swd77:root> cfgDisable

No effective configuration found.
swd77:root> cfgshow
Defined configuration:
 zone:    SAN    HBA_SRV_SAN; HBA_SRV_ANUBIS
 alias:    HBA_SRV_ANUBIS   
        21:01:00:1b:32:29:bd:74
 alias:    HBA_SRV_SAN   
        21:01:00:1b:32:ad:0c:f3

Effective configuration:
 no configuration in effect
 
 swd77:root> cfgcreate SAN_CFG, "SAN"
swd77:root> cfgenable SAN_CFG
You are about to enable a new zoning configuration.
This action will replace the old zoning configuration with the
current configuration selected.
Do you want to enable 'SAN_CFG' configuration  (yes, y, no, n): [no] y
zone config "SAN_CFG" is in effect
Updating flash ...
swd77:root> 


Teníamos previamente creado en el backstore un objeto que utilizaremos:

/backstores/iblock/ create name=SRV-OSIRIS dev=/dev/sda3

Entramos en targetcli y realizamos esta configuración:

/qla2xxx create 21:01:00:1b:32:ad:0c:f3
/qla2xxx/21:00:00:1b:32:8d:0c:f3/acls/ create 21:01:00:1b:32:29:bd:74
luns/ create /backstores/iblock/SRV-OSIRIS 

En esta configuración creamos en el segunto puerto de fibra una LUN con un ACL.

Configuración global:


 Una vez realizada la configuración en targetcli la LUN es presentada al servidor automáticamente, los cables del servidor al switch y del SAN al switch tienen son cruzados.

En este tipo de arquitectura la seguridad es importante y  hay que controlar los accesos, para esto se utilizan los WWN (World Wide Name). Los dos tipos de WWN son WWPN (World Wide Port Name) y WWNN (World Wide Node Name).
Para identificar un nodo lo ideal es usar ambos (WWNN y WWPN). En los puertos de switch identificamos el WWN conectado y aplicamos una restricción de acceso y bloqueo para evitar cambios.

En este documento de la NSA se puede encontrar información sobre mecanismos de autenticación.
https://www.nsa.gov/ia/_files/factsheets/securing_fibre_brochure.pdf






viernes, 8 de mayo de 2015

Benchmarks Target iSCSI - Proyecto - SAN (Storage Area Network)

Benchmarks Target iSCSI - Proyecto - SAN (Storage Area Network)


Resultado de algunas pruebas:

Unidades montadas en mysql-2(Raspberry modelo: Raspberry Pi Modelo A)




root@mysql-2:/etc# lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda           8:0    0  14.9G  0 disk /mnt/sda
mmcblk0     179:0    0  14.9G  0 disk
|-mmcblk0p1 179:1    0    56M  0 part /boot
`-mmcblk0p2 179:2    0  14.8G  0 part /



Resultado de un disco local:


root@mysql-2:/etc# hdparm -tT /dev/mmcblk0p1

/dev/mmcblk0p1:
 Timing cached reads:   308 MB in  2.00 seconds = 153.97 MB/sec
 Timing buffered disk reads:  50 MB in  3.11 seconds =  16.09 MB/sec



Resultado del disco por iSCSI



root@mysql-2:/etc# hdparm -tT /dev/sda

/dev/sda:
 Timing cached reads:   286 MB in  2.01 seconds = 142.38 MB/sec
 Timing buffered disk reads:  30 MB in  3.10 seconds =   9.67 MB/sec



Los resultados son bastantes buenos, considerando el tipo de harware empledo para este laboratorio.

Transfiriendo un fichero:




root@mysql-2:/etc# dd if=/dev/zero of=/mnt/sda/testing bs=8k count=120000
120000+0 records in
120000+0 records out
983040000 bytes (983 MB) copied, 137.447 s, 7.2 MB/s






Resulado realizado desde otro servidor por Fiber Channel al mismo servidor SAN:




karim@anubis:~$ dd if=/dev/zero of=/media/karim/96b927dd-beda-4c06-ab9a-8a7a1e0f7909/testing bs=8k count=120000
120000+0 records in
120000+0 records out
983040000 bytes (983 MB) copied, 0,606053 s, 1,6 GB/s



iSCSI es 20% más rápido en algunos casos que por ejemplo NFS, requiere un poco más de tiempo para realizar la configuración.



miércoles, 6 de mayo de 2015

Benchmarks Target FC (Fiber Channel) - Proyecto - SAN (Storage Area Network)

Benchmarks Target FC (Fiber Channel) - Proyecto - SAN (Storage Area Network)


Los discos en el servidor SAN son de la marca Western Digital Modelo: WD30EFRX tienen una tasa de escritura y lectura de 145 MB/s, la controladora Raid con un disk array (raid-5) 8 discos con un total de 21T.

Resultado obtenido para un fichero de 10MB, tasa de lectura/escritura :


Disco 5T: Fiber Channel 4Gb/s conectado directamente sin fiber switch
Color azul - lectura
Color rojo - escritura


Resultado obtenido para un fichero de 100MB, tasa de lectura/escritura :
Disco 5T: Fiber Channel 4Gb/s conectado directamente sin fiber switch

Configuración iscsi (targetcli)- Proyecto - SAN (Storage Area Network)

Configuración iSCSI (targetcli)- Proyecto - SAN (Storage Area Network)

En paralelo a nuestra configuración de los targets para nuestros canales de fibra se puede configurar target iSCSI para llegar a servidor que no tengan una targeta de fibra. Configurar iSCSI en plataforma de bajo presupuesto es una buena alternativa para implementar un sistema de "disaster recovery". Otra alternativa en lugar de usar targetcli es Openfiler viene preparado con una interfaz gráfica y permite gestionar desde los volúmenes, permisos, targets ...



Otra gran ventaja de iSCSI es la recuperación automática de la sesión en caso de cortes o pérdida de red. En entornos donde hay que priorizar la alta disponibilidad se puede usar DM-multipath, otra beneficio directo es aprovechar un load-balancing y mayor ancho de banda. Poniendo a práctica este interesante escenario en cada controladora hay que agrupar las LUN y crear un solo mapeo por controladora HBA o RED(para iSCSI). En la gran mayoria de los sistemas de virtualización se puede usar iSCSI y los principales sistemas operativos lo tienen integrado. El ancho de banda necesario es proporcional a las necesidades y conviene usar tarjetas de varios puertos o 10-Gigabit-Ethernet. Para aumentar el rendimiento  se puede hacer VLAN trunk dependiendo del tráfico.

A continuación explicamos la configuración a realizar en el servidor SAN y Cliente-Servidor (SRV-Mysql-2).

Servidor SAN:

Entramos en targetcli y creamos un objeto:

/backstores> /backstores/iblock/ create name=mysql­2 dev=/dev/sda4


 Activamos el target por iSCSI:

cd /iscsi
create
La opción de crear un portal de forma automática no está activada.



Creamos un portal:


/> /iscsi create

Created target iqn.2003­01.org.linux-
iscsi.san.x8664:sn.284ffa240148.

Selected TPG Tag 1.

Successfully created TPG 1.



Añadimos una LUN:


cd /iscsi/iqn.2003­01.org.linux-
iscsi.san.x8664:sn.284ffa240148/tpgt1

luns/ create /backstores/iblock/mysql­2


Creamos una ACL:

Previamente tendremos que conseguir el nombre del iniciador, instalamos opem-iscsi (en el servidor cliente). listamos el nombre,


cat /etc/iscsi/initiatornmae.iscsi
 
Ejemplo:
root@mysql-2:/# cat /etc/iscsi/initiatorname.iscsi
## DO NOT EDIT OR REMOVE THIS FILE!
## If you remove this file, the iSCSI daemon will not start.
## If you change the InitiatorName, existing access control lists
## may reject this initiator.  The InitiatorName must be unique
## for each iSCSI initiator.  Do NOT duplicate iSCSI InitiatorNames.
InitiatorName=iqn.1993-08.org.debian:01:a4b591a99cfa

 


Regresamos al servidor SAN y continuamos con la configuración del ACL:



/iscsi/iqn.20...c1/tpgt1/acls>
 
/iscsi/iqn.20...c1/tpgt1/acls> create iqn.1993­08.org.debian:01:a4b591a99cfa
Successfully created Node ACL for iqn.1993­08.org.debian:01:a4b591a99cfa
Created mapped LUN 0.

Añadimos usando la autenticación CHAP,  un usuario y una contraseña:

/iscsi/iqn.20...:a4b591a99cfa> ls
o­ iqn.1993­08.org.debian:01:a4b591a99cfa ................................................. [1Mapped LUN]
o­ mapped_lun0 ................................................................................................ [lun0 (rw)]
/iscsi/iqn.20...:a4b591a99cfa> set auth userid=usrmysql2
Parameter userid is now 'usrmysql2'.
/iscsi/iqn.20...:a4b591a99cfa> set auth password=123456
Parameter password is now '123456'.

NO OLVIDAMOS GUARDAR LA CONFIGURACIÓN:
/iscsi/iqn.20....03efa1d619c1> cd ..
/iscsi> cd ..
/> saveconfig


Servidor Mysql-2:

Instalamos open-iscsi, previamente realizando para la obtención del nombre iniciador para la configuración del access-list en targetcli.


root@mysql-2:/# apt-get install open-iscsi

Nombre del iniciador:

root@mysql-2:/# cat /etc/iscsi/initiatorname.iscsi

 Configuración del tipo de autenticación, usuario y contarseña:

node.session.auth.authmethod = CHAP
node.session.auth.username =
usrmysql2
 node.session.auth.password = 123456


 Reiniciamos el servicio open-iscsi:

root@mysql-2:/# /etc/init.d/open-iscsi


Ejecutamos iscsiadm en modo discover:

root@mysql-2:/# iscsiadm --mode discovery --type sendtargets --portal 192.168.1.113

192.168.1.113:3260,1 iqn.2003-01.org.linux-iscsi.san.x8664:sn.03efa1d619c1

Ejecutamos iscsiadm en modo nodo:


root@mysql-2:/# iscsiadm --mode node --targetname iqn.2003-01.org.linux-iscsi.san.x8664:sn.03efa1d619c1 --portal 192.168.1.113 --login
 
Logging in to [iface: default, target: iqn.2003-01.org.linux-iscsi.san.x8664:sn.03efa1d619c1, portal: 192.168.1.113,3260] (multiple)
Login to [iface: default, target: iqn.2003-01.org.linux-iscsi.san.x8664:sn.03efa1d619c1, portal: 192.168.1.113,3260] successful.


Verificamos que el recurso este en modo (RW) lectura y escritura:

root@mysql-2:/# lsblk | egrep "NAME|sda"
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda           8:0    0  14.9G  0 disk



Una vez el recurso disponible se puede crear el file system:


root@mysql-2:/# mkfs.ext4 /dev/sda


Se puede añadir en el fstab para que este disponbible en el próximo aranque:

root@mysql-2:/# blkid | grep "/dev/sda"
/dev/sda: UUID="4b5f702a-8319-47a4-9b55-7e439db385c3" TYPE="ext4"



root@mysql-2:/# echo "UUID=4b5f702a-8319-47a4-9b55-7e439db385c3" >> /etc/fstab


root@mysql-2:/# echo "UUID=4b5f702a-8319-47a4-9b55-7e439db385c3" >> /etc/fstab

Editamos /etc/fstab:

UUID=4b5f702a-8319-47a4-9b55-7e439db385c3 /mnt/sda ext4 _netdev 0 0

_netdev: Indicamos que es una unidad y que depende de la conexión antes hacer el mount.









sábado, 2 de mayo de 2015

Configuración de targetcli - Proyecto - SAN (Storage Area Network)

Configuración de targetcli - Proyecto - SAN (Storage Area Network)

En el artículo anterior hemos visto como instalar targetcli y realizar una configuración sencilla. Vamos a cambiar de escenario y por lo tanto la configuración anterior ya no será válida particionaremos el espacio total del RAID-5 que eran de 21T en 3 particiones de 5T cada para los canales de Fibra y el resto lo reservamos para iscsi sobre TCP/IP en una red Gigabit Ethernet.

Existe la posibilidad de desinstalar targetcli:

Desistalar Targetcli:
sudo apt-get remove targetcli
 
Desistalar Targetcli y sus dependencias:
sudo apt-get remove --auto-remove targetcli
  
Desistalar Targetcli , sus dependencias y la configuración:
sudo apt-get purge --auto-remove targetcli


Otra opción es borrar la configuración parando el servicio:

Paso 1 (paramos el servicio)
Unloading fabric/configfs: Successfully released fabric: /sys/kernel/config/target/srpt
Successfully released fabric: /sys/kernel/config/target/qla2xxx
Successfully released fabric: /sys/kernel/config/target/loopback
Successfully released fabric: /sys/kernel/config/target/fc
[OK]
Unloading LIO-Target/ConfigFS fabric: [OK]
Unloading target_core_mod/ConfigFS core: rmmod: ERROR: Module target_core_stgt is not currently loaded
[OK]
Successfully unloaded target_core_mod/ConfigFS core


 Entramos en targetcli:

 Paso 2 (entramos en targetcli, cargrá una confiuración vacía)
root@SAN:/etc/target# targetcli
targetcli GIT_VERSION (rtslib GIT_VERSION)
Copyright (c) 2011-2013 by Datera, Inc.
All rights reserved.
Loaded tcm_fc kernel module.
Created '/sys/kernel/config/target/fc'.
Loaded tcm_qla2xxx kernel module.
Created '/sys/kernel/config/target/qla2xxx'.
Loaded iscsi_target_mod kernel module.
Created '/sys/kernel/config/target/iscsi'.
Loaded ib_srpt kernel module.
Created '/sys/kernel/config/target/srpt'.
Loaded tcm_loop kernel module.
Created '/sys/kernel/config/target/loopback'.

 Resultado de una configuración vacía:


Guardamos la configuración:

 Paso 3 (Guardar la configuración)
/> saveconfig
WARNING: Saving SAN current configuration to disk will overwrite your boot settings.
The current target configuration will become the default boot config.
Are you sure? Type 'yes': yes
Making backup of loopback/ConfigFS with timestamp: 2015-05-02_18:06:25.212974
Successfully updated default config /etc/target/loopback_start.sh
Making backup of srpt/ConfigFS with timestamp: 2015-05-02_18:06:25.212974
Successfully updated default config /etc/target/srpt_start.sh
Making backup of qla2xxx/ConfigFS with timestamp: 2015-05-02_18:06:25.212974
Successfully updated default config /etc/target/qla2xxx_start.sh
Making backup of fc/ConfigFS with timestamp: 2015-05-02_18:06:25.212974
Successfully updated default config /etc/target/fc_start.sh
Making backup of LIO-Target/ConfigFS with timestamp: 2015-05-02_18:06:25.212974
Generated LIO-Target config: /etc/target/backup/lio_backup-2015-05-02_18:06:25.212974.sh
Making backup of Target_Core_Mod/ConfigFS with timestamp: 2015-05-02_18:06:25.212974
Generated Target_Core_Mod config: /etc/target/backup/tcm_backup-2015-05-02_18:06:25.212974.sh
Successfully updated default config /etc/target/lio_start.sh
Successfully updated default config /etc/target/tcm_start.sh


Otra forma de empesar una nueva configuración:
clearconfig

Se ha producid un cambio de S.O debido a que estaba usando la versión UBUNTU 14.04.2 LTS Desktop y tenía problemar para crear un portal iscsi.
(hablaremos de ellos más tarde).

Versión y distribución actual del servidor SAN:
Distributor ID:    Ubuntu
Description:    Ubuntu 14.04.2 LTS
Release:    14.04
Codename:    trusty


Comprobar que targetcli carga todos los módulos:



Iniciamos la configuración del nuevo escenario, el servidor SAN-SERVER tiene un canal de fibra de 4Gpbs con el servidor SRV-ANUBIS.

Servidor SAN
QLE 2464 port 1: WWN: 21:00:00:1b:32:8d:0c:f3
Objeto tipo iblock, unidad /dev/sda1 de 5T. (partición de un espacio total de 21T sobre RAID-5)

Sevidor SRV-ANUBISsss
QLE 2462 port 1: WWN: 21:00:00:1b:32:09:bd:74

Recordatorio para particionar el disco RAID-5 usando: parted
(usado para particiones > 2TB)
parted /dev/sda

Listar la configuración de las particiones en la tabla gpt:
(parted) print
Model: LSI MR9261-8i (scsi)
Disk /dev/sda: 20,9TB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number Start End Size File system Name Flags
1 1049kB 20,9TB 20,9TB ext4 primary

Quitar una partición:
(parted) rm
Partition number? 1


Creamos las nuevas particiones:
(parted) mkpart primary 0GB 5120GB
(parted) mkpart primary 5120GB 10240GB
(parted) mkpart primary 10240GB 15360GB
############################
(parted) print
Model: LSI MR9261-8i (scsi)
Disk /dev/sda: 20,9TB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Number Start End Size File system Name Flags
1 1049kB 5120GB 5120GB ext4 primary
2 5120GB 10,2TB 5120GB primary
3 10,2TB 15,4TB 5120GB primary

 Formateamos las particiones:
mkfs.ext4 /dev/sda1
mkfs.ext4 /dev/sda2
mkfs.ext4 /dev/sda3


Empezaos a configurar targelcli, a continuación empezaremos creando los objetos en este caso estamos usando bloques de un diso (particiones).

Creamos los objetos tipo iblock:
/backstores/iblock/ create name=SRV-ANUBIS dev=/dev/sda1

/backstores/iblock/ create name=SRV-NUT dev=/dev/sda2

/backstores/iblock/ create name=SRV-OSIRIS dev=/dev/sda3

Creamos WWN´s en targetcli en cada puerto:
/qla2xxx create 21:00:00:1b:32:8d:0c:f3


/qla2xxx create 21:03:00:1b:32:ed:0c:f3


/qla2xxx create 21:01:00:1b:32:ad:0c:f3


/qla2xxx create 21:02:00:1b:32:cd:0c:f3

En caso de este fallo para crear un Target de fibra:
/> /qla2xxx create 21:03:00:1b:32:ed:0c:f3
Traceback (most recent call last):
File "/usr/lib/python2.7/dist-packages/configshell/shell.py", line 983, in run_interactive
self._cli_loop()
File "/usr/lib/python2.7/dist-packages/configshell/shell.py", line 806, in _cli_loop
self.run_cmdline(cmdline)
File "/usr/lib/python2.7/dist-packages/configshell/shell.py", line 927, in run_cmdline
self._execute_command(path, command, pparams, kparams)
File "/usr/lib/python2.7/dist-packages/configshell/shell.py", line 902, in _execute_command
result = target.execute_command(command, pparams, kparams)
File "/usr/lib/python2.7/dist-packages/targetcli/ui_node.py", line 216, in execute_command
return UINode.execute_command(self, command, pparams, kparams)
File "/usr/lib/python2.7/dist-packages/targetcli/ui_node.py", line 101, in execute_command
pparams, kparams)
File "/usr/lib/python2.7/dist-packages/configshell/node.py", line 1405, in execute_command
result = method(*pparams, **kparams)
File "/usr/lib/python2.7/dist-packages/targetcli/ui_target.py", line 119, in ui_command_create
target = Target(self.rtsnode, wwn, mode='create')
File "/usr/lib/python2.7/dist-packages/rtslib/target.py", line 1209, in __init__
self._create_in_cfs_ine(mode)
File "/usr/lib/python2.7/dist-packages/rtslib/node.py", line 71, in _create_in_cfs_ine
os.mkdir(self.path)
OSError: [Errno 22] Invalid argument: '/sys/kernel/config/target/qla2xxx/21:03:00:1b:32:ed:0c:f3'

Seguir estos pasos par realizar una modificación en la controladora de la tarjeta de fibra HBA.

vi /etc/modprobe.d/qla2xxx.conf
Modificar:  options qla2xxx qlini_mode="enable"
Por:  options qla2xxx qlini_mode="disabled"
Salir y guardar.
Actualizar inittramfs: 
update-initramfs -u -k all
Reiniciar el servidor.


Creamos la instancia Target usando las WWN´s
/qla2xxx/21:00:00:1b:32:8d:0c:f3/luns/ create /backstores/iblock/SRV-ANUBIS



/qla2xxx/21:03:00:1b:32:ed:0c:f3/luns/ create /backstores/iblock/SRV-NUT



/qla2xxx/21:01:00:1b:32:ad:0c:f3/luns/ create /backstores/iblock/SRV-OSIRIS



/qla2xxx/21:02:00:1b:32:cd:0c:f3/luns/ create /backstores/iblock/*** RESERVADO /no creado**




 
Cremos el ACL(sólo para el servidor cliente ANUBIS de momento:
/qla2xxx/21:00:00:1b:32:8d:0c:f3/acls/ create 21:00:00:1b:32:09:bd:74


Guardamos la configuración:
saveconfig