linux-rhel-centos-fedora storage networking iscsi san rhel

iSCSI Target & Initiator on RHEL (Artikel 089)

Implementierung von Block-Storage über das Netzwerk. Konfiguration von iSCSI Targets mit targetcli und Anbindung von Initiatoren für Enterprise SAN-Szenarien.

# iSCSI on RHEL: SAN-Performance über das Ethernet

TL;DR / Management Summary Während NFS Dateien teilt, teilt iSCSI (Internet Small Computer Systems Interface) ganze Festplatten (Block Storage). Für den Client (Initiator) sieht ein iSCSI-LUN aus wie eine lokal eingesteckte Festplatte (/dev/sdb). In RHEL nutzen wir das mächtige targetcli zur Verwaltung der Targets und iscsiadm für die Initiatoren. Unverzichtbar für Cluster-Dateisysteme, Datenbanken und Proxmox Shared Storage.


# 1. Einführung & Architektur

Block-I/O über TCP/IP.

iSCSI kapselt SCSI-Kommandos in TCP-Pakete.

  • Target: Der Server, der den Speicher bereitstellt (z.B. ein RHEL-Host mit vielen Platten).
  • Initiator: Der Client, der die Disk nutzt (z.B. ein Webserver).
  • LUN (Logical Unit Number): Die eigentliche virtuelle Festplatte.
graph LR
    subgraph "iSCSI Target (Server)"
        A[Physical Disk / LVM] --> B[Backstore]
        B --> C[LUN 0]
        C --> D[Target Portal Port 3260]
    end
    D -->|Network| E[iSCSI Initiator (Client)]
    subgraph "iSCSI Initiator"
        E --> F[SCSI Device /dev/sdb]
        F --> G[Filesystem / Database]
    end

# 2. Server-Side: iSCSI Target Setup

Den Speicher bereitstellen.

In RHEL ist targetcli das Standard-Werkzeug (LIO).

# Schritt 1: Installation & Start

sudo dnf install targetcli
sudo systemctl enable --now target

# Schritt 2: Konfiguration (Interaktive Shell)

sudo targetcli
# 1. Backstore erstellen (hier ein LVM Volume)
/> backstores/block create name=disk01 dev=/dev/vg_data/lv_storage
# 2. IQN (IQN = iSCSI Name) erstellen
/> iscsi/ create iqn.2023-10.com.company:storage.target01
# 3. LUN zuweisen
/> iscsi/iqn.2023-10.com.company:storage.target01/tpg1/luns create /backstores/block/disk01
# 4. Zugriff erlauben (ACL - IQN des Clients!)
/> iscsi/iqn.2023-10.com.company:storage.target01/tpg1/acls create iqn.2023-10.com.company:client01

# Schritt 3: Firewall öffnen

sudo firewall-cmd --permanent --add-service=iscsi-target
sudo firewall-cmd --reload

# 3. Client-Side: iSCSI Initiator

Die Disk einbinden.

# Schritt 1: Initiator-Name setzen

Datei: /etc/iscsi/initiatorname.iscsi

InitiatorName=iqn.2023-10.com.company:client01

# Schritt 2: Discovery & Login

# 1. Server scannen
sudo iscsiadm -m discovery -t sendtargets -p <target_ip>

# 2. Einloggen
sudo iscsiadm -m node -T iqn.2023-10.com.company:storage.target01 -p <target_ip> -l

Das neue Device erscheint nun in lsblk.


# 4. Day-2 Operations: Multipathing (MPIO)

Redundanz für den Storage-Pfad.

In Enterprise-Umgebungen hat der Server zwei Netzwerkkarten zum Storage-Switch.

# Device Mapper Multipath

sudo dnf install device-mapper-multipath
sudo mpathconf --enable --with_multipathd y

Dies bündelt zwei Pfade (z.B. /dev/sdb und /dev/sdc) zu einem virtuellen Device /dev/mapper/mpatha. So kann ein Kabel gezogen werden, ohne dass die VM abstürzt.


# 5. Troubleshooting & “War Stories”

Wenn die Disk verschwindet.

# Story 1: “Der hängende Initiator”

Symptom: Der Server reagiert nicht mehr, Log zeigt iscsi: session recovery timed out. Ursache: Netzwerk-Unterbrechung zwischen Client und Target. Der Kernel wartet standardmäßig lange, bevor er I/O-Fehler an die Applikation meldet. Lösung: Optimieren Sie den Timeout in /etc/iscsi/iscsid.conf: node.session.timeo.replacement_timeout = 5.

# Story 2: “Das LUN-Resize Dilemma”

Symptom: Das LV auf dem Target wurde vergrößert, aber der Client sieht immer noch die alte Größe. Ursache: Der Initiator muss über die Änderung informiert werden. Lösung: Führen Sie auf dem Client einen Rescan aus: sudo iscsiadm -m node -T <iqn> -p <ip> --rescan.


# 6. Fazit & Empfehlung

  • Sicherheit: Nutzen Sie immer ACLs (IQN-Matching).
  • Netzwerk: iSCSI gehört in ein isoliertes Netz/VLAN. Jumboframes (MTU 9000) sind hier Pflicht für die Performance.
  • Auth: Für zusätzliche Sicherheit aktivieren Sie CHAP Authentifizierung.

# Anhang: Cheatsheet

Aufgabe Befehl
Discovery iscsiadm -m discovery -t st -p <ip>
Login iscsiadm -m node -l
Logout iscsiadm -m node -u
Alle Sessions sehen iscsiadm -m session
Target-Config sehen targetcli ls
Multipath Status multipath -ll