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 |