iSCSI ermöglicht Block-Storage über TCP/IP-Netzwerke. Es ist eine kostengünstige Alternative zu Fibre Channel SANs und ideal für Virtualisierung und Datenbanken.
Konzepte
| Begriff | Beschreibung | |---------|--------------| | Target | Server, der Storage bereitstellt | | Initiator | Client, der Storage nutzt | | LUN | Logical Unit Number (Block-Device) | | IQN | iSCSI Qualified Name (Eindeutige ID) | | Portal | IP:Port für Verbindung | | CHAP | Challenge-Handshake Authentication |
IQN-Format
iqn.YYYY-MM.reverse-domain:identifier
Beispiel:
iqn.2024-01.de.example:storage.disk1Target einrichten (Server)
Installation
# Debian/Ubuntu
apt install targetcli-fb
# RHEL/CentOS
dnf install targetclitargetcli Grundlagen
# targetcli starten
targetcli
# Hilfe
/> help
/> ls
# Struktur:
# /backstores - Storage-Backends
# /iscsi - iSCSI-Targets
# /loopback - Loopback-TargetsBlock-Device erstellen
targetcli
# Option 1: Datei als Backend
/> cd /backstores/fileio
/backstores/fileio> create disk1 /var/lib/iscsi/disk1.img 10G
# Option 2: Block-Device
/> cd /backstores/block
/backstores/block> create disk1 /dev/sdb1
# Option 3: LVM
/backstores/block> create lv_iscsi /dev/vg0/lv_iscsiiSCSI-Target erstellen
/> cd /iscsi
/iscsi> create iqn.2024-01.de.example:storage
# Portal hinzufügen (Standard: 0.0.0.0:3260)
/iscsi/iqn.2024-01.de.example:storage/tpg1/portals> create 192.168.1.10
# LUN hinzufügen
/iscsi/iqn.2024-01.de.example:storage/tpg1/luns> create /backstores/fileio/disk1ACL konfigurieren
# Initiator-ACL erstellen
/iscsi/iqn.2024-01.de.example:storage/tpg1/acls> create iqn.2024-01.de.example:client1
# Alternativ: Ohne ACL (unsicher!)
/iscsi/iqn.2024-01.de.example:storage/tpg1> set attribute authentication=0
/iscsi/iqn.2024-01.de.example:storage/tpg1> set attribute demo_mode_write_protect=0
/iscsi/iqn.2024-01.de.example:storage/tpg1> set attribute generate_node_acls=1CHAP-Authentifizierung
# CHAP für Initiator
/iscsi/iqn.2024-01.de.example:storage/tpg1/acls/iqn.2024-01.de.example:client1> set auth userid=user1
/iscsi/iqn.2024-01.de.example:storage/tpg1/acls/iqn.2024-01.de.example:client1> set auth password=secret123
# Mutual CHAP (bidirektional)
/iscsi/iqn.2024-01.de.example:storage/tpg1/acls/iqn.2024-01.de.example:client1> set auth mutual_userid=target1
/iscsi/iqn.2024-01.de.example:storage/tpg1/acls/iqn.2024-01.de.example:client1> set auth mutual_password=secret456Konfiguration speichern
/> saveconfig
/> exit
# Service aktivieren
systemctl enable target
systemctl start targetInitiator einrichten (Client)
Installation
# Debian/Ubuntu
apt install open-iscsi
# RHEL/CentOS
dnf install iscsi-initiator-utilsInitiator-Name setzen
# /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2024-01.de.example:client1Service starten
systemctl enable iscsid
systemctl start iscsidTargets entdecken
# Discovery
iscsiadm -m discovery -t sendtargets -p 192.168.1.10
# Gefundene Targets anzeigen
iscsiadm -m node -o showMit Target verbinden
# Login
iscsiadm -m node -T iqn.2024-01.de.example:storage -p 192.168.1.10 --login
# Automatischer Login beim Boot
iscsiadm -m node -T iqn.2024-01.de.example:storage -p 192.168.1.10 --op update -n node.startup -v automaticCHAP konfigurieren
# CHAP-Credentials
iscsiadm -m node -T iqn.2024-01.de.example:storage -p 192.168.1.10 \
--op update -n node.session.auth.authmethod -v CHAP
iscsiadm -m node -T iqn.2024-01.de.example:storage -p 192.168.1.10 \
--op update -n node.session.auth.username -v user1
iscsiadm -m node -T iqn.2024-01.de.example:storage -p 192.168.1.10 \
--op update -n node.session.auth.password -v secret123
# Dann Login
iscsiadm -m node -T iqn.2024-01.de.example:storage -p 192.168.1.10 --loginSessions anzeigen
# Aktive Sessions
iscsiadm -m session
# Detailliert
iscsiadm -m session -P 3iSCSI-Disk verwenden
# Neue Disk erscheint als /dev/sdX
lsblk
# Partitionieren und formatieren
fdisk /dev/sdb
mkfs.ext4 /dev/sdb1
# Mounten
mount /dev/sdb1 /mnt/iscsi
# In fstab (mit _netdev!)
/dev/sdb1 /mnt/iscsi ext4 _netdev,defaults 0 0Mit UUID mounten
# UUID ermitteln
blkid /dev/sdb1
# In fstab
UUID=xxx /mnt/iscsi ext4 _netdev,defaults 0 0Verwaltung
Verbindung trennen
# Logout
iscsiadm -m node -T iqn.2024-01.de.example:storage -p 192.168.1.10 --logout
# Alle Sessions beenden
iscsiadm -m node --logoutall=allTarget entfernen
# Target löschen (auf Initiator)
iscsiadm -m node -T iqn.2024-01.de.example:storage -p 192.168.1.10 -o deleteSession-Recovery
# Session neu aufbauen
iscsiadm -m session -r SID --rescan
# Alle neu scannen
iscsiadm -m session --rescanMultipath
Installation
apt install multipath-toolsKonfiguration
# /etc/multipath.conf
defaults {
user_friendly_names yes
find_multipaths yes
}
blacklist {
devnode "^sd[a]$"
}Multipath aktivieren
systemctl enable multipathd
systemctl start multipathd
# Status
multipath -llPerformance
Tuning auf Target
# Größere Block-Größe
/backstores/fileio> create disk1 /var/lib/iscsi/disk1.img 10G write_back=false
# Oder block-Backend für beste Performance
/backstores/block> create disk1 /dev/nvme0n1p1Tuning auf Initiator
# Größere Queue Depth
iscsiadm -m node -T iqn.xxx -p 192.168.1.10 \
--op update -n node.session.cmds_max -v 1024
# Jumbo Frames (MTU 9000) auf NetzwerkFirewall
# Target-Server
# UFW
ufw allow 3260/tcp
# firewalld
firewall-cmd --permanent --add-port=3260/tcp
firewall-cmd --reloadTroubleshooting
Verbindungsprobleme
# Discovery testen
iscsiadm -m discovery -t sendtargets -p 192.168.1.10 --debug=8
# Logs prüfen
journalctl -u iscsid
dmesg | grep -i iscsiPerformance-Analyse
# I/O-Statistiken
iostat -x 1
# Session-Info
iscsiadm -m session -P 3Target-Logs
# Target-seitige Logs
journalctl -u target
dmesg | grep -i targetPraktisches Beispiel
VM-Storage mit iSCSI
# === Target-Server ===
targetcli
/backstores/block> create vm-storage /dev/vg0/lv_vms
/iscsi> create iqn.2024-01.de.example:vm-storage
/iscsi/iqn.2024-01.de.example:vm-storage/tpg1/luns> create /backstores/block/vm-storage
/iscsi/iqn.2024-01.de.example:vm-storage/tpg1/acls> create iqn.2024-01.de.example:hypervisor
/> saveconfig
/> exit
# === Hypervisor ===
iscsiadm -m discovery -t st -p 192.168.1.10
iscsiadm -m node -T iqn.2024-01.de.example:vm-storage -p 192.168.1.10 --login
# Neue Disk für VMs nutzenStatus-Script
#!/bin/bash
# iscsi-status.sh
echo "=== iSCSI Sessions ==="
iscsiadm -m session
echo ""
echo "=== Session Details ==="
iscsiadm -m session -P 1
echo ""
echo "=== Block Devices ==="
lsblk | grep -E "sd[b-z]"
echo ""
echo "=== Multipath (falls aktiv) ==="
multipath -ll 2>/dev/nullZusammenfassung
| Befehl | Funktion | |--------|----------| | targetcli | Target konfigurieren | | iscsiadm -m discovery | Targets finden | | iscsiadm -m node --login | Verbinden | | iscsiadm -m session | Sessions anzeigen | | iscsiadm -m node --logout | Trennen |
| Datei | Funktion | |-------|----------| | /etc/iscsi/initiatorname.iscsi | Initiator-Name | | /etc/target/saveconfig.json | Target-Konfig | | /etc/multipath.conf | Multipath |
| Komponente | Port | |------------|------| | iSCSI | 3260/tcp |
Fazit
iSCSI bietet kostengünstiges SAN-Storage über Standard-Netzwerk. Es ist ideal für VM-Storage und Datenbanken. CHAP-Authentifizierung sichert den Zugriff. Multipath erhöht Verfügbarkeit und Performance. Für beste Performance sollte ein dediziertes Storage-Netzwerk verwendet werden.