Una panoramica sul mondo della Sicurezza Informatica, del Networking, della Virtualizzazione e non solo. Blog particolarmente indicato per i reparti IT che comunque alterna articoli scritti per specialisti con articoli formulati con linguaggio semplice e comprensibile a tutti.

Ogni articolo di questo blog è stato integralmente scritto dall'autore. Il contenuto è completamente originale e la riproduzione, anche parziale, è vietata salvo autorizzazione.

giovedì 3 marzo 2016

Creare una SAN iSCSI con dischi in RAID su una LUN LVM Linux per VMWare

Sono ormai mesi che sperimento storage con un occhio particolare verso il collegamento su vmware. La parte storage è indubbiamente un punto dolente per chi fa virtualizzazione, ed abbiamo dedicato intere giornate per incrementare le performance senza andare necessariamente su macchine enterprise (per intenderci, da 50k€ in su), mantenendoci quindi in un contesto più a portata di portafoglio per tutte quelle realtà con due host e senza troppe pretese.

Ho avuto modo di lavorare su svariate macchine, QNAP, Netgear ReadyNas, Synology, etc.. fondamentalmente tutte basate su Linux. Una delle perplessità maggiori nasce dal fatto che tutte queste macchine hanno in comune la possibilità di erogare centinaia di servizi del tutto inutili per chi vuole solo collegare delle LUN via iSCSI, con le massime performance possibili.

Quindi, come creare una macchina dedicata a questo scopo e che sia sufficientemente performante a prezzi ragionevoli?


Cosa ci serve


  • Una macchina decente, nel nostro caso uno Xeon quad core;
  • Possibilmente dischi di tipo enterprise, nel nostro caso 8x4Tb WD RE (qui ne parliamo abbondantemente);
  • Linux Debian, scaricabile da qui;
  • Abbastanza RAM, nel nostro caso almeno 24Gb (ci servirà da cache);
  • Quattro NIC 10Gb sullo storage e (nel nostro caso, trattandosi di due host esx) 2 NIC 10Gbit per host, che verranno collegate in direct attach (rame) per contenere i costi della parte network


Cosa realizzeremo?



Una SAN iSCSI 4x10Gbit, nel nostro caso con 32Tb nominali in RAID6 con 20Gb di Cache su RAM.




Architettura






Prepariamo il sistema


1. Installiamo Debian sulla nostra macchina SAN 

