W małych instalacjach łączenie zasobów za pomocą iSCSI stało się bardzo popularne, zatem postanowiłem w praktyce przetestować takie połączenia. Uważam, że jest to dobry i tani sposób na uruchomienie elastycznych środowisk serwerowych – do połączeń można wykorzystać trunk kilku łączy gigabitowego Ethernetu albo coraz popularniejsze i tańsze karty 10GbE. Testy przeprowadziłem w dwóch najważniejszych systemach – Windows Server 2012 i Ubuntu Linux 10.04 LTS Server.

Do testów wykorzystałem Synology DiskStation DS412+ z dwoma dyskami WD Red 3TB każdy. Konfiguracja tego serwera NAS jest prosta, po utworzeniu woluminu, wystarczyło wykreować iSCSI LUN i target.

Zamiast macierzy dyskowej można użyć serwera i skorzystać z usług iSCSI Target obecnych w obu najważniejszych systemach serwerowych, ale moim celem tym razem było pokazanie połączenia od strony klienta. Macierz po prostu działa.

W moim Ubuntu obsługa iSCSI już była zainstalowana. Gdyby jej nie było, wystarczy doinstalować paczki open-iscsi oraz open-iscsi-utils np. za pomocą Synaptica albo z wiersza poleceń (sudo apt-get install open-iscsi open-iscsi-utils). W Windows 2012 usługa odpowiedzialna za iSCSI jest zainstalowana, ale trzeba ją uruchomić.

Najpierw zająłem się Linuksem. Uruchomienie serwisu odbywa się standardowo:

root@hp-lapek:~# service open-iscsi start
* Starting iSCSI initiator service iscsid [ OK ]
* Setting up iSCSI targets [ OK ]

Pierwszym krokiem było rozpoznanie zasobów udostępnianych przez macierz dyskową o adresie 192.168.99.150 (moja wirtualna podsieć laboratoryjna):
# iscsiadm -m discovery -t st --portal 192.168.99.50
192.168.100.2:3260,0 iqn.2000-01.com.synology:diskstation.name
192.168.99.50:3260,0 iqn.2000-01.com.synology:diskstation.name

Jak widać, macierz posiada dwa adresy IP, z czego potrzebny jest tylko jeden. Warto ten drugi usunąć komendą iscsiadm -m node -p 192.168.100.2 --op=delete , by skrócić czas łączenia.
Logujemy się do macierzy via iSCSI:
# iscsiadm -m node iqn.2000-01.com.synology:diskstation.name --login
Logging in to [iface: default, target: iqn.2000-01.com.synology:diskstation.name, portal: 192.168.99.50,3260]
Login to [iface: default, target: iqn.2000-01.com.synology:diskstation.name, portal: 192.168.99.50,3260]: successful

Od teraz zasoby z macierzy są widoczne w systemie jako dysk, który jeszcze nie został przygotowany do pracy. Po wykreowaniu woluminu (użyłem systemu plików ReiserFS oraz systemowego szyfrowania), przedstawia się on tak samo, jak dysk lokalny i można z nim zrobić te same operacje systemowe – wykreować wolumin, partycje i tak dalej:

Po zakończeniu, możemy skorzystać w standardowy sposób, na przykład tak:

Oczywiście skrót utworzyłem chwilę wcześniej, by teraz móc go użyć.

Windows też to umie
Teraz pora na Windows – użyłem wersji testowej Windows Server 2012, którą zainstalowałem w maszynie wirtualnej przy okazji MTS, by sprawdzić współpracę z systemem desktopowym Windows 8.
Do konfiguracji iSCSI użyłem PowerShella. Moim zdaniem jest to jedna z największych innowacji, jakie Microsoft wprowadził do systemów serwerowych, znacznie ważniejsza od nowego graficznego interfejsu użytkownika.
Podobnie, jak w moim Ubuntu, w serwerze Windows 2012 należało uruchomić usługę iSCSI, tutaj odbywa się to za pomocą polecenia
Start-Service msiscsi
Następnie należy sprawdzić status zapory sieciowej, czy któraś z reguł nie blokuje połączeń wychodzących związanych z usługą msiscsi. Nie, nie blokuje. Następnie należało rozpoznać to, co udostępnia macierz za pomocą New-IscsiTargetPortal.

oraz połączyć się za pomocą Get-Iscsitarget | Connect-IscsiTarget

polecenie Get-iSCSISession | Get-Disk wyświetli dyski dostępne via iSCSI:

Od teraz można z tych dysków skorzystać, na przykład za pomocą standardowych narzędzi, utworzyć wolumin, partycję, przydzielić zasoby, ustawić uprawnienia, działać dalej.

Aby zasoby nie były łączone automatycznie, trzeba przy zasobie ustawić parametr IsPersistent = $False. W mojej instalacji Linuksa ustawiam zasoby iSCSI, by się łączyć automatycznie po wystartowaniu odpowiedniej usługi. W obu przypadkach testowałem wariant najprostszy, który zakładał brak uwierzytelnienia – po prostu po to, by pokazać, że to działa.

Jak szybko to działa? Zależy od łączy.
Dysk łączony via iSCSI zachowuje się podobnie jak wbudowany, ale w moim przypadku jest wolniejszy, gdyż laptop dysponuje jedynie interfejsem Ethernet o prędkości 100Mbit/s.

W obu systemach wolumin ma praktycznie identyczną wydajność, wąskim gardłem jest sieć 100Mbit/s – nawet włączenie szyfrowania na partycji w Ubuntu nie zmienia osiągów, podobnie nie ma istotnych różnic między systemami plików ext4, ReiserFS w Ubuntu czy NTFS w Windows 2012.
Podobne testy na większą skalę przeprowadziłem podczas konferencji EMC World 2012 w Las Vegas na bardzo szybkiej macierzy EMC VNX połączonej do serwera za pomocą Ethernetu 10Gbit/s – wtedy wolumin łączony po iSCSI był ponad 5x szybszy od mirrora z dwóch dysków lokalnych w serwerze. W obu badanych systemach – Red Hat Enterprise Linux Server 6 oraz Windows Server 2008R2 testowanych jednocześnie.

To działa
Jak widać, iSCSI działa dobrze w obu najważniejszych systemach, w niewielkich instalacjach jest to bardzo elastyczny i wystarczająco wydajny sposób połączenia do zasobów blokowych. W odróżnieniu od FibreChannel nie wymaga specjalnej konfiguracji przełączników FC, przeniesienie maszyny wirtualnej, która korzysta z iSCSI na inny fizyczny serwer nie stanowi problemu, dopóki widzi ona macierz po IP.

Trochę dokumentacji
Bardzo dobrą dokumentację dotyczącą zarządzania iSCSI w systemie Windows Server 2012 można znaleźć tu oraz tu i tu.
Dlaczego użyłem do iSCSI akurat PowerShella? Bo jest fajny 😉
Z kolei dla Linuksa prosty podręcznik o iSCSI można znaleźć tu.