This shows you the differences between two versions of the page.
saisp:labs:06:contents:04 [2014/03/29 22:48] mihai.carabas [04. Configurarea unui target iSCSI (Linux IO Target)] |
saisp:labs:06:contents:04 [2016/04/11 21:01] (current) alexandru.carp [04. [15p] Configurarea unei sesiuni iSCSI client-server] |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ==== 04. Configurarea unui target iSCSI (Linux IO Target) ==== | + | ==== 04. [15p] Configurarea unei sesiuni iSCSI client-server ==== |
- | Într-un sistem de tipul Cluster/Grid, deseori este necesară accesarea unui block-device de distanță, iar operațiile suportate să fie aceleași ca și cazul în care respectivul block-device (disc) este conectat local, direct la placa de bază a stației respective. Acest lucru este posibil prin protocolul ''iSCSI'' care transpune împachetează toate comenzile protocolului de comunicație cu discuri ''SCSI'' în pachete IP. Astfel este posibilă accesarea la distanță a oricărui disc, ba chiar partajarea acestuia între mai multe entități, nivelul de granularitate fiind blocul de date (nu mai există sistem de fișiere ca în cazul protocolului NFS). | + | Într-un sistem de tipul Cluster/Grid, deseori este necesară accesarea unui block-device de distanță, iar operațiile suportate să fie aceleași ca și cazul în care respectivul block-device (disc) este conectat local, direct la placa de bază a stației respective. Acest lucru este posibil prin protocolul ''iSCSI'' care împachetează toate comenzile protocolului de comunicație cu discuri ''SCSI'' în pachete IP. Astfel este posibilă accesarea la distanță a oricărui disc, ba chiar partajarea acestuia între mai multe entități, nivelul de granularitate fiind blocul de date (nu mai există sistem de fișiere ca în cazul protocolului NFS). |
- | În nomenclatura iSCSI, serverul ce pune la dispoziția clientului diferite block-device-uri poartă numele de ''target''. Pe Linux, target-ul iSCSI implicit inclus în nucleu se numește ''Linux IO''. Vom instala serverul de iSCSI pe stația ''storage1'' (pachetul poartă numele de ''targetcli'' cu opțiunea ''--no-install-recommends'' pentru a nu instala pachete recomandate, întrucât dimensiunea acestora este foarte marea).:<code> | + | În nomenclatura iSCSI, serverul ce pune la dispoziția clientului diferite block-device-uri poartă numele de ''target''. Pe Linux, target-ul iSCSI implicit inclus în nucleu se numește ''Linux IO''. Vom instala serverul de iSCSI pe stația ''storage1'' (pachetul poartă numele de ''targetcli'' cu opțiunea ''--no-install-recommends'' pentru a nu instala pachete recomandate, întrucât dimensiunea acestora este foarte mare).: |
+ | |||
+ | <note warning> | ||
+ | Inainte de a instala ''targetcli'', modificati, in ''/etc/apt/sources.list'', toate aparitiile lui ''jessie'' in ''wheezy'', apoi efectuati ''apt-get update''. | ||
+ | </note> | ||
+ | |||
+ | <code bash> | ||
root@storage1:~# apt-get install --no-install-recommends targetcli | root@storage1:~# apt-get install --no-install-recommends targetcli | ||
</code> | </code> | ||
- | ''targetcli'' este un ''command line interface'' creat pentru management-ul serverului de iSCSI (''target'') pe Linux. Target-ul LIO de pe Linux este capabil să exporte discuri ce au mediu de stocare discuri fizice sau fișiere printre altele. Vom deschide ''targetcli'' pe stația ''storage1'':<code> | + | ''targetcli'' este un ''command line interface'' creat pentru management-ul serverului de iSCSI (''target'') pe Linux. Target-ul LIO de pe Linux este capabil să exporte discuri ce au mediu de stocare discuri fizice sau fișiere. Vom deschide ''targetcli'' pe stația ''storage1'':<code bash> |
root@storage1:~# targetcli | root@storage1:~# targetcli | ||
Warning: Could not load preferences file /root/.targetcli/prefs.bin. | Warning: Could not load preferences file /root/.targetcli/prefs.bin. | ||
Line 29: | Line 35: | ||
</code> | </code> | ||
Cu ajutorul comenzii ''ls'' vedem toate configurațiile de la un moment dat. Acestea sunt organizate ca o ierarhie de fișiere. Observați toate tipurile de ''backstores'' care pot fi exportate. Noi vom lucra cu tipul ''fileio'' (fișiere) și ''iblock'' (discuri fizice). | Cu ajutorul comenzii ''ls'' vedem toate configurațiile de la un moment dat. Acestea sunt organizate ca o ierarhie de fișiere. Observați toate tipurile de ''backstores'' care pot fi exportate. Noi vom lucra cu tipul ''fileio'' (fișiere) și ''iblock'' (discuri fizice). | ||
- | Dorim să creăm un ''backstore'' de tipul ''fileio'':<code> | + | Dorim să creăm un ''backstore'' de tipul ''fileio'':<code bash> |
/> cd backstores | /> cd backstores | ||
/backstores> cd fileio | /backstores> cd fileio | ||
Line 36: | Line 42: | ||
create name file_or_dev [size] [generate_wwn] [buffered] | create name file_or_dev [size] [generate_wwn] [buffered] | ||
</code> | </code> | ||
- | Observați că putem să explorăm ierarhia de configurații folosind comanda ''cd''. Am folosit comanda ''help create'' pentru a vedea ce opțiuni avem pentru crearea unui ''backstore''. Vom crea un backstore de dimensiunea 100M ce are ca suport fișierul ''/disk1.img'':<code> | + | Observați că putem să explorăm ierarhia de configurații folosind comanda ''cd''. Am folosit comanda ''help create'' pentru a vedea ce opțiuni avem pentru crearea unui ''backstore''. Vom crea un backstore de dimensiunea 100M ce are ca suport fișierul ''/disk1.img'':<code bash> |
/backstores/fileio> create disk1 /disk1.img 100MB | /backstores/fileio> create disk1 /disk1.img 100MB | ||
Generating a wwn serial. | Generating a wwn serial. | ||
Line 42: | Line 48: | ||
Created fileio disk1. | Created fileio disk1. | ||
</code> | </code> | ||
- | Următorul pas va fi să creăm un ''IQN'' (iSCSI Qualified Name) pentru target-ul nostru în subierarhia de configurare ''iscsi'':<code> | + | Următorul pas va fi să creăm un ''IQN'' (iSCSI Qualified Name) pentru target-ul nostru în subierarhia de configurare ''iscsi'':<code bash> |
/backstores/fileio> cd /iscsi | /backstores/fileio> cd /iscsi | ||
/iscsi> help create | /iscsi> help create | ||
Line 52: | Line 58: | ||
Successfully created TPG 1. | Successfully created TPG 1. | ||
</code> | </code> | ||
- | În continuare vom dezactiva autentificarea asociată cu acest ''IQN''. Vom folosi comanda ''cd'' urmată de valoarea ''IQN'' generată pentru a intra în modul de configurare ale acesteia (puteți folosi ''auto-complete''), după care vom folosi intra:<code> | + | În continuare vom dezactiva autentificarea asociată cu acest ''IQN''. Vom folosi comanda ''cd'' urmată de valoarea ''IQN'' generată pentru a intra în modul de configurare ale acesteia (puteți folosi ''auto-complete''):<code bash> |
/iscsi> cd iqn.2003-01.org.linux-iscsi.storage1.x8664:sn.25e09e86bb4d/ | /iscsi> cd iqn.2003-01.org.linux-iscsi.storage1.x8664:sn.25e09e86bb4d/ | ||
/iscsi/iqn.20....25e09e86bb4d> ls | /iscsi/iqn.20....25e09e86bb4d> ls | ||
Line 61: | Line 67: | ||
o- portals ..................................................... [0 Portals] | o- portals ..................................................... [0 Portals] | ||
</code> | </code> | ||
- | Observați că trebuie să mergem pe intrarea ''tpgt1'' (este un tag intern asociat IQN-ului). Aici vom configura parametrii de autentificare:<code> | + | Observați că trebuie să mergem pe intrarea ''tpgt1'' (este un tag intern asociat IQN-ului). Aici vom configura parametrii de autentificare:<code bash> |
/iscsi/iqn.20....25e09e86bb4d> cd tpgt1/ | /iscsi/iqn.20....25e09e86bb4d> cd tpgt1/ | ||
/iscsi/iqn.20...e86bb4d/tpgt1> set parameter AuthMethod=None | /iscsi/iqn.20...e86bb4d/tpgt1> set parameter AuthMethod=None | ||
Line 68: | Line 74: | ||
Parameter authentication is now '0'. | Parameter authentication is now '0'. | ||
</code> | </code> | ||
+ | <note>In cazul in care nu puteti configura ''AuthMethod'', este suficient sa configurati doar ''authentication''.</note> | ||
+ | |||
Observați alte 3 sub-categorii de configurații: | Observați alte 3 sub-categorii de configurații: | ||
* ''acls'' - filtrarea accesului | * ''acls'' - filtrarea accesului | ||
* ''luns'' (Logical Unit Number) - dispozitiv logic adresat de client | * ''luns'' (Logical Unit Number) - dispozitiv logic adresat de client | ||
* ''portals'' - nivelul rețea prin care se va face legătura la target | * ''portals'' - nivelul rețea prin care se va face legătura la target | ||
- | În concluzie trebuie să creăm cel puțin un ''portal'' pentru accesul la IQN prin rețea:<code> | + | În concluzie trebuie să creăm cel puțin un ''portal'' pentru accesul la IQN prin rețea:<code bash> |
/iscsi/iqn.20...e86bb4d/tpgt1> cd portals | /iscsi/iqn.20...e86bb4d/tpgt1> cd portals | ||
/iscsi/iqn.20...tpgt1/portals> create | /iscsi/iqn.20...tpgt1/portals> create | ||
Line 80: | Line 88: | ||
/iscsi/iqn.20...tpgt1/portals> cd .. | /iscsi/iqn.20...tpgt1/portals> cd .. | ||
</code> | </code> | ||
- | Observați că automat a selectat adresa IP a interfeței ''eth0'' și portul ''3260''. Vom crea un dispozitiv logic cu ajutorul căruia vom referenția backstore-ul:<code> | + | Observați că automat a selectat adresa IP a interfeței ''eth0'' și portul ''3260''. Vom crea un dispozitiv logic cu ajutorul căruia vom referenția backstore-ul:<code bash> |
/iscsi/iqn.20...e86bb4d/tpgt1> cd luns | /iscsi/iqn.20...e86bb4d/tpgt1> cd luns | ||
/iscsi/iqn.20...4d/tpgt1/luns> create /backstores/fileio/disk1 | /iscsi/iqn.20...4d/tpgt1/luns> create /backstores/fileio/disk1 | ||
Line 86: | Line 94: | ||
Successfully created LUN 0. | Successfully created LUN 0. | ||
</code> | </code> | ||
- | În submeniul ''acls'' va trebuie să înregistrăm clienții iSCSI folosind ''IQN''-ul acestora. Deocamdată nu știm ''IQN-ul'' clienților, îl vom configura după ce instalăm clienții de iSCSI. Să vizualizăm configurația actuală:<code> | + | În submeniul ''acls'' va trebuie să înregistrăm clienții iSCSI folosind ''IQN''-ul acestora. Deocamdată nu știm ''IQN-ul'' clienților, îl vom configura după ce instalăm clienții de iSCSI. Să vizualizăm configurația actuală:<code bash> |
/> ls | /> ls | ||
o- / .................................................................................... [...] | o- / .................................................................................... [...] | ||
Line 109: | Line 117: | ||
o- tcm_fc ....................................................................... [0 Targets] | o- tcm_fc ....................................................................... [0 Targets] | ||
</code> | </code> | ||
- | Înainte să realizăm configurația clientului de iSCSI, vom salva configurația target-ului pentru a se păstra în cazul unui restart al serverului:<code> | + | Înainte să realizăm configurația clientului de iSCSI, vom salva configurația target-ului pentru a se păstra în cazul unui restart al serverului:<code bash> |
/> saveconfig | /> saveconfig | ||
WARNING: Saving storage1 current configuration to disk will overwrite your boot settings. | WARNING: Saving storage1 current configuration to disk will overwrite your boot settings. | ||
Line 116: | Line 124: | ||
</code> | </code> | ||
- | Pe sistemele Linux, clienții iSCSI trebuie să instaleze pachetul ''open-iscsi'' care conține comanda ''iscsiadmn''. Vom instala acest pachet pe stația ''storage2'':<code> | + | Pe sistemele Linux, clienții iSCSI trebuie să instaleze pachetul ''open-iscsi'' care conține comanda ''iscsiadm''. Vom instala acest pachet pe stația ''storage2'':<code bash> |
root@storage2:~# apt-get install open-iscsi | root@storage2:~# apt-get install open-iscsi | ||
</code> | </code> | ||
- | Vom genera un ''IQN'' pentru stația ''storage2'' folosind comanda ''iscsi-iname'' și vom pune numele în fișierul ''/etc/iscsi/initiatorname.iscsi'':<code> | + | Vom genera un ''IQN'' pentru stația ''storage2'' folosind comanda ''iscsi-iname'' și vom pune numele în fișierul ''/etc/iscsi/initiatorname.iscsi'':<code bash> |
root@storage2:~# iscsi-iname | root@storage2:~# iscsi-iname | ||
root@storage2:~# cat /etc/iscsi/initiatorname.iscsi | root@storage2:~# cat /etc/iscsi/initiatorname.iscsi | ||
Line 125: | Line 133: | ||
</code> | </code> | ||
- | Înainte de a termina configurarea clientului, trebuie să adăugăm IQN-ul clientului ''storage2'' în ACL-ul target-ului. Pe stația ''storage1''. Nu uitați să salvați configurația:<code> | + | Apoi, reporniti serviciul ''open-iscsi'': |
+ | <code> | ||
+ | root@storage2:~# service open-iscsi restart | ||
+ | </code> | ||
+ | |||
+ | Înainte de a termina configurarea clientului, trebuie să adăugăm IQN-ul clientului ''storage2'' în ACL-ul target-ului. Pe stația ''storage1''. Nu uitați să salvați configurația:<code bash> | ||
root@storage1:~# targetcli | root@storage1:~# targetcli | ||
/> cd /iscsi/iqn.2003-01.org.linux-iscsi.storage1.x8664:sn.25e09e86bb4d/tpgt1/ | /> cd /iscsi/iqn.2003-01.org.linux-iscsi.storage1.x8664:sn.25e09e86bb4d/tpgt1/ | ||
Line 143: | Line 156: | ||
</code> | </code> | ||
- | Ne întoarcem la configurația clientului ''storage2''. În primul rând clientul trebuie să verifice dacă există vreun target la adresa IP/hostname-ul serverului:<code> | + | Ne întoarcem la configurația clientului ''storage2''. În primul rând clientul trebuie să verifice dacă există vreun target la adresa IP/hostname-ul serverului:<code bash> |
root@storage2:~# iscsiadm --mode discovery --type st --portal 192.168.1.1 | root@storage2:~# iscsiadm --mode discovery --type st --portal 192.168.1.1 | ||
192.168.1.1:3260,1 iqn.2003-01.org.linux-iscsi.storage1.x8664:sn.25e09e86bb4d | 192.168.1.1:3260,1 iqn.2003-01.org.linux-iscsi.storage1.x8664:sn.25e09e86bb4d | ||
</code> | </code> | ||
Observați noțiunea de ''portal'' folosită și la client (la server am creat portal-ul ''192.168.1.1''). ''--type'' se referă la tipul pachetului folosit pentru ''discovery'' (''st=send target''). | Observați noțiunea de ''portal'' folosită și la client (la server am creat portal-ul ''192.168.1.1''). ''--type'' se referă la tipul pachetului folosit pentru ''discovery'' (''st=send target''). | ||
- | Comanda ''iscsiadm -m node -L all'' va face încerca să se autentifice automat la toate target-ul descoperite folosind modul ''discovery'' al comenzii ''iscsiadm'' (''--mode discovery''):<code> | + | |
+ | Comanda ''iscsiadm -m node -L all'' va face încerca să se autentifice automat la toate target-ul descoperite folosind modul ''discovery'' al comenzii ''iscsiadm'' (''--mode discovery''):<code bash> | ||
root@storage2:~# iscsiadm -m node -L all | root@storage2:~# iscsiadm -m node -L all | ||
Logging in to [iface: default, target: iqn.2003-01.org.linux-iscsi.storage1.x8664:sn.25e09e86bb4d, portal: 192.168.1.1,3260] (multiple) | Logging in to [iface: default, target: iqn.2003-01.org.linux-iscsi.storage1.x8664:sn.25e09e86bb4d, portal: 192.168.1.1,3260] (multiple) | ||
Login to [iface: default, target: iqn.2003-01.org.linux-iscsi.storage1.x8664:sn.25e09e86bb4d, portal: 192.168.1.1,3260] successful. | Login to [iface: default, target: iqn.2003-01.org.linux-iscsi.storage1.x8664:sn.25e09e86bb4d, portal: 192.168.1.1,3260] successful. | ||
</code> | </code> | ||
- | Pentru a inspecta sesiunile active vom folosi modul ''session'' al utilitarului ''iscsi'':<code> | + | Pentru a inspecta sesiunile active vom folosi modul ''session'' al utilitarului ''iscsi'':<code bash> |
root@storage2:~# iscsiadm -m session | root@storage2:~# iscsiadm -m session | ||
tcp: [1] 192.168.1.1:3260,1 iqn.2003-01.org.linux-iscsi.storage1.x8664:sn.25e09e86bb4d (non-flash) | tcp: [1] 192.168.1.1:3260,1 iqn.2003-01.org.linux-iscsi.storage1.x8664:sn.25e09e86bb4d (non-flash) | ||
</code> | </code> | ||
- | Pentru a vedea informații detaliate despre o sesiunea vom folosi parametrul ''-P'' al comenzii urmat de indexul sesiunii:<code> | + | Pentru a vedea informații detaliate despre o sesiuni vom folosi parametrul ''-P'' al comenzii urmat de nivelul de verbozitate (''1'', ''2'' sau ''3''):<code bash> |
root@storage2:~# iscsiadm -m session -P 1 | root@storage2:~# iscsiadm -m session -P 1 | ||
Target: iqn.2003-01.org.linux-iscsi.storage1.x8664:sn.25e09e86bb4d (non-flash) | Target: iqn.2003-01.org.linux-iscsi.storage1.x8664:sn.25e09e86bb4d (non-flash) | ||
Line 177: | Line 191: | ||
</code> | </code> | ||
- | În acest moment utilitarul ''iscsiadm'' a mai adăugat un disc pe client ''/dev/sdd'':<code> | + | În acest moment utilitarul ''iscsiadm'' a mai adăugat un disc pe client ''/dev/sdd'':<code bash> |
root@storage2:~# dmesg|tail -10 | root@storage2:~# dmesg|tail -10 | ||
[10654.656653] scsi2 : iSCSI Initiator over TCP/IP | [10654.656653] scsi2 : iSCSI Initiator over TCP/IP | ||
Line 193: | Line 207: | ||
Creați o tabelă de partiții și formatați discul cu un sistem de fișiere. Montați sistemul de fișiere creat și realizați operații de citire/scriere. | Creați o tabelă de partiții și formatați discul cu un sistem de fișiere. Montați sistemul de fișiere creat și realizați operații de citire/scriere. | ||
<solution -hidden> | <solution -hidden> | ||
- | <code> | + | <code bash> |
root@storage2:~# fdisk /dev/sdd | root@storage2:~# fdisk /dev/sdd | ||
root@storage2:~# mkfs.ext4 /dev/sdd1 | root@storage2:~# mkfs.ext4 /dev/sdd1 |