iSCSI szerver és kliens egyszerűen

Bizonyára sokakkal előfordult már, hogy egy tesztkörnyezet összeállításakor vagy az otthoni "szerverfarmon" jó lett volna egy kisebb-nagyobb SAN/NAS storage. Azok a szerencsések, akiknek a garázsában egy NetApp vagy más egyéb eszköz áll, nyugodtan továbblapozhatnak, a többiek számára viszont most hasznos bemutató következik.

A hálózati tárolók világában jónéhány éve használjuk az iSCSI technológiát, mint költséghatékony illesztési eljárást. Sok esetben valamilyen natív berendezés nyújtja a "szerver" funkcióit (ezt nevezzük targetnek), amelyhez kliensoldalról (ez az initiator) hardveres vagy szoftveres megoldással csatlakozunk. A szoftveres initiator használata viszonylag elterjedt, a legtöbb operációs rendszer tartalmaz valamilyen kész megoldást ehhez, target készítése azonban nem túl gyakori. Kerülhetünk azonban olyan helyzetbe, amelyben akár percek alatt össze kell dobnunk egy target-initiator környezetet (pl. virtuális gépek migrációja, cluster tesztelése). Lássuk, mi kell ehhez.

A Red Hat Enterprise Linux 5-ben jelent meg először a scsi-target-utils csomag, amelyben a tgt frameworknek köszönhetően lehetőségünk nyílik majd többek között iSCSI, Fibre Channel, SRP targetek készítésére, jelenleg azonban az alábbiak használhatók:

  • IBM VIO server (ibmvstgt)
  • iSCSI
  • Xen vscsifront/back

Ne felejtsük el, hogy a tgt technology preview állapotban van, vagyis éles adatokon történő kísérletezgetésre nem javasolt, ugyanakkor mindenképpen meg kell említenünk, hogy többhetes működés, sok node-ról való egyidejű, intenzív terhelés alatt sem találkoztunk semmilyen problémával.

Fogjuk meg kedvenc rendszerünket és telepítsük fel a csomagot, majd indítsuk el a szervert:

[root@server1 ~]# yum install scsi-target-utils
[root@server1 ~]# service tgtd start

A targetek, LUN-ok, backendek és ACL-ek beállítását egyaránt a tgtadm paranccsal fogjuk elvégezni, előtte azonban készítsük el azt a blokkeszközt, amelyet iSCSI-n szeretnénk kiosztani a klienseknek. Hozzunk létre például egy logikai kötetet:

[root@server1 ~]#  lvcreate -L 1G -n back1 server1

Készítsük el az első targetünket:

[root@server1 ~]# tgtadm --lld iscsi --op new --mode target --tid 1 \
 -T iqn.2001-04.com.example:storage

A target azonosítóját ún. iSCSI Qualified Name (IQN) formátumban adtuk meg.

Ellenőrizzük le, sikerült-e a művelet:

[root@server1 ~]# tgtadm --lld iscsi --op show --mode target
Target 2: iqn.2001-04.com.example:storage
    System information:
        Driver: iscsi
        Status: running
    I_T nexus information:
    LUN information:
        LUN: 0
            Type: controller
            SCSI ID: deadbeaf1:0
            SCSI SN: beaf10
            Size: 0
            Backing store: No backing store
    Account information:
    ACL information:

Remek! Készítsük el az első LUN-unkat, amelyhez rögtön hozzá is rendeljük a fent létrejött LV-t:

[root@server1 ~]# tgtadm --lld iscsi --op new --mode logicalunit \ 
--tid 1 --lun 1 -b /dev/server1/back1

Ismételt lekérdezésnél ilyesmit kell látnunk:

[root@server1 ~]# tgtadm --lld iscsi --op show --mode target
Target 1: iqn.2001-04.com.example:storage
    System information:
        Driver: iscsi
        Status: running
    I_T nexus information:
    LUN information:
        LUN: 0
            Type: controller
            SCSI ID: deadbeaf1:0
            SCSI SN: beaf10
            Size: 0
            Backing store: No backing store
        LUN: 1
            Type: disk
            SCSI ID: deadbeaf1:1
            SCSI SN: beaf11
            Size: 1G
            Backing store: /dev/server1/back1
    Account information:
    ACL information:

A biztonság kedvéért adjuk meg, mely hálózati tartomány számára tesszük elérhetővé a targetet:

[root@server1 ~]# tgtadm --lld iscsi --op bind --mode target --tid 1 -I 192.168.0.0/24
[root@server1 ~]# tgtadm --lld iscsi --op show --mode target
Target 1: iqn.2001-04.com.example:storage
    System information:
        Driver: iscsi
        Status: running
    I_T nexus information:
    LUN information:
        LUN: 0
            Type: controller
            SCSI ID: deadbeaf1:0
            SCSI SN: beaf10
            Size: 0
            Backing store: No backing store
        LUN: 1
            Type: disk
            SCSI ID: deadbeaf1:1
            SCSI SN: beaf11
            Size: 1G
            Backing store: /dev/server1/back1
    Account information:
    ACL information:
        192.168.0.0/24

Most következzék a másik oldal. Fogjunk egy klienst (a példánkban ez egy Fedora 10 lesz) és telepítsük rá az initiator csomagot:

[root@station10 ~]# yum install iscsi-initiator-utils

Egy kis konfiguráció következik: szerkesszük meg a /etc/iscsi/initiatorname.iscsi fájlt és tegyünk bele egy InitiatorAlias paramétert is:

[root@station10 ~]# cat /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.1994-05.com.fedora:f07785b4318
InitiatorAlias=station10

Indítsuk el a szolgáltatást a service iscsid start paranccsal.
Térképezzük fel, hogy a szerveren milyen targetek találhatóak:

[root@station10 ~]# iscsiadm --mode discovery --type sendtargets --portal 192.168.0.254
192.168.0.254:3260,1 iqn.2001-04.com.example:storage

Jegyezzük meg az itt látható targetnevet (iqn.2001-04.com.example:storage), ugyanis a következő parancs használatakor ennek a megadásával kell belépnünk a targetre, vagyis rögzítenünk a kapcsolatot:

[root@station10 ~]# iscsiadm --mode node --targetname iqn.2001-04.com.example:storage \ 
--portal 192.168.0.254 --login
Logging in to [iface: default, target: iqn.2001-04.com.example:storage, portal: 192.168.0.254,3260]
Login to [iface: default, target: iqn.2001-04.com.example:storage, portal: 192.168.0.254,3260]: successful

Utolsó lépésként nézzük meg, lett-e új diszkünk:

[root@station10 ~]# tail -15 /var/log/messages
Nov 23 19:48:38 station10 iscsid: iSCSI daemon with pid=2406 started!
Nov 23 19:50:06 station10 kernel: scsi4 : iSCSI Initiator over TCP/IP
Nov 23 19:50:06 station10 kernel: scsi 4:0:0:0: RAID              IET      Controler        0001 PQ: 0 ANSI: 5
Nov 23 19:50:06 station10 kernel: scsi 4:0:0:0: Attached scsi generic sg2 type 12
Nov 23 19:50:06 station10 kernel: scsi 4:0:0:1: Direct-Access     IET      VIRTUAL-DISK     0001 PQ: 0 ANSI: 5
Nov 23 19:50:06 station10 kernel: sd 4:0:0:1: [sdb] 25165824 512-byte hardware sectors (12885 MB)
Nov 23 19:50:06 station10 kernel: sd 4:0:0:1: [sdb] Write Protect is off
Nov 23 19:50:06 station10 kernel: sd 4:0:0:1: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
Nov 23 19:50:06 station10 kernel: sd 4:0:0:1: [sdb] 25165824 512-byte hardware sectors (12885 MB)
Nov 23 19:50:06 station10 kernel: sd 4:0:0:1: [sdb] Write Protect is off
Nov 23 19:50:06 station10 kernel: sd 4:0:0:1: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
Nov 23 19:50:07 station10 kernel: sdb: unknown partition table
Nov 23 19:50:07 station10 kernel: sd 4:0:0:1: [sdb] Attached SCSI disk
Nov 23 19:50:07 station10 kernel: sd 4:0:0:1: Attached scsi generic sg3 type 0
Nov 23 19:50:07 station10 iscsid: connection1:0 is operational now

A művelet sikerült, a kapott eszközt innentől fogva úgy használhatjuk, mint bármely más lokális diszkünket. Kellemes funkció, hogy a megszerzett eszköz(ök) azonosítóját a /var/lib/iscsi/nodes/ könyvtár alatt tárolja rendszerünk, így a jövőben a target használatához pusztán az iscsi nevű szolgáltatásnak kell elindulnia.

A target módosítása, további LUN-ok, ACL-ek hozzáadása a fenti logika alapján könnyedén elvégezhető. Jó kísérletezést kívánunk!