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.disk1

Target einrichten (Server)

Installation

# Debian/Ubuntu
apt install targetcli-fb

# RHEL/CentOS
dnf install targetcli

targetcli Grundlagen

# targetcli starten
targetcli

# Hilfe
/> help
/> ls

# Struktur:
# /backstores - Storage-Backends
# /iscsi      - iSCSI-Targets
# /loopback   - Loopback-Targets

Block-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_iscsi

iSCSI-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/disk1

ACL 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=1

CHAP-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=secret456

Konfiguration speichern

/> saveconfig
/> exit

# Service aktivieren
systemctl enable target
systemctl start target

Initiator einrichten (Client)

Installation

# Debian/Ubuntu
apt install open-iscsi

# RHEL/CentOS
dnf install iscsi-initiator-utils

Initiator-Name setzen

# /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2024-01.de.example:client1

Service starten

systemctl enable iscsid
systemctl start iscsid

Targets entdecken

# Discovery
iscsiadm -m discovery -t sendtargets -p 192.168.1.10

# Gefundene Targets anzeigen
iscsiadm -m node -o show

Mit 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 automatic

CHAP 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 --login

Sessions anzeigen

# Aktive Sessions
iscsiadm -m session

# Detailliert
iscsiadm -m session -P 3

iSCSI-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  0

Mit UUID mounten

# UUID ermitteln
blkid /dev/sdb1

# In fstab
UUID=xxx  /mnt/iscsi  ext4  _netdev,defaults  0  0

Verwaltung

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=all

Target entfernen

# Target löschen (auf Initiator)
iscsiadm -m node -T iqn.2024-01.de.example:storage -p 192.168.1.10 -o delete

Session-Recovery

# Session neu aufbauen
iscsiadm -m session -r SID --rescan

# Alle neu scannen
iscsiadm -m session --rescan

Multipath

Installation

apt install multipath-tools

Konfiguration

# /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 -ll

Performance

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/nvme0n1p1

Tuning 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 Netzwerk

Firewall

# Target-Server
# UFW
ufw allow 3260/tcp

# firewalld
firewall-cmd --permanent --add-port=3260/tcp
firewall-cmd --reload

Troubleshooting

Verbindungsprobleme

# Discovery testen
iscsiadm -m discovery -t sendtargets -p 192.168.1.10 --debug=8

# Logs prüfen
journalctl -u iscsid
dmesg | grep -i iscsi

Performance-Analyse

# I/O-Statistiken
iostat -x 1

# Session-Info
iscsiadm -m session -P 3

Target-Logs

# Target-seitige Logs
journalctl -u target
dmesg | grep -i target

Praktisches 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 nutzen

Status-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/null

Zusammenfassung

| 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.