Nota: questo è un obiettivo d’esame RHCE 7.
Presentazione
Nel mondo iSCSI, hai due tipi di agenti:
una destinazione (target) iSCSI fornisce lo spazio (qui chiamato server),
un iniziatore (initiator) iSCSI chi utilizza questo spazio disponibile (qui chiamato client).
Come hai già intuito, useremo due macchine virtuali, chiamate rispettivamente server e client. Se necessario, il server e le macchine virtuali client possono essere una e una sola macchina.
Configurazione target iSCSI
La maggior parte della configurazione di destinazione viene eseguita in modo interattivo tramite il comando targetcli. Questo comando utilizza un albero di directory per accedere ai diversi oggetti. Per creare una iSCSI target, è necessario seguire diversi passaggi sulla macchina virtuale del server.
Installa i seguenti pacchetti:
# yum install -y targetcli
Attivare il server target all’avvio:
# systemctl enable target
Nota: questo è obbligatorio, altrimenti la configurazione non verrà letta dopo un riavvio!
Esegui il comando targetcli:
# targetcli Warning: Could not load preferences file /root/.targetcli/prefs.bin. targetcli shell version 2.1.fb34 Copyright 2011-2013 by Datera, Inc and others. For help on commands, type 'help'. />
Hai due opzioni:
È possibile creare un file backstore denominato shareddata di 100 MB nella directory /opt (non esitare a utilizzare il tab completion):
/> backstores/fileio/ create shareddata /opt/shareddata.img 100M Created fileio shareddata with size 104857600
Nota: se non si specifica write_back = false alla fine del comando precedente, si assume write_back = true. L’opzione write_back impostata su true abilita la cache del file system locale. Ciò migliora le prestazioni ma aumenta il rischio di perdita di dati. Negli ambienti di produzione, si consiglia di utilizzare write_back = false.
È possibile creare un backstore di blocchi che di solito offre le migliori prestazioni. È possibile utilizzare un dispositivo a blocchi come /dev/sdb o un logical volume precedentemente creato (# lvcreate -name lv_iscsi -size 100M vg):
/> backstores/block/ create block1 /dev/vg/lv_iscsi Created block storage object block1 using /dev/vg/lv_iscsi.
Quindi, creare un IQN (nome qualificato Iscsi) denominato iqn.2014-08.com.example con un obiettivo denominato t1 e ottenere un TPG associato (Target Portal Group):
/> iscsi/ create iqn.2014-08.com.example:t1 Created target iqn.2014-08.com.example:t1. Created TPG 1. Global pref auto_add_default_portal=true Created default portal listening on all IPs (0.0.0.0), port 3260.
Nota: l’IQN segue la convenzione della RFC 3270 (vedi http://en.wikipedia.org/wiki/ISCSI per ottenere maggiori dettagli).
Ora possiamo andare alla directory appena creata:
/> cd iscsi/iqn.2014-08.com.example:t1/tpg1 /iscsi/iqn.20...ample:t1/tpg1> ls o- tpg1 ................................................. [no-gen-acls, no-auth] o- acls ............................................................ [ACLs: 0] o- luns ............................................................ [LUNs: 0] o- portals ...................................................... [Portals: 1] o- 0.0.0.0:3260 ....................................................... [OK]
Sotto tpg1, sono stati definiti tre oggetti:
acl (access control lists: limitare l’accesso alle risorse),
lun (logical unit number: definire le risorse esportate),
portals (definire i modi per raggiungere le risorse esportate, consistono in coppie di indirizzi IP e porte).
Se si utilizza una versione pre-RHEL 7.1 (questo passaggio viene ora eseguito automaticamente dal comando iscsi/create), è necessario creare un portals (una coppia di indirizzo IP e una porta attraverso cui il target può essere contattato dagli initiators):
/iscsi/iqn.20...ple:t1/tpg1> portals/ create Using default IP port 3260 Binding to INADDR_ANY (0.0.0.0) Created network portal 0.0.0.0:3260.
Qualunque sia la versione, crea un lun in base al tipo di backstore che hai scelto in precedenza:
Fileio backstore:
/iscsi/iqn.20...ample:t1/tpg1> luns/ create /backstores/fileio/shareddata Created LUN 0.
Block backstore:
/iscsi/iqn.20...ample:t1/tpg1> luns/ create /backstores/block/block1 Created LUN 0.
Creare un acl con l’IQN precedentemente creato (qui iqn.2014-08.com.example) e un identificatore scelto (qui client), creando insieme il nome dell’iniziatore futuro:
/iscsi/iqn.20...ample:t1/tpg1> acls/ create iqn.2014-08.com.example:client Created Node ACL for iqn.2014-08.com.example:client Created mapped LUN 0
Facoltativamente, imposta un ID utente e una password:
/iscsi/iqn.20...ample:t1/tpg1> cd acls/iqn.2014-08.com.example:client/ /iscsi/iqn.20...xample:client> set auth userid=usr Parameter userid is now 'usr'. /iscsi/iqn.20...xample:client> set auth password=pwd Parameter password is now 'pwd'.
Ora, per verificare la configurazione, digitare:
/iscsi/iqn.20...om.example:d1> cd ../.. /iscsi/iqn.20...ple:tgt1/tpg1> ls o- tpg1 ................................................. [no-gen-acls, no-auth] o- acls ............................................................ [ACLs: 1] | o- iqn.2014-08.com.example:client ......................... [Mapped LUNs: 1] | o- mapped_lun0 ............................. [lun0 fileio/shareddata (rw)] o- luns ............................................................ [LUNs: 1] | o- lun0 .......................... [fileio/shareddata (/opt/shareddata.img)] o- portals ...................................................... [Portals: 1] o- 0.0.0.0:3260 ....................................................... [OK]
Infine, puoi uscire dal comando targetcli:
/iscsi/iqn.20...ple:tgt1/tpg1> exit Global pref auto_save_on_exit=true Last 10 configs saved in /etc/target/backup. Configuration saved to /etc/target/saveconfig.json
Nota: la configurazione viene automaticamente salvata nel file /etc/target/saveconfig.json.
Inoltre, può essere utile controllare le porte attualmente utilizzate:
# netstat -ant Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:3260 0.0.0.0:* LISTEN tcp 0 0 192.168.1.81:22 192.168.1.81:33584 ESTABLISHED tcp6 0 0 :::22 :::* LISTEN tcp6 0 0 ::1:25 :::* LISTEN
Infine, apri la porta TCP 3260 nella configurazione del firewall:
# firewall-cmd --permanent --add-port=3260/tcp Success
Nota 1: con RHEL 7.2 (RHBZ # 1150656), esiste ora un file di configurazione firewalld per il servizio iscsi-target. Quindi puoi digitare: #firewall-cmd –permanent –add-service iscsi-target
Nota 2: nel nuovo file di configurazione /usr/lib/firewalld/services/iscsi-target.xml, sono specificate due linee per le porte: TCP 3260 e UDP 3260. Poiché tutto funzionava correttamente fino ad ora con l’argomento TCP 3260, Io suppongo di poter anche eseguire iSCSI su UDP ma non è l’opzione predefinita (non ho trovato alcun dettaglio nella RFC7143 su questo punto).
Ricarica la configurazione del firewall:
# firewall-cmd --reload Success
iSCSI Initiator
Per creare un iSCSI initiator, è necessario seguire diversi passaggi sulla macchina virtuale del client.
Installa il seguente pacchetto:
# yum install -y iscsi-initiator-utils
Modificare /etc/iscsi/initiatorname.iscsi e sostituire il contenuto con il nome dell’iniziatore precedentemente configurato come acl sul lato di destinazione:
InitiatorName=iqn.2014-08.com.example:client
Se hai precedentemente impostato un ID utente e una password sul server, modifica il file /etc/iscsi/iscsid.conf e incolla le seguenti righe:
node.session.auth.authmethod = CHAP node.session.auth.username = usr node.session.auth.password = pwd
Avvia il servizio iscsi:
# systemctl start iscsi
Attenzione: questa azione è obbligatoria per poter smontare la risorsa remota al riavvio. Non confondere i servizi iscsid e iscsi!
Esegui il comando iscsiadm in modalità di ricerca con l’indirizzo IP del server (qui 192.168.1.81):
# iscsiadm --mode discovery --type sendtargets --portal 192.168.1.81 192.168.1.81:3260,1 iqn.2014-08.com.example:t1
Nota 1: se non si specifica alcuna porta, la porta predefinita è 3260.
Nota 2: Non usare una voce DNS come indirizzo del portal (qui 192.168.1.81), poichè sarebbe una cattiva idea e causa un sacco di problemi.
Esegui il comando iscsiadm in modalità nodo con l’indirizzo IP del server (qui 192.168.1.81):
# iscsiadm --mode node --targetname iqn.2014-08.com.example:t1 --portal 192.168.1.81 --login Logging in to [iface: default, target: iqn.2014-08.com.example:t1, portal: 192.168.1.81,3260] (multiple) Login to [iface: default, target: iqn.2014-08.com.example:t1, portal: 192.168.1.81,3260] successful.
Nota: come in precedenza, se non si specifica alcuna porta, la porta predefinita è 3260. L’uso della voce DNS come indirizzo del portal porta solo problemi quindi usa l’indirizzo ip.
Per verificare la configurazione, digitare:
# lsblk --scsi NAME HCTL TYPE VENDOR MODEL REV TRAN sda 2:0:0:0 disk LIO-ORG shareddata 4.0 iscsi
Per essere sicuro che la tua risorsa non sia in modalità di sola lettura (1 = modalità di sola lettura), digita:
# lsblk | egrep "NAME|sda" NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 100M 0 disk
Ora puoi creare un file system:
# mkfs.ext4 /dev/sda mke2fs 1.42.9 (28-Dec-2013) /dev/sda is entire device, not just one partition! Proceed anyway? (y,n) y Filesystem label= OS type: Linux Block size=1024 (log=0) Fragment size=1024 (log=0) Stride=0 blocks, Stripe width=4096 blocks 25688 inodes, 102400 blocks 5120 blocks (5.00%) reserved for the super user First data block=1 Maximum filesystem blocks=33685504 13 block groups 8192 blocks per group, 8192 fragments per group 1976 inodes per group Superblock backups stored on blocks: 8193, 24577, 40961, 57345, 73729 Allocating group tables: done Writing inode tables: done Creating journal (4096 blocks): done Writing superblocks and filesystem accounting information: done
Recupera l’UUID di questo disco:
# blkid | grep "/dev/sda" /dev/sda: UUID="4a184c70-20ad-4d91-a0b1-c2cf0eb1986f" TYPE="ext4"
Aggiungi l’UUID del disco al file /etc/fstab:
# echo "UUID=..." >> /etc/fstab
Nota: fai molta attenzione a digitare >> e non >, altrimenti questo distruggerà tutta la tua configurazione!
Fai una copia del file /etc/fstab prima di fare questa operazione se non vuoi correre alcun rischio.
Modifica il file /etc/fstab e aggiungi il mount point (qui /mnt), il tipo di file system (qui ext4) e le opzioni di mount (_netdev):
UUID=... /mnt ext4 _netdev 0 0
Nota: l’opzione di montaggio _netdev è obbligatoria per posticipare l’operazione di montaggio dopo l’inizializzazione della rete. Se non lo fai, il processo di avvio dell’iniziatore verrà arrestato dopo un timeout in modalità di manutenzione (ulteriori informazioni sull’opzione _netdev qui).
Per verificare la configurazione, digitare:
# mount /mnt # touch /mnt/testFile
Nota: è consigliabile eseguire il comando mount -a ogni volta che si modifica qualcosa nel file /etc/fstab per rilevare eventuali problemi di avvio prima che si verifichi.
Facoltativamente, puoi scaricare tutta la configurazione del programma di avvio (3 = max output, 0 = min output):
# iscsiadm -m session -P 3 iSCSI Transport Class version 2.0-870 version 6.2.0.873-28 Target: iqn.2014-08.com.example:t1 (non-flash) Current Portal: 192.168.1.81:3260,1 Persistent Portal: 192.168.1.81:3260,1 ********** Interface: ********** Iface Name: default Iface Transport: tcp Iface Initiatorname: iqn.2014-08.com.example:client Iface IPaddress: 192.168.1.10 Iface HWaddress: Iface Netdev: SID: 1 iSCSI Connection State: LOGGED IN iSCSI Session State: LOGGED_IN Internal iscsid Session State: NO CHANGE ********* Timeouts: ********* Recovery Timeout: 120 Target Reset Timeout: 30 LUN Reset Timeout: 30 Abort Timeout: 15 ***** CHAP: ***** username: usr password: ******** username_in: password_in: ******** ************************ Negotiated iSCSI params: ************************ HeaderDigest: None DataDigest: None MaxRecvDataSegmentLength: 262144 MaxXmitDataSegmentLength: 262144 FirstBurstLength: 65536 MaxBurstLength: 262144 ImmediateData: Yes InitialR2T: Yes MaxOutstandingR2T: 1 ************************ Attached SCSI devices: ************************ Host Number: 2 State: running scsi2 Channel 00 Id 0 Lun: 0 Attached scsi disk sda State: running
Fonte: pagina man targetcli e wiki iSCSI Linux.
Consigli utili
Prima di riavviare, configurare una console virtuale, questo può essere utile!
Se è necessario arrestare target e initiator, arrestare prima l’iniziatore. Se si spegne prima il target, l’iniziatore non sarà in grado di smontare la risorsa remota e sarà bloccato nel processo di spegnimento.
Durante l’esame, come ulteriore precauzione, smonta la risorsa remota prima di riavviare l’iniziatore, eviterai brutte sorprese.
Pingback: Obiettivi esame RHCE 7 - prometheusproject