ISCSI kasutamine

Allikas: Kuutõrvaja
Redaktsioon seisuga 28. jaanuar 2008, kell 02:43 kasutajalt Imre (arutelu | kaastöö) (Multipath)

iSCSI tehnoloogia võimaldab üle tavalise TCP/IP võrgu ühendada klientarvutile külge nn block-device'i vastavat teenust pakkuvast serverist. Klientarvutit nimetatakse iSCSI initiatoriks ning serverit iSCSI target'iks.

See tehnoloogia on suhteliselt uus ja seetõttu ei maksa ehk vaba tarkvaralistest implementatsioonidest erilist stabiilsust oodata, arvestades lisaks asjaolu, et tegu on block-device teenusega, millega tegeletakse juurkasutajana. Aga teema on siiski väga integreeriv ja põnev! Kuna erinevates operatsioonisüsteemides on kasutusel erinevad implementatsioonid, siis universaalsuse huvides kirjeldame, kuidas lähtetekstidest seda tarkvara kasutada. Pala lõpus on ka viited operatsioonisüsteemide poolt pakutavatele võimalustele.

Tarkvara

Tundub, et initiatori osas on suurem arendajate tähelepanu koondunud projektile [http://www.open-iscsi.org/ ] ning targeti osas projektile [http://iscsitarget.sourceforge.net/].

iSCSI targeti paigaldamine

Target koosneb kahest osast

  1. iSCSI targeti utiliidid - deemon, tema seadistusfail ning juhtprogramm, vastavalt ietd, ietd.conf ning ietdadm
  2. kerneli moodulid - iscsi_trgt

Eelduseks on, et paigaldatud on 2.6.14 versioonist uuem Linuxi crypto võimega tuum ning tuuma lähtetekstid, sellisena nagu nad peale tuuma kompileerimist jäid, oleksid alles. Seejärel anda IET lähtetekstide kataloogis käsk 'make'.

Millegi katsetamiseks sobib selline ietd deemoni seadistusfail, eeldusel, et /dev/hda3 on katsetamiseks vaba partitsioon (block-device).

Target iqn.2006-01.com.example:storage.disk3
Lun 0 Path=/dev/hda3,Type=fileio
Alias Test

Ning käivitada deemon

/etc/init.d/iscsi-target start 

Targeti elutegevusest saab aimu sedasi

bash# cat /proc/net/iet/volume /proc/net/iet/session
 tid:1 name:iqn.2006-01.com.example:storage.disk3
       lun:0 state:0 iotype:fileio path:/dev/hda3
 tid:1 name:iqn.2006-01.com.example:storage.disk3
       sid:3660274212864512 initiator:iqn.1987-05.com.cisco:01.b5f4204e93f
               cid:0 ip:192.168.10.26 state:active hd:none dd:none 

ietadm programmi abil saab IET serveri töötamise ajal targeteid seadistada, sh neid lisada ja eemaldada. Lisamine toimub selliselt

 bash# ietadm --op new --tid=14 --params Name=iqn.2006-01.com.example:storage.disk4
 bash# ietadm --op new --tid=14 --lun=0 --params Path=/data/disk4.img

Autentimise tarvis saab öelda sedasi

 bash# ietadm --op new --tid=14 --user --params=IncomingUser=init,Password=initsaladus
 bash# ietadm --op new --tid=14 --user --params=OutgoingUser=target,Password=trgtsaladus

Eemaldamine toimub nt selliselt

 bash# ietadm --op delete --tid=9

iSCSI initiatori paigaldamine

Initiator koosneb kahest osast

  1. iSCSI initiatori utiliidid - deemon (nb! iscsi kliendi poolel töötab ka deemon), tema seadistusfail ning juhtprogramm, vastavalt iscsid, inititatorname.conf ning iscsiadm
  2. kerneli moodulid - scsi_transport_iscsi, iscsi_tcp

Eelduseks on, et paigaldatud on 2.6.14 versioonist uuem Linuxi crypto võimega tuum ning tuuma lähtetekstid, sellisena nagu nad peale tuuma kompileerimist jäid, oleksid alles. Seejärel anda lähtetekstide kataloogis käsk 'make'.

  1. (Serveris moodustada iSCSI shared ning anonüümselt subnetile välja jagada.)
  2. tekitada fail /etc/initiatorname.iscsi, nt sellise sisuga 'InitiatorName=iqn.1987-05.com.cisco.01.6727f456fe3f50c8274f4484bd7862d2'
  3. laadida moodulid scsi_transport_iscsi ja iscsi_tcp
  4. käivitada iscsid (seda saab käivitada logima ja nii et ta backgroundi ei lähe, vastavalt vajadusele), /etc/init.d/open-iscsi start | stop
  5. vaadake, mis shared on välja jagatud
bash# iscsiadm -m discovery -t sendtargets -p 192.168.10.19:3260
 192.168.10.19:3260,1 iqn.2006-01.com.example:storage.disk1
 192.168.10.19:3260,1 iqn.2006-01.com.example:storage.disk2
 192.168.10.19:3260,1 iqn.2006-01.com.example:storage.disk3

Targeti registreerimine kettana klientmasinas (initiator)

 bash# iscsiadm -m node -T iqn.2006-01.com.example:storage.disk1 -p 192.168.10.19:3260 -l

Targeti lahtiühendamine

 bash# iscsiadm -m node -T iqn.2006-01.com.example:storage.disk1 -p 192.168.10.19:3260 -u

Kliendi poolt kõiki olemasolevaid sessioone saab vaadata käsuga, lisades veel võtme -i näeb üksikasjalisemat infot

 bash# iscsiadm -m session 

Valmislahendused

Aadressil [http://www.openfiler.com] jagatakse arvutipõhist nö storage lahendust, lisaks iSCSI targeti tekitamise võimalusele tegeleb see ka CIFS ja NFS'iga. Olemas on ka spetsiaalsed riistvaralised iSCSI targeteid ja nende manageerimise vahendeid sisaldavad kastid erinevatelt tootjatelt, nt EMC ja NetApp.

iSCSI ietd targeti paigaldamine Debian Etch puhul

2007 aastal on see õnnelik aeg, kui ietd versioon 0.4.15 sobib kokku Debian Etchiga kaasneva 2.6 tuumaga. ietd serveri ehk targeti lähtetekstist kompileerimiseks tuleb esmalt paigaldada vajalikud vahendid, toimetame Xen tuuma näitel (kui on kasutusel mõni muu tuum, siis saab tuuma nime kindlaks teha 'uname -a' käsuga, muu tegevus on sarnane)

bash# cd /usr/src
bash# apt-get build-dep linux-image-2.6.18-4-xen-686
bash# apt-get install linux-headers-2.6.18-4-xen-686
bash# apt-get install libssl-dev
bash# tar zxf iscsitarget-0.4.15.tar.gz
bash# cd iscsitarget-0.4.15

Tarkvara kompileerimiseks ning paigaldamiseks tuleb öelda

bash:/usr/src/iscsitarget-0.4.15# make KSRC=/usr/src/linux-headers-2.6.18-4-xen-686
bash:/usr/src/iscsitarget-0.4.15# make KSRC=/usr/src/linux-headers-2.6.18-4-xen-686 install
install: creating directory `/lib/modules/2.6.18-4-xen-686/kernel/iscsi'
`kernel/iscsi_trgt.ko' -> `/lib/modules/2.6.18-4-xen-686/kernel/iscsi/iscsi_trgt.ko'
depmod -aq
`usr/ietd' -> `/usr/sbin/ietd'
`usr/ietadm' -> `/usr/sbin/ietadm'
`etc/initd/initd.debian' -> `/etc/init.d/iscsi-target'
`etc/ietd.conf' -> `/etc/ietd.conf'
`etc/initiators.allow' -> `/etc/initiators.allow'
`etc/initiators.deny' -> `/etc/initiators.deny'
`doc/manpages/ietadm.8' -> `/usr/share/man/man8/ietadm.8'
`doc/manpages/ietd.8' -> `/usr/share/man/man8/ietd.8'
`doc/manpages/ietd.conf.5' -> `/usr/share/man/man5/ietd.conf.5'
install: creating directory `/usr/share/doc/iscsitarget'
`ChangeLog' -> `/usr/share/doc/iscsitarget/ChangeLog'
`COPYING' -> `/usr/share/doc/iscsitarget/COPYING'
`README' -> `/usr/share/doc/iscsitarget/README'
`README.vmware' -> `/usr/share/doc/iscsitarget/README.vmware'

Kuigi antud juhul on tegu mõne tuuma mooduli, seadistusfaili ning programmifailiga ei ole üldiselt ilma paketihalduseta tarkvara paigaldamine korrektne.

Debian Etch puhul sobib paketihalduse 2.6 tuumaga kasutada operatsioonisüsteemi paketihalduses olevat open-iscsi initiatorit.

Initiatori kasutamine operatsioonisüsteemiga Solaris

Solaris 10 11/06 sisaldab pakette

system      SUNWiscsiu Sun iSCSI Management Utilities (usr)
system      SUNWiscsir Sun iSCSI Device Driver (root)

mille abil on võimalik kasutada võrgus paiknevat iSCSI targetit.

bash# iscsiadm add discovery-address iscsi.tartu.loomaaed.ee:3260
bash# iscsiadm modify discovery --sendtargets enable

Ning kui seejärel seadmetele lingid tekitada, siis ongi lisandunud ressursi ligipääs paista

bash# devfsadm -i iscsi
bash# format
  9. c15t2d0 <IET-VIRTUAL-DISK-0 cyl 1905 alt 2 hd 64 sec 256>
     /iscsi/disk@0000iqn.2007-08.ee.tartu.loomaaed.iscsi%3Astorage.disk30001,0

Klienti poolt saab targetiga peetava ühenduse andmeid vaadata selliselt

bash# iscsiadm list target -v iqn.2007-08.ee.tartu.loomaaed.iscsi:storage.disk3
Target: iqn.2007-08.ee.tartu.loomaaed.iscsi:storage.disk3
       Alias: -
       TPGT: 1
       ISID: 4000002a0000
       Connections: 1
               CID: 0
                 IP address (Local): 10.0.7.6:42003
                 IP address (Peer): 10.0.6.74:3260
                 Discovery Method: SendTargets 
                 Login Parameters (Negotiated):
                       Data Sequence In Order: yes
                       Data PDU In Order: yes
                       Default Time To Retain: 20
                       Default Time To Wait: 2
                       Error Recovery Level: 0
                       First Burst Length: 65536
                       Immediate Data: yes
                       Initial Ready To Transfer (R2T): yes
                       Max Burst Length: 262144
                       Max Outstanding R2T: 1
                       Max Receive Data Segment Length: 8192
                       Max Connections: 1
                       Header Digest: NONE
                       Data Digest: NONE

Ühenduse lõpetamiseks tuleb ressurss lahti ühendada, tavalise failisüsteemi puhul umount ning ZFS pooli puhul

bash# zpool export poolinimi

ning öelda

bash# iscsiadm modify discovery --sendtargets disable
bash# iscsiadm remove discovery-address iscsi.tartu.loomaaed.ee:3260

Samas või mõnes muus arvutis selle ZFS pooli sisaldav ressursi uuesti kasutusevõtmisel tuleb öelda

bash# zpool import poolinimi

iSCSI targeti kasutamine Solarisega

Targeti saab moodustada kahel viisil, mis erinevad selle poolest kuidas nn iSCSI serveri andmeid hoitakse

 * kasutades failisüsteemi
 * kasutades ZFS voluumi

Target kasutab failisüsteemi

Esmalt tuleb välja vaadata piisavalt vaba ruumi sisaldav failisüsteem, moodustada sinna kataloog

 bash# mkdir /data/iscsi-targetid

ning öelda

 bash# iscsitadm modify admin -d /data/iscsi-targetid
 ..

Target kasutab ZFS voluumi

Autentimine

IET ja Open-iSCSI target-initiator paar (tõenäoliselt ka muud võimalikud paarid) võimaldavad korraldada üksteise autentimist. Selleks tuleb targeti ietd.conf faili lisada Target sektsiooni read

 IncomingUser init initsaladus
 OutgoingUser target trgtsaladus

ning initiatori /etc/iscsi/iscsid.conf faili read

 node.session.auth.authmethod = CHAP
 node.session.auth.username = init
 node.session.auth.password = initsaladus
 node.session.auth.username_in = target
 node.session.auth.password_in = trgtsaladus

Muudatuste kehtestamise üheks võimaluseks on programmid ietd ning iscsid seisata ja käivitada ning initiatori poolel viia labi uuesti discovery.

Kusjuures, iscsid logib initiatori syslogi juhul kui inititator ei suuda ennast targetile autentida

 Oct 31 21:56:43 loomla iscsid: Login failed to authenticate with target iqn.2006-01.com.example:storage.disk1

ning juhul kui target ei suuda ennast initiatori vastu autentida

 Oct 31 21:55:17 loomla iscsid: failing authentication, received incorrect username from target iqn.2006-01.com.example:storage.disk1
 Oct 31 21:55:17 loomla iscsid: Login authentication failed with target iqn.2006-01.com.example:storage.disk1

Multipath

Multipath tehnika kasutamine võimaldab korraldada iSCSI kliendi ja serveri vahele mitu paralleelset ühendust, mis suurendab andmevahetuse kiirust ja teenuse redundantsust. Näiteks võiks korraldada seda nii serveri ja kliendi poolel, et kummaski otsas on kasutusel kolme füüsilist võrgukaarti: üle ühe võrgukaartide paari liiguvad tavalised andmed ning kaks ülejäänud paari on kasutusel vaid iSCSI ressursi kliendile kättesaadavaks tegemiseks. Et süsteem töötaks tuleks kõik paarid seadistada erinevatesse ip subnettidesse.

iSCSI serveri poolel ei ole seoses multipath kasutamisega tarvis midagi erinevat teha võrreldes tavalise iSCSI teenuse pakkumisega. iSCSI kliendi poolele tuleb lisaks paigaldada multipath tarkvara, Debian GNU/Linux puhul pakett multipath-tools (udev tarkvara on samuti oluline, aga see peaks olema olemas juba niigi seoses iSCSI tarkvaraga).

Enne multipath seadistamist peab klient nägema ühte ja sama iSCSI serveri ressurssi (targetit) üle kummagi etherneti-ühenduse, nt seadmetena /dev/sda ja /dev/sdb. See olukord saavutatakse tavapärasel moel, midagi erilist ei ole selleks kliendi ega serveri poolel tarvis teha

bash# iscsiadm -m node -T iqn.2008-01.com.example:storage.shared1 -p 192.168.10.251:3260 -l
bash# iscsiadm -m node -T iqn.2008-01.com.example:storage.shared1 -p 192.168.11.251:3260 -l

Kuna iSCSI abil toimub blokk-seadmetega toimetamine, siis ei ole probleemiks failide lukustamise küsimused ega muud sellist.

Multipathi tööleseadmiseks on tarvis moodustada sobiva sisuga /etc/multipath.conf seadistusfail

 defaults {
    user_friendly_names yes
 }
 defaults {
    udev_dir                /dev
    polling_interval        5
    default_selector        "round-robin 0"
    default_getuid_callout  "/lib/udev/scsi_id -g -u -s /block/%n"
    failback                immediate
 }
 blacklist {
    wwid    200d04efd1804f38e
    devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"
    devnode "^hd[a-z][[0-9]*]"
    devnode "^cciss!c[0-9]d[0-9]*[p[0-9]*]"
 }
 multipaths {
    multipath {
       wwid                    149455400000000000000000002000000d45f38000d000000
       alias                   shared1
       path_grouping_policy    failover
       path_checker            readsector0
 }

kusjuures multipath sektsiooni wwid väärtuse saab kindlaks teha küsides, mõlemal juhul peab tagastatama sama väärtus kuna tegu on ühe ja sama füüsilise ressurssiga

 bash# /lib/udev/scsi_id -g -u -s /block/sda
 149455400000000000000000002000000d45f38000d000000
 bash# /lib/udev/scsi_id -g -u -s /block/sdb
 149455400000000000000000002000000d45f38000d000000

Seejärel tuleb multipath tarkvara käivitada öeldes

 bash# /etc/init.d/multipath-tools start

Seadistusfaili muutmisel piisab reload'ist. Kui kõik läks õieti, siis annab käsk multipath sarnase väljundi

 bash # multipath -ll
 shared1 (149455400000000000000000002000000d45f38000d000000) dm-0 IET     ,VIRTUAL-DISK  
 [size=2.0G][features=0][hwhandler=0]
 \_ round-robin 0 [prio=1][enabled]
  \_ 26:0:0:0 sdb 8:32  [active][ready]
 \_ round-robin 0 [prio=1][enabled]
  \_ 25:0:0:0 sda 8:16  [active][ready]

ning on tekkinud kasutamiseks uus seade /dev/mapper/shared1

 bash# fdisk /dev/mapper/shared1 -l
 
 Disk /dev/mapper/shared1: 2147 MB, 2147483648 bytes
 255 heads, 63 sectors/track, 261 cylinders
 Units = cylinders of 16065 * 512 = 8225280 bytes
 Disk identifier: 0x00000000
 
 Disk /dev/mapper/vault1 doesn't contain a valid partition table

Seda seadet saab tavapärasel moel kasutama hakata, aga enne maksab veenduda, et tõepoolest, katkestades ühele seadmele vastava võrguühenduse, nt blokeerides liiklust iptables'iga või võrgukaabli eemaldamisega peaks jääma seade kasutusele, samal ajal multipaht käsk ütleb

 bash# multipath -l 
 shared1 (149455400000000000000000002000000d45f38000d000000) dm-0 IET     ,VIRTUAL-DISK  
 [size=2.0G][features=0][hwhandler=0]
 \_ round-robin 0 [prio=0][enabled]
  \_ 26:0:0:0 sdb 8:32  [failed][undef]
 \_ round-robin 0 [prio=0][enabled]
  \_ 25:0:0:0 sda 8:16  [active][undef]

Ning peale ühenduse tagasi tekkimist taastub endine olukord. Seejuures on oluline iscsid.conf failis parameetri node.conn[0].timeo.noop_out_timeout väärtus, see ei tohiks liiga pikka olla, selle jooksul on iSCSI ressurss mitte-kasutatavas olekus.

 # To specify the time to wait for a Nop-out response before failing
 # the connection, edit this line. Failing the connection will
 # cause IO to be failed back to the SCSI layer. If using dm-multipath
 # this will cause the IO to be failed to the multipath layer.
 # The value is in seconds and the default is 15 seconds.
 node.conn[0].timeo.noop_out_timeout = 15


Lihtsalt tuleb arvestada, et kui iSCSI kliendiks olevas arvutis ühe füüsilise ressurssi samaaegselt kahe seadme poole