(non mi soffermerò oltre su questo aspetto, la rete è piena di guide ed how-to, del resto si presuppone che questa operazione sia alla portata di chi lavora con questi strumenti


2. Aggiorniamo e prepariamo il sistema

apt-get update
apt-get upgrade
apt-get install vim iotop iscsitarget lvm2 hdparm

3. Creiamo il RAID

Ovviamente è necessario modificare i dischi in base alla propria architettura

mdadm --create  --chunk=512 --verbose /dev/md0 --level=5 --spare-devices=0 --raid-devices=6 /dev/sdb /dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/sdg

Le considerazioni sul livello del RAID, sulla sua affidabilità e sulle performance le facciamo in un altro articolo. Sono considerazioni di primaria importanza, ma troppo prolisse per essere affrontate in questo how-to.


4. Creiamo le partizioni sull'array

fdisk --compatibility=nondos /dev/md0
Creiamo la partizione con n
Primaria con p
Il numero è 1
Il resto è molto intuitivo, una volta terminato usciamo con w per salvare.

Abbiamo creato quindi /dev/md0p1


5. Creiamo le LVM (ci consentiranno, inoltre, di aggiungere spazio a caldo all'aumentare dei dischi)

pvcreate /dev/md0p1 (creazione del physical volume) 
vmcreate vg_iscsi /dev/md0p1 (creazione del vollume group) 
lvcreate -L 2T -n lv_iscsi vg_iscsi (sostituire 2T con la dimensione voluta, creazione del logical volume)

A titolo informativo:
cpn pvs vediamo i physical volume
con vgs i volume group
e con lvs i logical volume


6. Impostiamo la parte network iscsi

Nel nostro caso abbiamo utilizzato NIC con supporto TOE, 10Gbit ed essendo collegate in Direct Attach preferisco assegnare loro 4 classi differenti e far fare Round Robin a vmware:

NAS_NICn ------------------------ HOSTn_NICn
eth0 10.20.30.1/30---------------- Host1_eth0 10.20.30.2/30
eth1 10.20.30.5/30---------------- Host1_eth1 10.20.30.6/30
eth2 10.20.30.9/30---------------- Host2_eth0 10.20.30.10/30
eth3 10.20.30.13/30-------------- Host2_eth1 10.20.30.14/30




6. Inizializziamo la parte di iscsi target

vi /etc/default/iscsitarget 
ISCSITARGET_ENABLE=true

Impostiamola

vi /etc/iet/ietd.conf 
Target iqn.2016-03.local.mynas:storage.sys0 
Lun 0 Path=/dev/disk/by-id/dm-name-vg_iscsi-lv_iscsi,Type=fileio,ScsiId=lun0,ScsiSN=lun0


Avviamola

service iscsitarget restart


9. Ottimizziamo la cache

In base a quanta RAM abbiamo, possiamo definire quanta ne deve utilizzare l'array.

Nel nostro caso, 24Gb di RAM, 8 dischi, possiamo definire tranquillamente 16384 pagine per disco
echo 16384 > /sys/block/md0/md/stripe_cache_size
Controlliamo frequentemente la RAM, NON dobbiamo assolutamente andare in swap (vanificheremmo completamente la cache), quindi se serve riduciamo quel valore! Facciamo in modo da avere sempre almeno 1Gb di ram libera

free -m 
                      total       used         free     shared    buffers     cached
Mem:         24576      22179         2397          8      10552        688
Swap:           7628             0         7628


10. Colleghiamo via iscsi gli host vmware esxi


Aggiungiamo in configuration > storage gli adapter iscsi



Ognuno con la sua NIC ovviamente collegata



Creiamo due virtual switch, uno per NIC (se tutte le NIC supportano i jumbo frame, utilizziamoli portando l'MTU a 9000 sia del virtual switch sia della VMKernel Port)




Dopo i vari rescan, assicuriamoci che il percorso venga raggiunto in Round Robin (dai nostri test è emerso che questa è la soluzione più performante) tramite il tasto destro sul Device > Manage Path






11. Attendiamo che il rsync sia terminato prima di fare ogni test di performance 
(su questo aspetto ne parleremo in seguito, utilizzando iperf per la parte network, hdparm per il sistema NAS e la macchina virtuale vmware iometer per la parte datastore VMFS)

watch -n 5 "cat /proc/mdstat" 
      [==============>......]  resync = 73.7%  finish=216.0min speed=98800K/sec

mdadm --detail /dev/md0 


Durante la fase di inizializzazione, è del tutto normale che un disco venga messo come spare device, serve a velocizzare le operazioni di rebuilding. Sostanzialmente il RAID 5 viene portato a RAID 3. Al termine, i devices verranno riportati a RAID 5 automaticamente.



Performance


Con iperf abbiamo misurato circa 4,1Gbit per NIC di banda di rete utilizzabile. 2 NIC da 10Gbit ci erogano, quindi, circa 7-8Gbit reali utilizzabili in Round Robin in Direct Attach, senza considerare il minor overhead generato dai jumbo frame a 9000. Lato network, con questa configurazione, tenderei ad escludere colli di bottiglia.

Con VMWare IOMeter, la macchina virtuale di vmware dedicata ai test di performance degli storage, abbiamo ottenuto questi valori (256k/120s):

100% Random, 50%Write e 50%Read
IOPS (R/W): 1914 / 1914
TROUGHPUT (R/W) MByte/s: 478 / 478
Latenza (R/W) ms: 3,62 / 3,93 

Frutto ovviamente di una cache molto generosa.


Questo è ciò che ci dice hdparm direttamente sullo storage:

hdparm -tT /dev/md0
/dev/md0:
 Timing cached reads:   56652 MB in  1.99 seconds = 28427.91 MB/sec
 Timing buffered disk reads:  2448 MB in  3.00 seconds = 815.92 MB/sec

E' evidente che hdparm dia un risultato in lettura particolarmente favorevole perchè, con un numero di meccaniche elevato, la lettura ne beneficia. Il penalty dei RAID 5 e 6 è alto proprio in scrittura, quindi da quel valore possiamo desumere che, invece e senza cache in write, un R5 di 8 meccaniche SATA restituisca appena 200MB/sec reali. Qui c'è poco da fare, dischi SAS 10k e 15k rpm o, meglio ancora i dischi SSD, uniti ad una buona e corposa cache, ci aumentano esponenzialmente le performance. 

Alla fine in uno storage i costi maggiori si concentrano sui dischi, e questo è del tutto giustificato da delle performance che rispecchiano il budget investito.



Conclusione


Con circa 2k€ abbiamo creato una SAN che sul mercato, con quelle performance, costa mediamente il triplo. Una SAN, inoltre, che è pulita da tutte le appendici che si porta dietro un prodotto NAS e soprattutto esente da attacchi e vulnerabilità tipiche dei prodotti commerciali (ci sono varianti di cryptolocker specifiche per i vari vendor di NAS).

Ovviamente questa è solo una guida rapida, al lettore il compito di approfondire e personalizzare ogni voce, tra cui innanzitutto impostare un meccanismo di autenticazione iscsi.

Utilizzerei questo sistema in un ambiente di produzione? Lo utilizzerei per i backup e per piccoli cluster vmware, ma davvero piccoli. Per architetture più performanti, con accessi su database, andrei su una SAN pensata e nata per fare solo questo, evitando assolutamente qualsiasi apparato che faccia anche da NAS. Farsi molto male con un sistema dalle prestazioni degradate è un attimo, latenze superiori ai 15ms sui datastore vmware si traducono in evidenti disagi per chi utilizzerà quelle macchine, questo è uno dei motivi per cui progettare bene la parte storage è assolutamente fondamentale in ambienti virtuali.



Discaimer: Ogni articolo di questo blog è stato integralmente scritto dall'autore. Il contenuto è completamente originale e la riproduzione è vietata salvo autorizzazione.