iSCSI sta per Internet Small Computer System Interface.
Funziona su livello TCP/IP e consente l'invio di comandi SCSI su reti locali (LAN).
Viene utilizzato per accedere allo spazio di archiviazione sulla rete tramite TCP/IP utilizzando trasferimenti di dati a livello di blocco.
C'è spesso un confronto tra NFS e iSCSI. La differenza fondamentale è che NFS è un'implementazione a livello di file mentre iSCSI è un'implementazione a livello di blocco.
Nelle implementazioni a livello di blocco come iSCSI e Fibre Channel, l'array di archiviazione offre una raccolta di blocchi al client, che quindi formatta lo storage grezzo con qualsiasi file system decide di utilizzare.
In ordine per accedere allo storage su iscsi, abbiamo bisogno dei seguenti componenti:
- iniziatore iSCSI (Hardware/Software) – Questo è un client iscsi che può inviare comandi iscsi sulla rete TCP/IP. Di solito è l'adattatore NIC sul server e può essere fisico o virtuale con un IP configurato sulla stessa sottorete con l'interfaccia iscsi dell'array di archiviazione.
- iSCSI Target (il tuo nodo di archiviazione) – Questo è il tuo nodo di archiviazione che puoi configurare da solo o può essere un array fisico di un fornitore che supporta la configurazione iscsi
- Switch iSCSI (opzionale):qui lo switch iscsi è facoltativo, ma per separare il traffico host dal traffico iscsi nelle distribuzioni aziendali, si consiglia di utilizzare uno switch separato per il traffico iscsi.
In questo tutorial, vedremo come configurare il nostro nodo di archiviazione che supporta la configurazione iscsi e accedere allo spazio di archiviazione dal client iscsi su una macchina Centos 6.
Le stesse procedure dovrebbero funzionare per la versione RHEL 6 (CentOS 6). Per CentOS 7, la procedura è leggermente diversa utilizzando targetcli, che tratteremo in un altro articolo.
1. Installa SCSI Target Utils e avvia tgtd
Innanzitutto, installa scsi-target-utils utilizzando il comando yum sul nodo di archiviazione, necessario per configurare l'iSCSI.
yum install scsi-target-utils
Se non hai già installato Perl sul tuo sistema, il comando precedente installerà automaticamente Perl e molte altre dipendenze (ad esempio:sg3_utils).
Questo installerà il comando tgtadm come mostrato di seguito.
# which tgtadm /usr/sbin/tgtadm
Speciali il demone di destinazione SCSI come mostrato di seguito.
# service tgtd start Starting SCSI target daemon: [ OK ]
Usando il comando chkconfig, assicurati che si avvii automaticamente durante l'avvio del sistema.
chkconfig tgtd on
2. Aggiungi un nuovo target iSCSI usando tgtadm
Utilizzare il comando tgtadm per aggiungere una nuova destinazione iSCSI sul nodo di archiviazione utilizzando la seguente sintassi:
tgtadm --lld --mode target --op new --tid --targetname
L'esempio seguente crea una destinazione con ID destinazione 1 con iqn sottostante,
tgtadm --lld iscsi --op new --mode target --tid 1 \ -T iqn.2016-03.com.thegeekstuff:storage.lun01.thegeekstuff.com
Nel comando sopra:
- Il comando tgtadm è l'utilità di amministrazione della destinazione SCSI di Linux
- –lld iscsi specifica che stiamo usando il driver iscsi (puoi anche usare -L invece di –lld)
- –op new specifica l'operazione, in questo caso stiamo creando un nuovo target (puoi anche usare -o invece di –op)
- –mode target indica che stiamo creando un target. Altre modalità possibili sono:unità logica, account, portale, conn, sys. (Puoi anche usare -m invece di –mode)
- –tid 1 specifica l'id di destinazione, che è 1 in questo esempio (puoi anche usare -t invece di –tid)
- -T specifica il nome del target (puoi anche usare –targetname invece di -T)
3. Visualizza la configurazione iSCSI Target
Una volta creato il target, puoi visualizzare i dettagli utilizzando l'operazione "mostra" come mostrato di seguito. Ciò fornirà le informazioni di sistema e le informazioni LUN di tutti i target disponibili sul tuo sistema.
Come si vede dall'output seguente, abbiamo un solo target (Target 1), che è il driver iSCSI, con un LUN (LUN 0).
# tgtadm --lld iscsi --op show --mode target Target 1: iqn.2016-03.com.thegeekstuff:storage.lun01.thegeekstuff.com 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 Backing store type: null Backing store path: None Backing store flags: Account information: ACL information:
Nota:nell'output precedente, il "Percorso archivio di backup" è attualmente Nessuno, poiché non abbiamo ancora associato alcun percorso di archiviazione fisico a questo iSCSI.
4. Aggiungi la LUN alla destinazione iSCSI
Nell'esempio seguente, aggiungeremo un lun esistente, che è /storage/lun01 montato e disponibile sul nostro nodo di archiviazione alla destinazione iSCSI che abbiamo creato.
Per la LUN esistente (/storage/lun01), dovresti anche impostare il contesto SELinux in modo appropriato come mostrato di seguito.
semanage fcontext -a -t tgtd_var_lib_t /storage/lun01 restorecon -Rv /storage/lun01
Se ricevi "Richiesta non valida", a scopo di test temporaneo, potresti voler disabilitare SELinux impostando SELinux in modalità permissiva per vedere se risolve il problema e restringere il problema all'autorizzazione SELinux.
Ora, usando il comando tgtadm, aggiungi /storage/lun01 alla destinazione iSCSI che abbiamo creato in precedenza.
tgtadm --lld iscsi --op new --mode logicalunit --tid 1 \ --lun 1 --backing-store /storage/lun01
Nel comando sopra:
- la maggior parte delle opzioni sono le stesse che abbiamo spiegato nel precedente comando tgtadm sopra.
- –unità logica in modalità. Tieni presente che in precedenza abbiamo usato "target" per modalità, ma qui stiamo usando unità logica per modalità.
- –lun indica l'ID LUN, che è 1 in questo esempio (puoi anche usare -l invece di –lun)
- –backing-store indica il percorso di archiviazione fisico sul server di archiviazione. Nel nostro esempio, è /storage/lun01 (puoi anche usare -b invece dell'opzione –backing-store)
- –tid 1 indica che collega questo dato LUN all'ID target 1 esistente, che abbiamo creato in precedenza.
Ora, visualizza di nuovo i dettagli dell'iSCSI sul tuo sistema.
Ma, questa volta, nella LUN 1, il "Percorso archivio di backup" nell'output seguente punterà al percorso di archiviazione che abbiamo associato a questo iSCSI. Nel nostro esempio è /storage/lun01.
# tgtadm --lld iscsi --op show --mode target Target 1: iqn.2016-03.com.thegeekstuff:storage.lun01.thegeekstuff.com System information: Driver: iscsi State: ready I_T nexus information: LUN information: LUN: 1 Type: disk SCSI ID: IET 00010001 SCSI SN: beaf11 Size: 5369 MB, Block size: 512 Online: Yes Removable media: No Prevent removal: No Readonly: No Backing store type: rdwr Backing store path: /storage/lun01 Backing store flags: Account information: ACL information:
Per qualche motivo, se hai commesso un errore nel comando precedente e ti piace eliminare l'associazione LUN1 che abbiamo creato sopra, usa il comando seguente.
tgtadm --lld iscsi --mode logicalunit --op delete --tid 1 --lun 1
Nel comando sopra:
- Tutto è uguale al comando precedente
- Ma qui l'opzione -op (che è l'operazione) viene eliminata.
- Questo cancellerà lun1 da iSCSI tid 1 (target 1)
5. Impostare la restrizione ACL per iSCSI
Successivamente, devi configurare ACL per consentire agli iniziatori che possono accedere a questa destinazione scsi.
tgtadm --lld iscsi --op bind --mode target --tid 1 -I ALL
Nel comando sopra:
- La maggior parte delle opzioni sono molto simili ai nostri comandi precedenti
- L'opzione -I ALL indica che stiamo consentendo al target di accettare TUTTI gli iniziatori (puoi anche usare –initiator-address invece di -I)
Quando visualizzi i dettagli iSCSI utilizzando l'operazione "mostra", noterai le informazioni ACL verso la fine dell'output, come mostrato di seguito.
# tgtadm --lld iscsi --op show --mode target .. .. Backing store path: /storage/lun01 Backing store flags: Account information: ACL information: ALL
Se desideri limitare solo il client che deve accedere allo storage, puoi utilizzare il comando seguente e specificare un indirizzo IP specifico.
tgtadm --lld iscsi --mode target --op bind --tid 1 192.168.2.109
Se desideri limitare l'accesso a una determinata sottorete, puoi specificare la sottorete anziché l'indirizzo IP come mostrato di seguito.
tgtadm --lld iscsi --mode target --op bind --tid 1 192.168.2.0/24
6. Consenti l'accesso alla porta 3260
Se stai eseguendo ip-tables, aggiungi una regola ip-tables e consenti la porta 3260 come mostrato di seguito.
iptables -I INPUT -p tcp -m tcp --dport 3260 -j ACCEPT
Verifica che la porta 3260 sia aperta utilizzando il comando netstat come mostrato di seguito.
# netstat -tunlp | grep 3260 tcp 0 0 0.0.0.0:3260 0.0.0.0:* LISTEN 1248/tgtd tcp 0 0 :::3260 :::* LISTEN 1248/tgtd
Nota:fino a questo punto, tutti i comandi precedenti sono stati eseguiti sul nodo del server di archiviazione. D'ora in poi, tutti i comandi nella sezione seguente verranno eseguiti sulla macchina client, che deve connettersi al server di archiviazione.
7. Sul cliente:scopri iSCSI
Sul client, prima di scoprire l'iSCSI, non vedrai il nuovo disco iSCSI. Ad esempio, il seguente output non visualizzerà nulla.
fdisk -l /dev/sdb
Ora tutta la configurazione del lato target è completa ed è possibile accedere al lun tramite iscsi dal client. Le procedure seguenti ti mostreranno come configurare il lato client per accedere allo storage.
Sul server client, installa il pacchetto iscsi-initiator-utils come mostrato di seguito.
yum install iscsi-initiator-utils
Quindi, scopri la destinazione iSCSI usando il comando iscsiadm come mostrato di seguito.
[root@client ~]# iscsiadm --mode discovery --type sendtargets \ --portal 192.168.2.166
Il comando precedente visualizzerà il seguente output:
192.168.2.166:3260,1 iqn.2016-03.com.thegeekstuff:storage.lun01.thegeekstuff.com
Nel comando sopra:
- Il comando iscsiadm è l'utilità di amministrazione di open-iscsi
- –la modalità di rilevamento indica che stiamo rilevando il server iSCSI qui. Altre modalità possibili sono:discoverydb, node, fw, host iface o session. (Puoi anche usare -m invece di –mode)
- –digitare qui i sendtarget specifici. Altri valori possibili sono:sendtargets, fw e iSNS. Puoi anche usare l'abbreviazione st invece di sendtargets. (Puoi anche usare -t invece di –type)
- –portal specifica l'indirizzo IP del nodo di archiviazione iSCSI che abbiamo configurato in precedenza (puoi anche usare -p invece di –portal).
- Per l'indirizzo IP, se stai eseguendo iSCSI su una porta non predefinita (qualsiasi cosa diversa da 3260), specificalo dopo l'indirizzo IP. Ad esempio, 192.168.2.166:3261
Nota:se ricevi l'errore "Nessun percorso verso l'host", significa che iptables sulla destinazione o sul client non è configurato correttamente.
8. Sul client:accedere alla sessione di destinazione iSCSI
Una volta completato correttamente il processo di rilevamento, è necessario accedere alla sessione di destinazione iscsi utilizzando il comando seguente:
[root@client ~]# iscsiadm --mode node --targetname iqn.2016-03.com.thegeekstuff:storage.lun01.thegeekstuff.com \ --portal 192.168.2.166 --login
Il comando precedente visualizzerà il seguente output:
Logging in to [iface: default, target: iqn.2016-03.com.thegeekstuff:storage.lun01.thegeekstuff.com, portal: 192.168.2.166,3260] (multiple) Login to [iface: default, target: iqn.2016-03.com.thegeekstuff:storage.lun01.thegeekstuff.com, portal: 192.168.2.166,3260] successful.
Nel comando sopra:
- La maggior parte delle opzioni sono simili al comando precedente.
- Per la modalità, qui stiamo usando node (invece di discovery)
- -targetname specifica il nome della destinazione. Questo è il nometraget che abbiamo specificato sul nodo di archiviazione in precedenza quando abbiamo creato l'iSCSI (puoi anche usare -T invece di –targetname)
- –l'opzione login accede a tutte le destinazioni rilevate. Nel nostro caso, accederà al nostro server iSCSI di archiviazione specificato nell'opzione –portal.
Ora dovresti vedere il tuo nuovo dispositivo iscsi sull'output di fdisk. Puoi formattarlo, aggiungerlo a lvm e usarlo secondo necessità.
L'output del comando fdisk ora mostrerà il dispositivo.
[root@client ~]# fdisk -l /dev/sdb Disk /dev/sdb: 5368 MB, 5368709120 bytes 166 heads, 62 sectors/track, 1018 cylinders Units = cylinders of 10292 * 512 = 5269504 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000
Nota:il disco sopra non proviene dalla macchina client, proviene dal server di archiviazione come iSCSI.