tech:notes_san_iscsi
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| tech:notes_san_iscsi [2025/11/13 19:24] – Jean-Baptiste | tech:notes_san_iscsi [2026/06/29 14:24] (Version actuelle) – Jean-Baptiste | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| + | < | ||
| + | {{tag> | ||
| + | |||
| + | # Notes SAN iSCSI | ||
| + | |||
| + | Voir aussi : | ||
| + | * NBD : Network Block Devices | ||
| + | * FCoE (Fibre Channel over Ethernet) | ||
| + | |||
| + | Voir : | ||
| + | * [iSCSI](https:// | ||
| + | * [[Notes TCP IP Jumbo Frame Trame géante MTU|Jumbo Frame]] | ||
| + | * https:// | ||
| + | * < | ||
| + | * https:// | ||
| + | * http:// | ||
| + | * http:// | ||
| + | * < | ||
| + | * http:// | ||
| + | * http:// | ||
| + | |||
| + | Matériel / schémas : | ||
| + | * https:// | ||
| + | |||
| + | Voir : | ||
| + | * http:// | ||
| + | |||
| + | ## Notes vocabulaire / Infos | ||
| + | |||
| + | Par défaut, c'est le port **TCP 3260** qui est utilisé. | ||
| + | |||
| + | IQN : iSCSI Qualified Name \\ | ||
| + | Identifiant unique de la carte | ||
| + | |||
| + | Les clients sont appelés **initiateurs** | ||
| + | |||
| + | Les périphériques de stockage SCSI sur des serveurs distants sont appelés **Cible** (ou **targets** en anglais) | ||
| + | |||
| + | Pensez à [[notes_tcp_ip_jumbo_frame_trame_geante_mtu|Configurer le Jumbo Frame sur les cartes réseaux]] | ||
| + | |||
| + | |||
| + | ### Multipath vs Bonding | ||
| + | |||
| + | Voir : | ||
| + | * [[Notes Multipath I_O MPIO]] | ||
| + | |||
| + | En général il faut privilégier le Multipath, le bonding peut être utilisé en active-passif. | ||
| + | |||
| + | |||
| + | ## Sur Targets (serveur) & Initiateurs (client) | ||
| + | |||
| + | `/ | ||
| + | ~~~ini | ||
| + | net.ipv4.conf.enp0s9.rp_filter=0 | ||
| + | net.ipv4.conf.enp0s9.arp_ignore=1 | ||
| + | net.ipv4.conf.enp0s9.arp_announce=2 | ||
| + | |||
| + | net.ipv4.conf.enp0s10.rp_filter=0 | ||
| + | net.ipv4.conf.enp0s10.arp_ignore=1 | ||
| + | net.ipv4.conf.enp0s10.arp_announce=2 | ||
| + | ~~~ | ||
| + | |||
| + | ~~~bash | ||
| + | sysctl -p / | ||
| + | ~~~ | ||
| + | |||
| + | **A adapter !** \\ | ||
| + | **Remplacer enp0s9, enp0s10 par vos cartes réseaux dédiées au SAN** | ||
| + | |||
| + | |||
| + | |||
| + | ## Targets (serveur) sur Debian | ||
| + | |||
| + | Il existe : | ||
| + | * iscsitarget | ||
| + | * tgt | ||
| + | * sg3_utils / sg_scan | ||
| + | |||
| + | |||
| + | ### Avec iscsitarget | ||
| + | |||
| + | ~~~bash | ||
| + | apt-get install iscsitarget iscsitarget-dkms | ||
| + | ~~~ | ||
| + | |||
| + | Pour lister les LUN | ||
| + | ~~~bash | ||
| + | cat / | ||
| + | ~~~ | ||
| + | |||
| + | `/ | ||
| + | ~~~ini | ||
| + | ISCSITARGET_ENABLE=true | ||
| + | |||
| + | # Comment binder sur plusieurs interfaces ? | ||
| + | # Finalement je vais jouer avec iptables | ||
| + | # | ||
| + | ~~~ | ||
| + | |||
| + | `/ | ||
| + | ~~~ | ||
| + | #ALL ALL | ||
| + | #ALL 192.168.25.12 # IP de la carte de ce serveur (Target) | ||
| + | ALL 192.168.25.12, | ||
| + | ~~~ | ||
| + | |||
| + | Aucun service à redémarré | ||
| + | |||
| + | |||
| + | `/ | ||
| + | ~~~ | ||
| + | #ALL ALL | ||
| + | |||
| + | # | ||
| + | nom-libre: | ||
| + | ~~~ | ||
| + | |||
| + | Aucun service à redémarré \\ | ||
| + | La règle d' | ||
| + | Ou bien avec l'IQN : \\ | ||
| + | `nom-libre: | ||
| + | |||
| + | **Faire la conf dans `/ | ||
| + | |||
| + | ~~~bash | ||
| + | systemctl restart iscsitarget | ||
| + | ~~~ | ||
| + | |||
| + | Vérif | ||
| + | ~~~bash | ||
| + | cat / | ||
| + | ~~~ | ||
| + | |||
| + | |||
| + | ### Avec tgt | ||
| + | |||
| + | ~~~bash | ||
| + | apt-get install tgt | ||
| + | ~~~ | ||
| + | |||
| + | |||
| + | ### Avec targetcli-fb (Debian 9) | ||
| + | |||
| + | Voir : | ||
| + | * http:// | ||
| + | * https:// | ||
| + | * https:// | ||
| + | * https:// | ||
| + | * http:// | ||
| + | * https:// | ||
| + | |||
| + | |||
| + | ### Par-feu iptables | ||
| + | |||
| + | ~~~bash | ||
| + | # Interface LAN : eth0 eth1 | ||
| + | # Intercace SAN : eth2 eth3 | ||
| + | # VLAN SAN : 192.168.25.0/ | ||
| + | |||
| + | # ALL : Autoriser les pings | ||
| + | iptables -A INPUT -p icmp -j ACCEPT | ||
| + | |||
| + | # SAN : Permettre réponse | ||
| + | iptables -A OUTPUT -o eth2 -m state --state NEW, | ||
| + | iptables -A OUTPUT -o eth3 -m state --state NEW, | ||
| + | |||
| + | # SAN : Ouverture port TCP 3260 | ||
| + | iptables -A INPUT -i eth2 -p tcp -m tcp --dport 3260 -j ACCEPT | ||
| + | iptables -A INPUT -i eth3 -p tcp -m tcp --dport 3260 -j ACCEPT | ||
| + | |||
| + | # Hors SAN : Bloquer le port TCP 3260 | ||
| + | iptables -A INPUT -p tcp -m tcp --dport 3260 -j REJECT | ||
| + | |||
| + | # SAN : utilisable que pour le SAN | ||
| + | iptables -A INPUT -i eth2 -j REJECT | ||
| + | iptables -A INPUT -i eth3 -j REJECT | ||
| + | ~~~ | ||
| + | |||
| + | |||
| + | ## Initiateurs (client) | ||
| + | |||
| + | Voir | ||
| + | * ` / | ||
| + | * `lsscsi` | ||
| + | |||
| + | |||
| + | ### RedHat | ||
| + | |||
| + | ~~~bash | ||
| + | yum install iscsi-initiator-utils | ||
| + | ~~~ | ||
| + | |||
| + | Changer éventuellement le IQN | ||
| + | |||
| + | `/ | ||
| + | ~~~ini | ||
| + | InitiatorName=iqn.1994-05.com.redhat: | ||
| + | ~~~ | ||
| + | |||
| + | Générer un nouveau nom IQN | ||
| + | ~~~bash | ||
| + | iscsi-iname | ||
| + | ~~~ | ||
| + | |||
| + | Pour prendre en compte le changement d'IQN initiatorname.iscsi | ||
| + | ~~~bash | ||
| + | systemctl restart iscsid.service | ||
| + | ~~~ | ||
| + | |||
| + | |||
| + | #### Accès au LUN | ||
| + | |||
| + | Lister les LUNs disponibles | ||
| + | ~~~bash | ||
| + | #iscsiadm -m discovery --type sendtargets --portal 192.168.25.12 | ||
| + | iscsiadm -m discovery -t st -p 192.168.25.12 | ||
| + | ~~~ | ||
| + | |||
| + | Connexion à tous les LUNs dispo et autorisé | ||
| + | ~~~bash | ||
| + | iscsiadm -m discovery -t st -p 192.168.25.12 --login | ||
| + | ~~~ | ||
| + | |||
| + | |||
| + | Connexion à un LUN spécifique | ||
| + | |||
| + | ~~~bash | ||
| + | iscsiadm -m discovery -t st -p 192.168.25.12 | ||
| + | ~~~ | ||
| + | |||
| + | ~~~ | ||
| + | 192.168.25.12: | ||
| + | ~~~ | ||
| + | |||
| + | ~~~bash | ||
| + | iscsiadm -m node -p 192.168.25.12 -T nom-libre: | ||
| + | ~~~ | ||
| + | |||
| + | |||
| + | Vérif | ||
| + | ~~~bash | ||
| + | iscsiadm -m session | ||
| + | ls -l / | ||
| + | ~~~ | ||
| + | |||
| + | Déconnexion | ||
| + | ~~~bash | ||
| + | #iscsiadm -m node -u -p $(iscsiadm -m session | awk ' | ||
| + | #iscsiadm -m node -u -T $(iscsiadm -m session | cut -d ' ' -f 4) | ||
| + | iscsiadm -m node -p 192.168.25.12 -u | ||
| + | ~~~ | ||
| + | |||
| + | Connaître tous les disques / | ||
| + | |||
| + | ~~~bash | ||
| + | ls -l / | ||
| + | ~~~ | ||
| + | |||
| + | ~~~ | ||
| + | lrwxrwxrwx 1 root root 9 9 nov. 14:18 / | ||
| + | lrwxrwxrwx 1 root root 10 9 nov. 14:18 / | ||
| + | ~~~ | ||
| + | |||
| + | |||
| + | #### Reset | ||
| + | |||
| + | Info | ||
| + | ~~~bash | ||
| + | tree / | ||
| + | iscsiadm -m node | ||
| + | iscsiadm -m session -P3 | ||
| + | ~~~ | ||
| + | |||
| + | Effacement config | ||
| + | ~~~bash | ||
| + | umount / | ||
| + | iscsiadm -m node --portal 192.168.25.12 -u | ||
| + | systemctl stop iscsid.service | ||
| + | systemctl stop iscsid.socket | ||
| + | |||
| + | yum remove iscsi-initiator-utils-iscsiuio iscsi-initiator-utils | ||
| + | rm -rf / | ||
| + | rm -rf /etc/iscsi/ | ||
| + | ~~~ | ||
| + | |||
| + | |||
| + | #### Supervision | ||
| + | |||
| + | ~~~bash | ||
| + | iscsiadm -m session -P1 | grep State | ||
| + | ~~~ | ||
| + | |||
| + | **OK** | ||
| + | |||
| + | ~~~ | ||
| + | iSCSI Connection State: LOGGED IN | ||
| + | iSCSI Session State: LOGGED_IN | ||
| + | Internal iscsid Session State: NO CHANGE | ||
| + | ~~~ | ||
| + | |||
| + | **NKO** | ||
| + | |||
| + | ~~~ | ||
| + | iSCSI Connection State: TRANSPORT WAIT | ||
| + | iSCSI Session State: FREE | ||
| + | Internal iscsid Session State: REOPEN | ||
| + | ~~~ | ||
| + | |||
| + | |||
| + | ### Debian | ||
| + | |||
| + | ~~~bash | ||
| + | apt-get install open-iscsi | ||
| + | ~~~ | ||
| + | |||
| + | |||
| + | ### Diag | ||
| + | |||
| + | ~~~bash | ||
| + | dmesg | grep sd | ||
| + | ~~~ | ||
| + | |||
| + | ~~~ | ||
| + | [ 241.189053] sd 4:0:0:0: [sdc] Attached SCSI disk | ||
| + | ~~~ | ||
| + | |||
| + | ~~~bash | ||
| + | iscsiadm -m session | ||
| + | iscsiadm -m session -P 3 | ||
| + | ~~~ | ||
| + | |||
| + | |||
| + | ### Autres | ||
| + | |||
| + | ~~~bash | ||
| + | yum install -y targetcli | ||
| + | ~~~ | ||
| + | |||
| + | |||
| + | Notes | ||
| + | ~~~bash | ||
| + | #iscsiadm -m discovery --type sendtargets --portal 192.168.25.12 | ||
| + | #iscsiadm -m node --targetname nom-libre: | ||
| + | |||
| + | iscsiadm -m iface -I iface0 --op=new -n iface.hwaddress -v " | ||
| + | |||
| + | iscsiadm -m discovery --type sendtargets --portal 192.168.25.12 -I iface0 | ||
| + | iscsiadm -m node --targetname nom-libre: | ||
| + | ~~~ | ||
| + | |||
| + | ~~~bash | ||
| + | iscsiadm -m discoverydb | ||
| + | ~~~ | ||
| + | |||
| + | ~~~ | ||
| + | 192.168.25.12: | ||
| + | 192.168.56.12: | ||
| + | 192.168.26.12: | ||
| + | ~~~ | ||
| + | |||
| + | ~~~bash | ||
| + | iscsiadm -m discoverydb -o delete -p 192.168.56.12: | ||
| + | ~~~ | ||
| + | |||
| + | |||
| + | ## Pb | ||
| + | |||
| + | ### Pb1 | ||
| + | |||
| + | ~~~bash | ||
| + | iscsiadm -m session | ||
| + | ~~~ | ||
| + | |||
| + | ~~~ | ||
| + | tcp: [1] 192.168.25.12: | ||
| + | ~~~ | ||
| + | |||
| + | ~~~bash | ||
| + | iscsiadm -m node -p 192.168.25.12 -T nom-libre: | ||
| + | ~~~ | ||
| + | |||
| + | ~~~ | ||
| + | Logging out of session [sid: 1, target: nom-libre: | ||
| + | iscsiadm: Could not logout of [sid: 1, target: nom-libre: | ||
| + | iscsiadm: initiator reported error (9 - internal error) | ||
| + | iscsiadm: Could not logout of all requested sessions | ||
| + | ~~~ | ||
| + | |||
| + | ~~~ | ||
| + | iscsiadm -m session --sid=1 --op=delete | ||
| + | iscsiadm: This command will remove the record [iface: default, target: nom-libre: | ||
| + | iscsiadm: Could not execute operation on all records: session exists | ||
| + | ~~~ | ||
| + | |||
| + | |||
| + | A tester | ||
| + | |||
| + | ~~~bash | ||
| + | systemctl stop iscsi | ||
| + | systemctl stop iscsid | ||
| + | |||
| + | systemctl start iscsid | ||
| + | systemctl start iscsi | ||
| + | ~~~ | ||
| + | |||
| + | |||
| + | ### Erreur detected conn error (1020) | ||
| + | |||
| + | ~~~ | ||
| + | # dmesg | ||
| + | detected conn error (1020) | ||
| + | ~~~ | ||
| + | |||
| + | ~~~ | ||
| + | # iscsiadm -m discovery -t st -p 192.168.6.130 -l | ||
| + | 24 - iSCSI login failed due to authorization failure | ||
| + | ~~~ | ||
| + | |||
| + | |||
| + | #### Solution | ||
| + | |||
| + | `/ | ||
| + | ~~~ini | ||
| + | discovery.sendtargets.timeo.login_timeout = 15 | ||
| + | discovery.sendtargets.reopen_max = 5 | ||
| + | discovery.sendtargets.timeo.auth_timeout = 45 | ||
| + | discovery.sendtargets.timeo.active_timeout = 30 | ||
| + | discovery.sendtargets.iscsi.MaxRecvDataSegmentLength = 32768 | ||
| + | ~~~ | ||
| + | |||
| + | ~~~bash | ||
| + | iscsiadm -m discovery -t st -p 192.168.6.130 -l | ||
| + | ~~~ | ||
| + | |||
| + | Où alors autoriser les accès concurrentiels sur le SAN, si c'est souhaité. | ||
| + | |||
| + | |||
| + | ## Autres ISCSI | ||
| + | |||
| + | ~~~bash | ||
| + | udevinfo -a -p $(udevinfo -q path -n /dev/sdb) | ||
| + | ~~~ | ||
| + | |||
| + | |||
| + | ## Autres SAN | ||
| + | |||
| + | ### Pure - Linux Recommended Settings | ||
| + | |||
| + | Manually Changing Queue Settings | ||
| + | Not required unless LUNs are already in use with wrong settings. | ||
| + | These settings can be safely changed on a running system, by locating the Pure LUNs: | ||
| + | ~~~bash | ||
| + | grep PURE / | ||
| + | ~~~ | ||
| + | |||
| + | And writing the desired values into sysfs files: | ||
| + | ~~~bash | ||
| + | echo noop > / | ||
| + | ~~~ | ||
| + | An example for loop is shown here to quickly set all Pure luns to the desired ' | ||
| + | |||
| + | ~~~bash | ||
| + | for disk in $(lsscsi | grep PURE | awk ' | ||
| + | echo noop > / | ||
| + | done | ||
| + | ~~~ | ||
| + | |||
| + | All changes in this section take effect immediately, | ||
| + | require a reboot. These changes will not persist unless they are added to the udev rule. | ||
| + | Notice, noop has [noop] to designate it as the desired scheduler. | ||
| + | |||
| + | ~~~ | ||
| + | $ cat / | ||
| + | [noop] deadline cfq | ||
| + | ~~~ | ||
