Differences

This shows you the differences between two versions of the page.

Link to this comparison view

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]]).
saisp/labs/06/contents/04.1396111871.txt.gz · Last modified: 2014/03/29 18:51 by mihai.carabas
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0