Kapitel 11. Massenspeicher über IP-Netzwerke – iSCSI

Inhaltsverzeichnis

11.1. Einrichten eines iSCSI-Ziels
11.2. Konfigurieren eines iSCSI-Initiators

Eine zentrale Aufgabe in Rechenzentren und beim Betreiben von Servern ist die Bereitstellung von Festplattenkapazität für Serversysteme. Im Mainframe-Sektor wird dafür häufig Fiber-Channel verwendet. Bisher sind UNIX-Computer und die überwiegende Zahl der Server nicht mit zentralen Speicherlösungen verbunden.

linux-iSCSI bietet eine einfache und ziemlich preiswerte Lösung für den Anschluss von Linux-Computern an zentrale Speichersysteme. Im Prinzip repräsentiert iSCSI eine Übertragung von SCSI-Befehlen auf IP-Ebene. Wenn ein Programm eine Anfrage an ein solches Gerät startet, generiert das Betriebssystem die erforderlichen SCSI-Befehle. Diese werden dann in IP-Pakete eingebettet und durch Software verschlüsselt, die als iSCSI-Initiator bezeichnet wird. Die Pakete werden dann an die entsprechende entfernte iSCSI-Station, auch iSCSI-Ziel genannt, übertragen.

Viele Speicherlösungen bieten Zugriff über iSCSI, jedoch ist es auch möglich, einen Linux-Server zu betreiben, der ein iSCSI-Ziel bereitstellt. In diesem Fall ist es wichtig, dass der Linux-Server für Dateisystemdienste optimiert ist. Das iSCSI-Ziel greift nur auf Block-Geräte in Linux zu. Daher ist es möglich, RAID-Lösungen zur Vergrößerung des Festplattenspeichers sowie viel Arbeitsspeicher zum besseren Daten-Caching zu verwenden. Weitere Informationen zu RAID erhalten Sie auch unter Abschnitt 6.2, „Soft-RAID-Konfiguration“.

11.1. Einrichten eines iSCSI-Ziels

SUSE® Linux Enterprise Server wird mit einer Open-Source-Lösung eines iSCSI-Ziels geliefert, die sich aus dem Ardis iSCSI-Ziel entwickelt hat. Eine grundlegende Konfiguration kann mit YaST erfolgen, aber um alle Vorteile von iSCSI zu nutzen, ist eine manuelle Einrichtung erforderlich.

11.1.1. Erstellen von iSCSI-Zielen mit YaST

Die iSCSI-Zielkonfiguration exportiert bestehende Block-Geräte oder Dateisystem-Images an iSCSI-Initiatoren. Erstellen Sie zunächst die erforderlichen Block-Geräte mit YaST oder erstellen Sie Dateisystem-Images. Einen Überblick über Partitionierung erhalten Sie in Abschnitt 7.5.8, „Partitionierung“. Dateisystem-Images müssen manuell erstellt werden. Beispiel: Wenn Sie das Image /var/lib/xen/images/xen-0 mit der Größe 4 GB erstellen möchten, stellen Sie zunächst sicher, dass das Verzeichnis vorhanden ist, und legen Sie dann das eigentliche Image an:

mkdir -p /var/lib/xen/images
dd if=/dev/zero of=/var/lib/xen/images/xen-0 seek=1M bs=4096 count=1

Um das iSCSI-Ziel zu konfigurieren, führen Sie das Modul iSCSI-Ziel in YaST aus. Die Konfiguration ist in drei Registerkarten gegliedert. Wählen Sie in der Registerkarte Service den Startmodus und die Firewall-Einstellungen. Wenn Sie von einem entfernten Computer auf das iSCSI-Ziel zugreifen möchten, wählen Sie Firewall-Port öffnen.

Die Registerkarte Global bietet Einstellungen für den iSCSI-Server. Die hier eingestellte Authentifizierung wird zur Erkennung von Diensten, nicht für den Zugriff auf die Ziele verwendet. Wenn Sie den Zugriff auf die Erkennung nicht beschränken möchten, wählen Sie Keine Authentifizierung.

