This shows you the differences between two versions of the page.
saisp:labs:06:contents:04 [2014/03/29 18:51] mihai.carabas [04. Lorem ipsum] |
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 bash> | ||
+ | /> saveconfig | ||
+ | WARNING: Saving storage1 current configuration to disk will overwrite your boot settings. | ||
+ | The current target configuration will become the default boot config. | ||
+ | Are you sure? Type 'yes': yes | ||
+ | </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 | ||
+ | </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:~# cat /etc/iscsi/initiatorname.iscsi | ||
+ | InitiatorName=iqn.2005-03.org.open-iscsi:fc35d7d3fc24 | ||
+ | </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 | ||
+ | /> cd /iscsi/iqn.2003-01.org.linux-iscsi.storage1.x8664:sn.25e09e86bb4d/tpgt1/ | ||
+ | /iscsi/iqn.20...e86bb4d/tpgt1> cd acls | ||
+ | /iscsi/iqn.20...4d/tpgt1/acls> help create | ||
+ | SYNTAX | ||
+ | create wwn [add_mapped_luns] | ||
+ | /iscsi/iqn.20...4d/tpgt1/acls> create iqn.2005-03.org.open-iscsi:fc35d7d3fc24 | ||
+ | Successfully created Node ACL for iqn.2005-03.org.open-iscsi:fc35d7d3fc24 | ||
+ | Created mapped LUN 0. | ||
+ | /iscsi/iqn.20...4d/tpgt1/acls> cd / | ||
+ | /> saveconfig | ||
+ | /> saveconfig | ||
+ | WARNING: Saving storage1 current configuration to disk will overwrite your boot settings. | ||
+ | The current target configuration will become the default boot config. | ||
+ | Are you sure? Type 'yes': yes | ||
+ | </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 | ||
+ | 192.168.1.1:3260,1 iqn.2003-01.org.linux-iscsi.storage1.x8664:sn.25e09e86bb4d | ||
+ | </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''). | ||
+ | |||
+ | 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 | ||
+ | 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. | ||
+ | </code> | ||
+ | Pentru a inspecta sesiunile active vom folosi modul ''session'' al utilitarului ''iscsi'':<code bash> | ||
+ | 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) | ||
+ | </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 | ||
+ | Target: iqn.2003-01.org.linux-iscsi.storage1.x8664:sn.25e09e86bb4d (non-flash) | ||
+ | Current Portal: 192.168.1.1:3260,1 | ||
+ | Persistent Portal: 192.168.1.1:3260,1 | ||
+ | ********** | ||
+ | Interface: | ||
+ | ********** | ||
+ | Iface Name: default | ||
+ | Iface Transport: tcp | ||
+ | Iface Initiatorname: iqn.2005-03.org.open-iscsi:fc35d7d3fc24 | ||
+ | Iface IPaddress: 192.168.1.2 | ||
+ | Iface HWaddress: <empty> | ||
+ | Iface Netdev: <empty> | ||
+ | SID: 1 | ||
+ | iSCSI Connection State: LOGGED IN | ||
+ | iSCSI Session State: LOGGED_IN | ||
+ | Internal iscsid Session State: NO CHANGE | ||
+ | </code> | ||
+ | |||
+ | În acest moment utilitarul ''iscsiadm'' a mai adăugat un disc pe client ''/dev/sdd'':<code bash> | ||
+ | root@storage2:~# dmesg|tail -10 | ||
+ | [10654.656653] scsi2 : iSCSI Initiator over TCP/IP | ||
+ | [10654.914445] scsi 2:0:0:0: Direct-Access LIO-ORG FILEIO 4.0 PQ: 0 ANSI: 5 | ||
+ | [10654.915060] sd 2:0:0:0: Attached scsi generic sg3 type 0 | ||
+ | [10654.918771] sd 2:0:0:0: [sdd] 204800 512-byte logical blocks: (104 MB/100 MiB) | ||
+ | [10654.921415] sd 2:0:0:0: [sdd] Write Protect is off | ||
+ | [10654.921418] sd 2:0:0:0: [sdd] Mode Sense: 43 00 00 08 | ||
+ | [10654.922477] sd 2:0:0:0: [sdd] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA | ||
+ | [10654.931024] sdd: unknown partition table | ||
+ | [10654.936476] sd 2:0:0:0: [sdd] Attached SCSI disk | ||
+ | </code> | ||
+ | Observați că discul e adăugat ca și un disc normal, conectat direct la stația respectivă. | ||
+ | |||
+ | 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> | ||
+ | <code bash> | ||
+ | root@storage2:~# fdisk /dev/sdd | ||
+ | root@storage2:~# mkfs.ext4 /dev/sdd1 | ||
+ | root@storage2:~# mount /dev/sdd1 /mnt/ | ||
+ | root@storage2:~# mount|grep sdd | ||
+ | /dev/sdd1 on /mnt type ext4 (rw,relatime,stripe=4096,data=ordered) | ||
+ | </code> | ||
+ | </solution> | ||
+ | Același LUN nu se poate monta pe 2 clienți diferiți decât dacă se folosește un sistem de fișiere ''shared'' (ex.: VMFS de la VMware - vezi [[saisp:courses:06]]). |