Cum se configurează serverul iSCSI (țintă) și clientul (inițiator) pe Debian 9


În lumea centrelor de date, Storage Area Networks (SAN) de capacitate mare au devenit standardul minim. Pe măsură ce furnizorii de cloud și virtualizarea continuă să aibă un impact masiv în lumea tehnologiei, nevoia de și mai mult spațiu de stocare SAN a devenit evidentă.

Majoritatea hardware-ului SAN este compus dintr-un controler minimalist (sau un set de controlere) și o colecție mare de unități de înaltă capacitate, toate configurate pentru a suporta cantități mari de disponibilitate și integritate a datelor.

Multe dintre aceste produse specializate sunt realizate de furnizori de renume, cum ar fi Netapp, Dell Equalogic, HP Storageworks sau EMC și au atașate etichete de preț pe care doar cele mai mari întreprinderi și le pot permite.

În mod realist, aceste dispozitive nu sunt altceva decât matrice mari de hard disk, cu un controler care oferă spațiul acelor hard disk-uri clienților conectați în rețea. De-a lungul anilor au existat multe tehnologii care oferă această funcționalitate sau o funcționalitate similară la un preț substanțial mai ieftin.

Distribuția Debian GNU/Linux oferă pachete care permit unui sistem Debian să servească scopului unui dispozitiv de stocare SAN la nivel de întreprindere la o simplă fracțiune din cost! Acest lucru permite tuturor, de la utilizatorii casnici de bază sau centrele de date mari, să obțină beneficiile stocării SAN fără a fi nevoie să cheltuiască o avere pe o soluție proprietară a furnizorului.

Acest articol va analiza modul în care un sistem Debian 9 (Stretch) poate fi configurat pentru a servi spațiu pe disc folosind un sistem cunoscut sub numele de Interfață pentru sisteme de computere mici pe Internet sau iSCSI pe scurt. iSCSI este un standard bazat pe Internet Protocol (IP) pentru furnizarea de stocare bloc (hard disk) altor sisteme. iSCSI funcționează într-un model de server client, dar folosește nume diferite pentru a distinge clientul de server.

În terminologia iSCSI, serverul care deservește „spațiul pe disc” este cunoscut sub denumirea de iSCSITarget” și sistemul care solicită /utilizarea spațiului pe disc este cunoscută ca „Inițiator” iSCSI. Cu alte cuvinte, un „inițiator” solicită blocarea stocării de la o „țintă”.

Configurarea mediului

Acest ghid va parcurge o configurare de bază care implică un server simplu iSCSI (țintă) și un client (inițiator), ambele rulează Debian 9 (Stretch).


Debian iSCSI Target: 192.168.56.101/24
Storage: Contains two extra hard drives to be used as the storage in the iSCSI setup
Debian iSCSI Initiator: 192.168.56.102/24

Rețeaua poate fi vizualizată după cum urmează:

Configurație țintă Debian iSCSI

În lumea iSCSI, ținta este considerată gazda care conține dispozitivele de stocare care urmează să fie utilizate de inițiatorul.

În acest articol, serverul cu IP-ul 192.168.56.101 este folosit ca țintă. Toate configurațiile se vor face pe gazda respectivă pentru această secțiune.

Primul pas este instalarea pachetelor necesare pentru a permite sistemului Debian să ofere ținte iSCSI. Acest pachet software este cunoscut sub numele de Target Framework (TGT).

Celălalt element care este folosit pentru acest ghid este instrumentele de Gestionarea volumului logic (LVM) ca Volume logice (LV-uri).) va fi folosit ca suport de stocare pentru ținta iSCSI.

Ambele pachete pot fi instalate cu următoarele comenzi.


apt-get update
apt-get install tgt lvm2

Odată ce pachetele sunt instalate, LVM va fi folosit pentru a pregăti hard disk-urile de pe țintă pentru a fi utilizate ca iSCSI LUN. Prima comandă este folosită pentru a pregăti discurile pentru includerea într-o configurare LVM. Asigurați-vă că modificați comanda după cum este necesar pentru diferite scenarii!


