Differences

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

Link to this comparison view

saisp:labs:06:contents:04 [2013/11/11 00:46]
127.0.0.1 external edit
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. Lorem ipsum ====+==== 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 respectiveAcest lucru este posibil prin protocolul ''​iSCSI''​ care împachetează toate comenzile protocolului de comunicație cu discuri ''​SCSI''​ în pachete IPAstfel 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 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
 +</​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
 +Warning: Could not load preferences file /​root/​.targetcli/​prefs.bin.
 +targetcli GIT_VERSION (rtslib GIT_VERSION)
 +Copyright (c) 2011-2013 by Datera, Inc.
 +All rights reserved.
 +Loaded iscsi_target_mod kernel module.
 +[...]
 +/> ls
 +o- / ............................................... [...]
 +  o- backstores .................................... [...]
 +  | o- fileio ......................... [0 Storage Object]
 +  | o- iblock ......................... [0 Storage Object]
 +  | o- pscsi .......................... [0 Storage Object]
 +  | o- rd_dr .......................... [0 Storage Object]
 +  | o- rd_mcp ......................... [0 Storage Object]
 +  o- ib_srpt ................................. [0 Targets]
 +  o- iscsi ................................... [0 Targets]
 +  o- loopback ................................ [0 Targets]
 +  o- qla2xxx ................................. [0 Targets]
 +  o- tcm_fc .................................. [0 Targets]
 +</​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).
 +Dorim să creăm un ''​backstore''​ de tipul ''​fileio'':<​code bash>
 +/> cd backstores
 +/​backstores>​ cd fileio
 +/​backstores/​fileio>​ help create
 +SYNTAX
 +  create name file_or_dev [size] [generate_wwn] [buffered]
 +</​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
 +Generating a wwn serial.
 +Not using buffered mode.
 +Created fileio disk1.
 +</​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
 +/iscsi> help create
 +SYNTAX
 +  create [wwn]
 +/iscsi> create
 +Created target iqn.2003-01.org.linux-iscsi.storage1.x8664:​sn.25e09e86bb4d.
 +Selected TPG Tag 1.
 +Successfully created TPG 1.
 +</​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/​iqn.20....25e09e86bb4d>​ ls
 +o- iqn.2003-01.org.linux-iscsi.storage1.x8664:​sn.25e09e86bb4d .......... [1 TPG]
 +  o- tpgt1 ........................................................... [enabled]
 +    o- acls ........................................................... [0 ACLs]
 +    o- luns ........................................................... [0 LUNs]
 +    o- portals ..................................................... [0 Portals]
 +</​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...e86bb4d/​tpgt1>​ set parameter AuthMethod=None
 +Parameter AuthMethod is now '​None'​.
 +/​iscsi/​iqn.20...e86bb4d/​tpgt1>​ set attribute authentication=0
 +Parameter authentication is now '​0'​.
 +</​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:​
 +  * ''​acls''​ - filtrarea accesului ​
 +  * ''​luns''​ (Logical Unit Number) - dispozitiv logic adresat de client
 +  * ''​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 bash>
 +/​iscsi/​iqn.20...e86bb4d/​tpgt1>​ cd portals
 +/​iscsi/​iqn.20...tpgt1/​portals>​ create
 +Using default IP port 3260
 +Automatically selected IP address 192.168.1.1.
 +Successfully created network portal 192.168.1.1:​3260.
 +/​iscsi/​iqn.20...tpgt1/​portals>​ cd ..
 +</​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...4d/​tpgt1/​luns>​ create /​backstores/​fileio/​disk1
 +Selected LUN 0.
 +Successfully created LUN 0.
 +</​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
 +o- / .................................................................................... [...]
 +  o- backstores ......................................................................... [...]
 +  | o- fileio .............................................................. [1 Storage Object]
 +  | | o- disk1 ......................................................... [/disk1.img activated]
 +  | o- iblock .............................................................. [0 Storage Object]
 +  | o- pscsi ............................................................... [0 Storage Object]
 +  | o- rd_dr ............................................................... [0 Storage Object]
 +  | o- rd_mcp .............................................................. [0 Storage Object]
 +  o- ib_srpt ...................................................................... [0 Targets]
 +  o- iscsi ......................................................................... [1 Target]
 +  | o- iqn.2003-01.org.linux-iscsi.storage1.x8664:​sn.25e09e86bb4d ..................... [1 TPG]
 +  |   o- tpgt1 ...................................................................... [enabled]
 +  |     o- acls ...................................................................... [0 ACLs]
 +  |     o- luns ....................................................................... [1 LUN]
 +  |     | o- lun0 ................................................. [fileio/​disk1 (/​disk1.img)]
 +  |     o- portals ................................................................. [1 Portal]
 +  |       o- 192.168.1.1:​3260 ............................................. [OK, iser disabled]
 +  o- loopback ..................................................................... [0 Targets]
 +  o- qla2xxx ...................................................................... [0 Targets]
 +  o- tcm_fc ....................................................................... [0 Targets]
 +</​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.1384123598.txt.gz · Last modified: 2014/03/29 18:51 (external edit)
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