This is an old revision of the document!
În general, în centrele de date, dezvoltarea puterii de calcul a fost realizată pe orizontală (scale-out), preferându-se achiziționarea mai multor sisteme cu putere de calcul medie decât super-calculatoare integrate. S-a pus problema ca datele stocate să fie accesibile din orice nod al rețelei. Un serviciu ce poate oferi această facilitate este NFS (Network File System). În arhitectura NFS
există un server de stocare care va pune la dispoziție un subset al ierarhiei sale de directoare altor stații numite în continuare clienți.
Vom instala serverul de NFS pe stația storage1
(pe distribuții Debian-based pachetul poartă numele nfs-kernel-server
:
root@storage1:~# apt-get install nfs-kernel-server
Vom crea un director /nfs
cu un fișier test-nfs
în acesta:
root@storage1:~# mkdir /nfs root@storage1:~# echo test > /nfs/test-nfs
Toate directoarele exportate către clienți vor fi configurate în fișierul /etc/exports
. Vom exporta directorul /nfs
creat anterior:
root@storage1:~# cat /etc/exports |grep /nfs /nfs 192.168.1.2(rw,sync,no_subtree_check)
Pe prima poziție se află directorul care va fi exportat (/nfs
), pe a doua poziție se află adresa IP a clientului care va putea accesa acest director, iar în paranteză se află diferite atribute:
După configurarea fișierului /etc/exports
trebuie resetat serviciul NFS:
root@storage1:~# /etc/init.d/nfs-kernel-server restart
Pentru a testa funcționalitatea vom crea directorul /nfs
pe stația storage2
și vom monta directorul exportat de storage1
(este necesar să aveți instalat pachetul nfs-common
):
root@storage2:~# apt-get install nfs-common nfs-common is already the newest version. root@storage2:~# mkdir /nfs root@storage2:~# mount -t nfs storage1:/nfs /nfs root@storage2:~# ls -l /nfs/ total 4 -rw-r--r-- 1 root root 5 Mar 29 16:52 test-nfs
În general, este o bună practică să montăm directorul exportat în aceeași ierarhie și pe client, pentru ca sistemul de stocare să fie transparent utilizatorilor, indiferent de nodul folosit.
Încercați să creați un nou fișier sau să scrieți în fișierul existent:
root@storage2:~# touch /nfs/test-nfs2 touch: cannot touch ‘/nfs/test-nfs2’: Permission denied
Implicit serverul de NFS nu permite modificarea ierarhiei de directoare exportate dacă aceasta aparține utilizatorului privilegiat root
. Pentru a permite acest lucru trebuie adăugată opțiunea no_root_squash
la exportarea directorului și resetarea serverului de NFS:
root@storage1:~# cat /etc/exports |grep squash /nfs 192.168.1.2(rw,sync,no_subtree_check,no_root_squash) root@storage1:~# /etc/init.d/nfs-kernel-server restart
Observați faptul că acum putem modifica ierarhia de directoare:
root@storage2:~# touch /nfs/test-nfs2 root@storage2:~# ls -l /nfs/ total 4 -rw-r--r-- 1 root root 5 Mar 29 16:52 test-nfs -rw-r--r-- 1 root root 0 Mar 29 17:14 test-nfs2
Montați directorul /nfs
și pe stația storage3
. Nu uitați să adăugați adresa IP a acesteia în fișierul de configurare al serverului NFS și să îl resetați pe acesta (Hint: man exports; /IP networks
).
Stația storage3
are un disc /dev/sdb
ce se dorește a fi partajat cu celelalte două stații, iar calea comună de acces pentru toate 3 stațiile va fi /nfs-storage3
. Realizați configurațiile necesare pentru pentru a partaja discul /dev/sdb
de pe storage3
urmând pașii:
storage3
în directorul /nfs-storage3
/nfs-storage3
folosind prin serviciul de NFSstorage1
și storage2
directorul exportat de storage3
și creați câte un fișier de pe fiecare
Dorim ca montarea sistemul de fișiere NFS să fie realizată automat după un restart al mașinii virtuale. Acest lucru se poate realiza după același principiu al sistemelor de fișiere obișnuite, folosind fișierul /etc/fstab
:
root@storage1:~# cat /etc/fstab|grep storage3 storage3:/nfs-storage3 /nfs-storage3 nfs auto 0 0
Realizați configurația necesară pentru a monta automat sistemele de fișiere NFS pe stația storage2
, exportate de stațiile storage1
și storage3
.
Î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).:
targetcli
, modificati, in /etc/apt/sources.list
, toate aparitiile lui jessie
in wheezy
, apoi efectuati apt-get update
.
root@storage1:~# apt-get install --no-install-recommends targetcli
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
:
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]
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
:
/> cd backstores /backstores> cd fileio /backstores/fileio> help create SYNTAX create name file_or_dev [size] [generate_wwn] [buffered]
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
:
/backstores/fileio> create disk1 /disk1.img 100MB Generating a wwn serial. Not using buffered mode. Created fileio disk1.
Următorul pas va fi să creăm un IQN
(iSCSI Qualified Name) pentru target-ul nostru în subierarhia de configurare iscsi
:
/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.
Î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
):
/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]
Observați că trebuie să mergem pe intrarea tpgt1
(este un tag intern asociat IQN-ului). Aici vom configura parametrii de autentificare:
/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'.
AuthMethod
, este suficient sa configurati doar authentication
.
Observați alte 3 sub-categorii de configurații:
acls
- filtrarea accesului luns
(Logical Unit Number) - dispozitiv logic adresat de clientportals
- 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:
/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 ..
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:
/iscsi/iqn.20...e86bb4d/tpgt1> cd luns /iscsi/iqn.20...4d/tpgt1/luns> create /backstores/fileio/disk1 Selected LUN 0. Successfully created LUN 0.
Î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ă:
/> 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]
Î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:
/> 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
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
:
root@storage2:~# apt-get install open-iscsi
Vom genera un IQN
pentru stația storage2
folosind comanda iscsi-iname
și vom pune numele în fișierul /etc/iscsi/initiatorname.iscsi
:
root@storage2:~# iscsi-iname root@storage2:~# cat /etc/iscsi/initiatorname.iscsi InitiatorName=iqn.2005-03.org.open-iscsi:fc35d7d3fc24
Apoi, reporniti serviciul open-iscsi
:
root@storage2:~# service open-iscsi restart
Î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:
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
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:
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
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
):
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.
Pentru a inspecta sesiunile active vom folosi modul session
al utilitarului iscsi
:
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)
Pentru a vedea informații detaliate despre o sesiuni vom folosi parametrul -P
al comenzii urmat de nivelul de verbozitate (1
, 2
sau 3
):
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
În acest moment utilitarul iscsiadm
a mai adăugat un disc pe client /dev/sdd
:
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
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.
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 Curs 06 - Sisteme de fișiere în rețea).
Vom mai crea un nou LUN
ce are ca backstore
tot un fișier:
/backstores/fileio> create disk2 /disk2.img 100M Generating a wwn serial. Not using buffered mode. Created fileio disk2. /backstores/fileio> cd /iscsi/iqn.2003-01.org.linux-iscsi.storage1.x8664:sn.25e09e86bb4d/tpgt1/luns/ /iscsi/iqn.20...4d/tpgt1/luns>
Vom mai crea încă un LUN
asociat backstore-ului disk2.img
:
/iscsi/iqn.20...4d/tpgt1/luns> create /backstores/fileio/disk2 1 Successfully created LUN 1. Created mapped LUN 1 in node ACL iqn.2005-03.org.open-iscsi:fc35d7d3fc24
Observați că în mod implicit acesta s-a adăugat automat pentru clientul storage2
(la IQN-ul acestuia). Dorim să scoatem această mapare:
/iscsi/iqn.20...4d/tpgt1/luns> cd ../acls/iqn.2005-03.org.open-iscsi:fc35d7d3fc24 /iscsi/iqn.20...:fc35d7d3fc24> ls o- iqn.2005-03.org.open-iscsi:fc35d7d3fc24 ........................................... [2 Mapped LUNs] o- mapped_lun0 ......................................................................... [lun0 (rw)] o- mapped_lun1 ......................................................................... [lun1 (rw)] /iscsi/iqn.20...:fc35d7d3fc24> delete 1 Deleted Mapped LUN 1.
Creați un backstore
de tip physical device (Hint: iblock
) folosind discul /dev/sdb
de pe stația storage1
. Asociați backstore
-ul creat cu un LUN și montați-l pe stația storage3
. Nu uitați să mapați IQN-ul stației storage3
la noul LUN.
LUN 2
. Eliminați de asemenea LUN 2
de la IQN-ul stației storage2
.