lsblk (Only used to confirm disks to be used in the LVM setup)
pvcreate /dev/sd{b,c}

Odată ce discurile au fost pregătite cu comanda „pvcreate” de mai sus, este timpul să creați un grup de volume din aceste discuri particulare. Grupul de volume este necesar pentru a crea Volumele logice care vor acționa ca stocare iSCSI ulterior.

Pentru a crea un grup de volume, este necesară comanda „vgcreate”.


vgcreate tecmint_iscsi /dev/sd{b,c}
vgs  (Only needed to confirm the creation of the volume group)

Observați în rezultatul de mai sus că sistemul răspunde că a fost creat Grupul de volum, dar este întotdeauna o idee bună să verificați după cum se vede mai sus cu comanda „vgs‘. Capacitatea acestui grup de volume este de numai 9,99 GB. Deși acesta este un grup de volum deosebit de mic, procesul ar fi același pentru discuri cu capacitate mai mare!

Următorul pas este crearea volumului logic care va acționa ca disc pentru clientul iSCSI (inițiator). Pentru acest exemplu va fi folosită întregul grup de volume, dar nu este necesar.

Volumul logic va fi creat folosind comanda „lvcreate‘.


lvcreate -l 100%FREE tecmint_lun1 tecmint_iscsi
lvs  (Simply used to confirm the creation of the logical volume)

Comanda „lvcreate” de mai sus ar putea fi puțin confuză la prima vedere, dar defalcarea este așa:

  • lvcreate – Comanda folosită pentru a crea volumul logic.
  • -l 100% GRATUIT – Creați volumul logic folosind tot spațiul liber al grupului de volume.
  • -n tecmint_lun1 – Numele volumului logic care urmează să fie creat.
  • tecmint_iscsi – Numele grupului de volume pentru a crea volumul logic în interior.

Odată ce volumul logic a fost creat, este timpul să creați LUN (Numărul unității logice). LUN va fi dispozitivul de stocare la care inițiatorul se va conecta și îl va folosi mai târziu.

Crearea unui LUN este foarte simplă și necesită doar câțiva pași. Primul pas va fi crearea fișierului de configurare. Acest fișier se va afla în directorul „/etc/tgt/conf.d”, iar pentru acest articol se va numi „TecMint_iscsi.conf“.

Pentru a crea acest fișier, utilizați un editor de text.


nano /etc/tgt/conf.d/TecMint_iscsi.conf

În acest fișier, toate informațiile de configurare necesare pentru acest LUN vor fi configurate. Există o mulțime de opțiuni care pot fi plasate în acest fișier, dar deocamdată un LUN de bază cu Protocol de autentificare prin strângere de mână pentru provocări (CHAP) va fi configurat.

Definiția LUN va exista între două declarații „țintă”. Pentru mai mulți parametri care pot apărea în declarația țintă, consultați pagina de manual pentru fișierul „targets.conf‘ prin emiterea „man 5 targets.conf”.


<target iqn.2018-02.linux-console.net:lun1>
     # Provided device as an iSCSI target
     backing-store /dev/mapper/tecmint_iscsi-tecmint_lun1
     initiator-address 192.168.56.102
    incominguser tecmint-iscsi-user password
     outgoinguser debian-iscsi-target secretpass
</target>

