This shows you the differences between two versions of the page.
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 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 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]]). |