Skip to content

www.LinVirt.nl

iSCSI Target - RedHat 6

auteur: Frederik Vos

Inleiding

Dit document beschrijft de installatie en configuratie van een iSCSI target onder Redhat 6.1. Het document is zowel geschikt voor Redhat 6.x, CentOS 6.x als Scientific Linux 6.x.

Redhat levert bij zijn distributie tgt mee, helaas wel in een verouderde versie (1.0.4). Deze zullen we dan ook in dit document updaten.

Ik ga in dit document uit van een minimale installatie van RedHat 6.1. Heb de setup zelf gebouwd op basis van Scientific Linux 6.1, minimale installatie (@core), uiteraard voorzien van de laatste updates.

Doel

Op basis van dit document bouw je een iSCSI oplossing die je kunt bouwen op zowel een fysieke machine als virtuele machine. De iSCSI target kun je vervolgens gebruiken binnen een VMware vSphere, Citrix XenServer of VirtualBox omgeving, of gewoon als een storage oplossing voor je desktops.

Benodigheden

Er zijn bij de iSCSI target een paar hardware eisen:

  • Minimaal 2GB geheugen, liefst 4GB of meer
  • Bij voorkeur 64-bits OS
  • 1 of meerdere lege harddisks, al dan niet met raid geconfigureerd

Aangezien ik tgt van source ga compileren zijn er wat dependencies te installeren:

yum install man gcc make patch openssl-devel perl perl-Config-General

Ik installeer de tgt versie van Redhat wel, dat zorgt er voor dat er juiste startscripts etc. zijn.

yum install scsi-target-utils sg3_utils

En aangezien het document geschreven is voor een minimale Redhat installatie, is er geen grafische omgeving. Om de software te downloaden is wellicht een text-based browser ook handig.

yum install elinks

Gebruik vervolgens elinks om de laatste versie (op moment van schrijven is dit versie 1.0.19) te downloaden van:
http://stgt.sourceforge.net

Installatie

Pak eerst het verkregen archiefbestand uit:

tar xzf tgt-1.0.19.tar.gz
cd tgt-1.0.19
make
make install

Configuratie harddisks

Ik maak graag gebruik van LVM, dit zorgt voor meer flexibiliteit in het toekennen van schijfruimte, en bovendien heeft LVM allerlei gave features als bijvoorbeeld het maken van snapshots.

Voor het gemak ga ik even uit van 1 lege harde schijf: /dev/sdb. Allereerst geef je aan dat deze schijf gebruikt moet worden door LVM, vervolgens ga je een volumegroup aanmaken met de naam iscsi-store en maakt meteen /dev/sdb onderdeel van dit volume. Als laatste maak je een zgn. logical volume, een 'partitie' aan met de naam iscsi-vol1 van bijvoorbeeld 8GB.

pvcreate /dev/sdb
vgcreate iscsi-store /dev/sdb
lvcreate -L 8G -n iscsi-vol1 iscsi-store

Configuratie tgt

De configuratie kan via de commandline gebeuren, maar ook via het configuratie bestand /etc/tgt/targets.conf. In dit bestand zijn diverse voorbeelden opgenomen en ook: man tgt-admin.

Hieronder de configuratie die ik gebruik:

<target iqn.2004-01.nl.xtg:iscsi-server1>
 direct-store /dev/mapper/iscsi--store-iscsi--vol1
 write-cache on
 initiator-address ALL
 incominguser gebruiker wachtwoord
 scsi_id 00010001
 vendor_id XTG
 lun 12
</target>

MaxRecvDataSegmentLength 131072
MaxXmitDataSegmentLength 131072
MaxBurstLength 262144
FirstBurstLength 262144
TargetRecvDataSegmentLength=262144
InitiatorRecvDataSegmentLength=262144
MaxOutstandingUnexpectedPDUs=0
MaxOutstandingR2T=1
MaxCommands=128

DataPDUInOrder=Yes
DataSequenceInOrder=Yes

HeaderDigest=None
DataDigest=None
InitialR2T=No
ImmediateData=Yes
DelayedAck=Yes

ErrorRecoveryLevel=0
IFMarker=No
OFMarker=No
DefaultTime2Wait=2
DefaultTime2Retain=0
OFMarkInt=Reject
IFMarkInt=Reject
MaxConnections=4
RDMAExtensions=No

Het eerste gedeelte definieert de target, configureert het te gebruiken volume en de chap authentication. In dit document ga ik verder niet in op deze configuratie. Voor meer informatie over de advanced parameters is het wellicht een goed idee om de rfc's te lezen:

Note: de gebruikte parameters zijn geschikt voor Citrix XenServer en VMware vSphere.

Nu de tgt service starten en ook laten opstarten bij het bootproces:

chkconfig tgtd on
service tgtd start

En als laatste stap de firewall configureren:

iptables --insert INPUT --match state --state new \
--proto tcp --dport 3260 --jump ACCEPT

service iptables save