Mai sus se întâmplă multe. O explicație rapidă poate fi utilă pentru majoritatea.

  • prima linie începe configurația iSCSI LUN particulară. În acest caz, LUN etichetat „iqn.2018-02.linux-console.net:lun1”. Partea „iqn” indică faptul că acesta va fi un nume calificat iSCSI. „2018-02” este o combinație de date aleasă în mod arbitrar. „linux-console.net” este domeniul căruia îi aparține acest anumit LUN. În cele din urmă, „lun1” este folosit ca nume pentru această țintă specială.
  • al doilea rând de mai sus ilustrează un comentariu. Comentariile pot exista în fișierele de configurare țintă și trebuie să fie prefațate cu simbolul „#”.
  • A a treia linie este locul unde există spațiul de stocare real care va fi utilizat de inițiator. În acest caz, suportul de stocare va fi volumul logic care a fost creat mai devreme în ghid.
  • a patra linie este adresa IP care este așteptată de la inițiator. Deși acesta nu este un element de configurare obligatoriu, poate ajuta la creșterea securității.
  • A cincea linie este numele de utilizator/parola primite. La fel ca adresa inițiatorului de mai sus, nici acest parametru nu este necesar, dar poate ajuta la securizarea LUN-ului. Deoarece acest ghid acoperă și iSCSI mutual CHAP, acest parametru este necesar. Această linie indică numele de utilizator și parola pe care ținta le va aștepta de la inițiator pentru a se conecta la acest LUN.
  • A șasea linie este numele de utilizator/parola pe care ținta le va furniza inițiatorului pentru a permite autentificarea CHAP reciprocă. În mod normal, acest parametru nu este necesar, dar acest articol acoperă autentificarea CHAP reciprocă, deci acest parametru este necesar.
  • Linia finală este declarația de închidere pentru definiția țintă. Acordați atenție barei oblice de închidere din fața cuvântului cheie vizat!

După ce au fost introduse configurațiile corespunzătoare pentru LUN, salvați modificările și părăsiți editorul de text. Dacă utilizați nano, apăsați pe ctrl+o pentru a salva, apoi apăsați pe ctrl+x pentru a ieși din nano.

Odată ce fișierul de configurare a fost creat, serviciul tgt ar trebui repornit, astfel încât tgt să fie conștient de noile ținte și de configurația asociată.

Acest lucru se poate face cu una dintre următoarele comenzi și depinde de sistemul de inițializare utilizat.


service tgt restart  (For sysv init systems)
systemctl restart tgt  (For systemd init systems)

Odată ce tgt a fost repornit, este important să verificați pentru a vă asigura că ținta iSCSI este disponibilă conform fișierului de configurare creat.

Acest lucru poate fi realizat cu comanda „tgtadm”.


tgtadm --mode target --op show   (This will show all targets)

Aceasta încheie configurarea țintei. Următoarea secțiune va funcționa prin configurarea inițiatorului.

Configurare Debian iSCSI Initiator

Următorul pas în utilizarea țintei iSCSI configurată anterior este configurarea iSCSI-ului.

Un alt sistem Debian 9 va fi folosit ca inițiator în acest articol, dar orice sistem care poate utiliza protocolul iSCSI se poate conecta la ținta configurată anterior; acestea ar putea include hipervizoare precum XenServer/ESXi sau alte distribuții precum Red Hat, Debian sau Ubuntu.

Primul pas în acest proces pentru acest inițiator Debian este instalarea pachetelor adecvate pentru iSCSI.


apt-get update
apt-get install open-iscsi

Odată ce apt a terminat configurarea pachetelor open-iscsi, configurarea iSCSI initiator poate începe. Primul pas va fi să comunicați cu ținta pentru a obține informațiile de configurare inițială pregătite pentru țintă.


iscsiadm -m discovery -t st -p 192.168.56.101

Când această comandă rulează, va răspunde cu numele lunului configurat mai devreme pentru această gazdă particulară. Comanda de mai sus va genera, de asemenea, două fișiere pentru informațiile LUN nou descoperite.

Acum, fișierul creat pentru acest nod va trebui să aibă informațiile CHAP configurate pentru ca această țintă iSCSI să fie efectiv accesibilă de către inițiator.

Din punct de vedere tehnic, aceste informații ar putea fi configurate pentru întregul sistem, dar în cazul în care o gazdă se conectează la diferite LUN cu acreditări diferite, plasarea acelor acreditări în fișierul de configurare a nodului specific poate atenua orice problemă.

