Úgy adódott, hogy saját környezet tervezek, és mivel shared storagera van szükség (és nem fájlszinten) ill. nincs komolyabb összeg SAN-ra és fiberoptic-ra, kézenfekvő volt, hogy iSCSI-t fogok használni. Sokáig gondolkoztam a platformon is, adta volna magát a BSD alapú FreeNAS, de performanciában nem olvastam róla meggyőzőt. Lehetett volna Solaris is az OS és persze még több más is, de az Ubuntu mellett döntöttem végül.
A lehetőségek:
Nos, itt lehetett válogatni. A leginkább ismert implementációk nagyrésze belekerült az Ubuntu repositorykba:
root@ubuntu-iscsi:~# apt-cache search iscsi open-iscsi - High performance, transport independent iSCSI implementation open-iscsi-utils - transitional dummy package tgt - Linux SCSI target user-space tools iscsitarget - iSCSI Enterprise Target userland tools iscsitarget-dkms - iSCSI Enterprise Target kernel module source - dkms version istgt - iSCSI userspace target daemon for Unix-like operating systems lio-utils - configuration tool for LIO core target
Néhányat ezek közül hamar kilőttem; nem tetszett a konfigja, nem tudta pont azt és pont úgy, ahogy szerettem volna, nem volt elég bőséges a diagnosztikája. Közben persze szorgosan nézegettem a fórumokat, kinek mi jött be leginkább, tesztek, benchmarkok, stb. Mindenképp olyat kerestem, ami kernelben ill. ahhoz „nagyon közel” fut (performancia). Így esett a választásom az SCST-re; amely azonban – nehogy szerencsém legyen – nincs benne a repoban. A saját oldalán azonban egy nagyon jó összehasonlító táblázatot találtam, amit végignézva az újabb fejlesztésű LIO-ra és az SCST-re szűkítettem a kört : http://scst.sourceforge.net/comparison.html
A LIO-t ki is próbáltam, szimpatikus, hogy saját shell-je van. Az is tetszett, hogy nem „csak” iSCSI-t támogat, hanem sok mást is, valós fibre-channel-t, stb. A konfigja mégis kicsit faramucinak tűnt, és – bár lehet, hogy nem adtam elég időt rá – de nem találtam olyan bőbeszédű diagnosztikát benne. Így maradt az SCST.
SCST – Generic SCSI Target Subsystem for Linux
Mit is tud? Lássuk a főbb feature-jeit:
- – lekezel „bármit” ami SCSI (iSCSI, Fibre Channel, FCoE, SAS, InfiniBand (SRP), Wide (parallel) SCSI, stb.)
– kernelben fut, tehát a performancia várhatóan jobb és kisebb overheaddel
– támogatja több SCSI eszköz típus kiajánlását (disk, cdrom, tape, stb.)
– FILEIO, BLOCKIO módok (fájlok, blockeszközök kiajánlása)
– NULLIO mód (performancia mérése, tesztek valós adatátvitel nélkül)
– VMWARE és Microsoft storage certification-nek megfelelt (ez tetszett, nekem is VMWARE környezetbe fog kelleni)
Ezeket meggyőzőnek találtam, így következett a teszt install.
Telepítés:
Mint említettem, repoban nem találtam, az oldalon levő leírást követve először is check-outoltam az svn trunk-ből:
# svn checkout svn://svn.code.sf.net/p/scst/svn/trunk scst-trunk
A parancs kiadása után szépen letölti nekünk a trunk-ágat.
Ezután nincs más dolgunk, mint lefordítani, ami nagyon egyszerű volt:
# make scst scst_install iscsi iscsi_install scstadm scstadm_install
Kevés idő, 2-3 perc, majd hasonlóképp ér véget a fordítás:
És kész is vagyunk. Ha nem történt volna meg az installkor, akkor az újraindulás utáni automatikus indulást beállíthatjuk, Ubuntu-n ez:
# update-rc.d scst defaults
A konfiguráció:
A SCST kettő konfigurációs fájlt használ:
– /etc/iscsi/initiatorname.iscsi (ez statikus, egyszer kell beállítani, egy egyedi initiatorname mindössze)
– /etc/scst.conf (ez a fő konfigurációs fájl; ezt megírhatjuk, de le is generálhatjuk)
A konfighoz én az userspaceben levő ‘scstadmin’ parancsot használtam, mellyel pár egyszerű lépés után kész is lett a iSCSI target. Lássuk ezeket!
1., Hozzuk létre targetet
# scstadmin -add_target iqn.2015-04.test.storage:tgt1 -driver iscsi
2., Hozzuk létre az iscsi virtualis eszközünket, hozzárendelve egy – jelen esetben – meglevő RAID metaeszközt
# scstadmin -open_dev my_own_vdisk01 -handler vdisk_fileio -attributes filename=/dev/md127,nv_cache=1
3., Hozzuk létre a LUN-t a targethez (felhasználva az előbb elkészített virtualis eszközt)
# scstadmin -add_lun 0 -driver iscsi -target iqn.2015-04.test.storage:tgt1 -device my_own_vdisk01
4., Engedélyezzük a targetet
# scstadmin -enable_target iqn.2015-04.test.storage:tgt1 -driver iscsi
5., Engedélyezzük az iscsi drivert
# scstadmin -set_drv_attr iscsi -attributes enabled=1
(itt rákérdez, hogy biztosan akarjuk-e, szóval „y” )
5., Végül írassuk ki a konfigot
# scstadmin -write_config /etc/scst.conf
Hogy néz ki ezután a konfigunk?
Látható, hogy nagyon egyszerű és áttekinthető a konfig is. Természetesen, ez jóval tovább finomítható, létrehozhatók ACL-ek, hogy kit és honnan engedjen hozzáférni a targetünkhöz; ám ez már egy működő iSCSI target, amely – akár Windows alól is – felcsatolható az initiator oldalon. Próbáljuk ki ezt is!
Windows 8.1-en ez a következőképpen néz ki:
Ezt elindítva a következő menüt látjuk:
Ha beírjuk a targetünk IP címét, valami ilyesmit fogunk látni:
Menjünk a Kötetek és eszközök fülre, majd nyomjuk meg az ‘Automatikus beállítás”-t:
Látjuk, hogy meg is jelent az eszközünk, egyelőre még elég furcsa névvel, de ez természetes, hiszen a rendszer még natív eszköznévvel látja, meghajtóként nem. A Lemezkezelőben pedig megjelent a kiajánlott LUN:
Ez most már tetszés szerint partícionálható, formázható – tehát: használatba vehető.
Mit láthatunk eközben a targeten, ha megnézzük a csatlakozást?
Illetve a diagnosztika a sessionről:
A paraméterek természetesen változtathatók.
Összegzés:
Az SCST nem mostani kezdeményezés, de a mai napig fejlesztik. Az, hogy kernelben fut, jobb performanciát eredményez. Olyan megoldást kerestem, ami adott esetben jól követhető, ha kell, debugolható, és a bőséges és beszédes kimeneteket, logokat tekintve ezt meg is kaptam. Természetesen tudunk – több hálózati kapcsolat esetén – LUN-okat több úton, multipath módon is kiajánlani, persze, ezt a kliensnek is támogatnia kell. Szerettem volna pár számszerű adattal is szolgálni, azonban ez az itthoni, gyorsnak nem mondható tesztkörnyezet miatt nem lenne releváns (azért 80-85 Megabájt / másodpercet így is sikerült kihozni egy sima gigabit etherneten keresztül, mind további tweak nélkül és a jumbo framek sem voltak bekapcsolva). Stabil és következetes megoldásnak találtam. Használni is fogom.