Wenn Authentifizierung erforderlich ist, gibt es zwei Möglichkeiten. Bei der einen Möglichkeit muss ein Initiator beweisen, dass er berechtigt ist, eine Erkennung auf dem iSCSI-Ziel auszuführen. Dies geschieht mit Eingehende Authentifizierung. Bei der anderen Möglichkeit muss das iSCSI-Ziel dem Initiator beweisen, dass es das erwartete Ziel ist. Daher kann das iSCSI-Ziel auch einen Benutzernamen und ein Passwort angeben. Dies geschieht mit Ausgehende Authentifizierung. Weitere Informationen zur Authentifizierung finden Sie in RFC 3720 (siehe http://www.ietf.org/rfc/rfc3720.txt).

Die Ziele werden in der Registerkarte Ziele definiert. Mit Hinzufügen erstellen Sie ein neues iSCSI-Ziel. Im ersten Dialogfeld werden Informationen zu dem zu exportierenden Gerät angefordert.

Ziel

Die Zeile Ziel hat eine feste Syntax und sieht etwa wie folgt aus:

iqn.yyyy-mm.<reversed domain name>

Sie beginnt stets mit iqn. jjjj-mm ist das Format des Datums, an dem dieses Ziel aktiviert wird. Weitere Informationen zu Namenskonventionen finden Sie in RFC 3722 (siehe http://www.ietf.org/rfc/rfc3722.txt).

Bezeichner

Der Bezeichner ist frei wählbar. Er sollte einem Schema folgen, um das ganze System besser zu strukturieren.

LUN

Es ist möglich, einem Ziel mehrere LUNs zuzuweisen. Dies wird jedoch mit YaST nicht unterstützt. Daher sollte dies immer auf den Wert 0 eingestellt sein.

Pfad

Fügen Sie diesen Pfad dem Block-Gerät oder Dateisystem-Image hinzu, das exportiert werden soll.

Das nächste Menü konfiguriert die Zugriffsbeschränkungen des Ziels. Die Konfiguration ist sehr ähnlich der Konfiguration der Erkennungsauthentifizierung. In diesem Fall sollte mindestens eine eingehende Authentifizierung eingerichtet werden.

Weiter beendet die Konfiguration des neuen Ziels und bringt Sie zurück zur Übersichtseite der Registerkarte Ziel. Aktivieren Sie Ihre Änderungen, indem Sie auf Beenden klicken.

11.1.2. Manuelle Konfiguration eines iSCSI-Ziels

Konfigurieren Sie ein iSCSI-Ziel in /etc/ietd.conf. Alle Parameter in dieser Datei vor der ersten Target-Deklaration sind für die Datei global. Authentifizierungsinformationen in diesem Bereich haben eine besondere Bedeutung: Sie sind nicht global, werden aber für die Erkennung des iSCSI-Ziels verwendet.

Sämtliche iSCSI-Authentifizierungen sind in zwei Richtungen möglich. Das iSCSI-Ziel kann verlangen, dass sich der iSCSI-Initiator mit dem IncomingUser authentifiziert, der mehrmals hinzugefügt werden kann. Der iSCSI-Initiator kann auch verlangen, dass sich das iSCSI-Ziel authentifiziert. Verwenden Sie dafür OutgoingUser. Beide haben dieselbe Syntax:

IncomingUser <username> <password>
OutgoingUser <username> <password>

Auf die Authentifizierung folgen eine oder mehrere Zieldefinitionen. Fügen Sie für jedes Ziel einen Abschnitt Target hinzu. Dieser Abschnitt beginnt immer mit dem Bezeichner Target, auf die Definitionen von logischen Einheitennummern (LUNs) folgen:

Target iqn.yyyy-mm.<reversed domain name>[:identifier]
          Lun 0 Path=/dev/mapper/system-v3
          Lun 1 Path=/dev/hda4
          Lun 2 Path=/var/lib/xen/images/xen-1,Type=fileio

In der Zeile Target gibt yyyy-mm das Datum an, an dem dieses Ziel aktiviert wird, und der Bezeichner ist frei wählbar. Weitere Informationen zu Namenskonventionen finden Sie in RFC 3722 (siehe http://www.ietf.org/rfc/rfc3722.txt). Drei verschiedene Block-Geräte werden in diesem Beispiel exportiert. Das erste ist ein logisches Volume (siehe auch Abschnitt 6.1, „LVM-Konfiguration“), das zweite ist eine IDE-Partition und das dritte ist ein Image, das im lokalen Dateisystem verfügbar ist. Für einen iSCSI-Initiator sehen alle wie Block-Geräte aus.

Bevor Sie das iSCSI-Ziel aktivieren, fügen Sie mindestens einen IncomingUser nach den Lun-Definitionen hinzu. Damit wird die Authentifizierung für die Verwendung dieses Ziels festgelegt.

Um alle Änderungen zu aktivieren, starten Sie den iscsitarget-Daemon neu mit rciscsi restart. Prüfen Sie Ihre Konfiguration im Dateisystem /proc:

cat /proc/net/iet/volume
tid:1 name:iqn.2006-02.com.example.iserv:systems
        lun:0 state:0 iotype:fileio path:/dev/mapper/system-v3
        lun:1 state:0 iotype:fileio path:/dev/hda4
        lun:2 state:0 iotype:fileio path:/var/lib/xen/images/xen-1

Es gibt noch viele weitere Optionen, die das Verhalten des iSCSI-Ziels steuern. Informationen dazu finden Sie auf der Manualpage von ietd.conf.

Aktive Sitzungen werden ebenfalls im Dateisystem /proc angezeigt. Für jeden Initiator wird ein zusätzlicher Eintrag zu /proc/net/iet/session hinzugefügt:

cat /proc/net/iet/session
tid:1 name:iqn.2006-02.com.example.iserv:system-v3
   sid:562949957419520 initiator:iqn.2005-11.de.suse:cn=rome.example.com,01.9ff842f5645
      cid:0 ip:192.168.178.42 state:active hd:none dd:none
   sid:281474980708864 initiator:iqn.2006-02.de.suse:01.6f7259c88b70
      cid:0 ip:192.168.178.72 state:active hd:none dd:none

11.1.3. Konfigurieren von Online-Zielen mit ietadm

Wenn Änderungen an der iSCSI-Zielkonfiguration erforderlich sind, müssen Sie immer das Ziel neu starten, um die Änderungen zu aktivieren, die in der Konfigurationsdatei vorgenommen wurden. Leider werden alle aktiven Sitzungen durch diesen Vorgang unterbrochen. Um einen ungestörten Betrieb zu wahren, sollten die Änderungen in der Hauptkonfigurationsdatei /etc/ietd.conf erfolgen, aber auch manuell in der aktuellen Konfiguration mit dem Administrationsdienstprogramm ietadm vorgenommen werden.

Um ein neues iSCSI-Ziel mit einer LUN zu erstellen, aktualisieren Sie zunächst Ihre Konfigurationsdatei. Der zusätzliche Eintrag könnte folgendermaßen aussehen:

Target iqn.2006-02.com.example.iserv:system2
          Lun 0 Path=/dev/mapper/system-swap2
          IncomingUser joe secret

So richten Sie diese Konfiguration manuell ein:

  1. Erstellen Sie ein neues Ziel mit dem Befehl ietadm --op new --tid=2 --params Name=iqn.2006-02.com.example.iserv:system2.

  2. Fügen Sie eine logische Einheit hinzu mit ietadm --op new --tid=2 --lun=0 --params Path=/dev/mapper/system-swap2.

  3. Definieren Sie die Kombination aus Benutzername und Passwort für dieses Ziel mit ietadm --op new --tid=2 --user --params=IncomingUser=joe,Password=secret.

  4. Prüfen Sie die Konfiguration mit cat /proc/net/iet/volume.

Sie können auch aktive Verbindungen löschen. Prüfen Sie zunächst alle aktiven Verbindungen mit dem Befehl cat /proc/net/iet/session. Das kann wie folgt aussehen:

cat /proc/net/iet/session
tid:1 name:iqn.2006-03.com.example.iserv:system
        sid:281474980708864 initiator:iqn.1996-04.com.example:01.82725735af5
                cid:0 ip:192.168.178.72 state:active hd:none dd:none

Um die Sitzung mit der Sitzungs-ID 281474980708864 zu löschen, verwenden Sie den Befehl ietadm --op delete --tid=1 --sid=281474980708864 --cid=0. Beachten Sie, dass das Gerät dadurch auf dem Clientsystem unzugänglich wird und sich Prozesse, die auf dieses Gerät zugreifen, wahrscheinlich aufhängen.

ietadm kann auch zum Ändern verschiedener Konfigurationsparameter verwendet werden. Beziehen Sie eine Liste der globalen Variablen mit ietadm --op show --tid=1 --sid=0. Die Ausgabe sieht wie folgt aus:

InitialR2T=Yes
ImmediateData=Yes
MaxConnections=1
MaxRecvDataSegmentLength=8192
MaxXmitDataSegmentLength=8192
MaxBurstLength=262144
FirstBurstLength=65536
DefaultTime2Wait=2
DefaultTime2Retain=20
MaxOutstandingR2T=1
DataPDUInOrder=Yes
DataSequenceInOrder=Yes
ErrorRecoveryLevel=0
HeaderDigest=None
DataDigest=None
OFMarker=No
IFMarker=No
OFMarkInt=Reject
IFMarkInt=Reject

All diese Parameter lassen sich auf einfache Weise ändern. Wenn Sie beispielsweise die maximale Anzahl der Verbindungen auf zwei ändern möchten, verwenden Sie ietadm --op update --tid=1 --params=MaxConnections=2. In der Datei /etc/ietd.conf sollte die zugehörige Leitung aussehen wie MaxConnections 2.

[Warning]Aktualisieren von ietd.conf gemäß den Änderungen mithilfe von ietadm

Die Änderungen, die Sie mit dem Befehl ietadm vornehmen, sind für das System nicht permanent. Diese Änderungen gehen beim nächsten Neubooten verloren, wenn sie nicht in die Konfigurationsdatei /etc/ietd.conf aufgenommen werden. Abhängig von der Nutzung von iSCSI in Ihrem Netzwerk kann dies zu ernsten Problemen führen.

Es gibt etliche weitere Optionen für den Befehl ietadm. Einen Überblick erhalten Sie mit ietadm -h. Die Abkürzungen sind dort die Ziel-ID (tid), Sitzungs-ID (sid) und Verbindungs-ID (cid). Diese können auch in /proc/net/iet/session gefunden werden.