Fișierul de configurare a nodului va exista în directorul „/etc/iscsi/nodes/” și va avea disponibil un director pe LUN. În cazul acestui articol (rețineți că căile se vor schimba dacă numele/adresele IP sunt modificate).


/etc/iscsi/nodes/iqn.2018-02.linux-console.net\:lun1/192.168.56.101\,3260\,1/default

Pentru a lucra cu acest fișier, poate fi folosit orice editor de text.


nano /etc/iscsi/nodes/iqn.2018-02.linux-console.net\:lun1/192.168.56.101\,3260\,1/default

În cadrul acestui fișier vor exista câteva opțiuni deja configurate pentru respectiva țintă care au fost determinate în timpul comenzii „iscsiadm‘ executate mai devreme.

Deoarece această configurație specială Debian țintă/inițiator folosește CHAP reciproc, mai multe opțiuni trebuie modificate și adăugate la acest fișier și apoi o conectare la ținta iSCSI efectuat.

Modificările aduse acestui fișier sunt:


node.session.auth.authmethod = CHAP                    #Enable CHAP Authentication
node.session.auth.username = tecmint-iscsi-user        #Target to Initiator authentication
node.session.auth.password = password                  #Target to Initiator authentication
node.session.auth.username_in = debian-iscsi-target    #Initiator to Target authentication
node.session.auth.password_in = secretpass             #Initiator to Target authentication

Opțiunile de mai sus vor permite acestei ținte să se autentifice la inițiatorul, precum și să permită inițiatorului să se autentifice la țintă >.

Există o altă opțiune în acest fișier special, care poate fi necesară modificarea în funcție de preferințele administratorului și care este parametrul „node.startup”.

Dacă urmați acest ghid, opțiunea „node.startup” va fi setată la „manual” în acest moment. Acest lucru poate să nu fie dorit. Dacă administratorul dorește să aibă ținta iSCSI conectată la pornirea sistemului, schimbați „manual” în „automat” ca atare:


node.startup = automatic

Odată ce modificările de mai sus au fost făcute, salvați fișierul și ieșiți. În acest moment, serviciul open-iscsi initiator trebuie repornit pentru a citi aceste noi modificări și a se conecta la ținta iSCSI.

Acest lucru poate fi realizat cu una dintre următoarele comenzi, în funcție de sistemul de init utilizat.


service open-iscsi restart   (For sysv init systems)
systemctl restart open-iscsi (For systemd init systems)

Observați în caseta verde de mai sus că inițiatorul iSCSI s-a putut conecta la țintă. Pentru a confirma în continuare că ținta iSCSI este într-adevăr disponibilă pentru inițiator, putem verifica sistemul pentru unități de disc suplimentare care sunt disponibile folosind „lsblk >' și verificarea ieșirii pentru unități suplimentare.


lsblk

Cealaltă comandă care poate fi utilizată pe inițiator pentru a confirma o conexiune la țintă este „iscsiadm” ca atare:


iscsiadm -m session

Locul final pentru a confirma o conexiune ar fi chiar pe țintă folosind comanda „tgtadm” pentru a lista orice conexiuni iSCSI.


tgtadm --mode conn --op show --tid 1

Din acest punct, dispozitivul iSCSI nou atașat poate fi utilizat similar cu orice disc atașat în mod normal! Partiționarea, crearea sistemului de fișiere, montarea și/sau montarea persistentă pot fi gestionate în mod normal.

O mare precauție de care trebuie să fiți conștienți de dispozitivele iSCSI este dacă ținta iSCSI conține sisteme de fișiere importante care sunt necesare pe măsură ce inițiatorul pornește, asigurați-vă că să utilizați intrarea „_netdev” din fișierul „/etc/fstab” pentru a vă asigura că dispozitivul iSCSI este conectat înainte ca sistemul să continue pornirea!