{{tag>Brouillon SAN}} # Notes SAN iSCSI Voir aussi : * NBD : Network Block Devices * FCoE (Fibre Channel over Ethernet) Voir : * [iSCSI](https://fr.wikipedia.org/wiki/ISCSI) * [[Notes TCP IP Jumbo Frame Trame géante MTU|Jumbo Frame]] * https://doc.ubuntu-fr.org/iscsi * * https://wiki.debian.org/SAN/iSCSI * http://www.memoinfo.fr/tutoriels-linux/configurer-client-iscsi-debian/ * http://trac.evolix.net/infogerance/wiki/HowtoISCSI * * http://www.brocade.com/content/html/en/deployment-guide/brocade-vcs-fabric-skyera-skyhawk-ssd-vt/GUID-E9A6F823-A87A-48A6-8A36-FDBDF9E2FF8F.html * http://rickardnobel.se/troubleshoot-iscsi-tcp-connectivity-from-esxi-with-netcat/ Matériel / schémas : * https://support.purestorage.com/FlashArray/PurityFA/Replication/ActiveCluster/001_Overview/ActiveCluster_Solution_Overview Voir : * http://serverfault.com/questions/557013/basic-iscsi-target-setup-on-proxmox-ve-debian-7-not-working ## 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** (ou **Initiator** en anglais) 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) `/etc/sysctl.d/98-san.conf` ~~~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 /etc/sysctl.d/98-san.conf ~~~ **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 /proc/net/iet/volume ~~~ `/etc/default/iscsitarget` ~~~ini ISCSITARGET_ENABLE=true # Comment binder sur plusieurs interfaces ? # Finalement je vais jouer avec iptables #ISCSITARGET_OPTIONS="--address 192.168.25.12" ~~~ `/etc/iet/targets.allow` ~~~ #ALL ALL #ALL 192.168.25.12 # IP de la carte de ce serveur (Target) ALL 192.168.25.12,192.168.26.12 ~~~ Aucun service à redémarré `/etc/iet/initiators.allow` ~~~ #ALL ALL #nom-libre:fs.iscsi.disk 192.168.25.21 nom-libre:fs.iscsi.disk iqn.1994-05.com.redhat:b51429c7fc6 ~~~ Aucun service à redémarré \\ La règle d'autorisation au LUN **nom-libre:fs.iscsi.disk** peut se faire avec l'adresse IP \\ `nom-libre:fs.iscsi.disk 192.168.25.21`\\ Ou bien avec l'IQN : \\ `nom-libre:fs.iscsi.disk iqn.1994-05.com.redhat:b51429c7fc6` **Faire la conf dans `/etc/iet/ietd.conf`** ~~~bash systemctl restart iscsitarget ~~~ Vérif ~~~bash cat /proc/net/iet/volume ~~~ ### Avec tgt ~~~bash apt-get install tgt ~~~ ### Avec targetcli-fb (Debian 9) Voir : * http://linux-iscsi.org/wiki/ISCSI * https://wiki.archlinux.org/index.php/ISCSI_Target * https://www.server-world.info/en/note?os=Debian_9&p=iscsi * https://wiki.rvijay.in/index.php/Configuring_iSCSI_target_using_targetcli * http://atodorov.org/blog/2015/04/07/how-to-configure-iscsi-target-on-red-hat-enterprise-linux-7/ * https://www.ibm.com/developerworks/community/blogs/mhhaque/entry/configure_iscsi_target_initiator_on_rhel7_or_powerlinux?lang=en ### Par-feu iptables ~~~bash # Interface LAN : eth0 eth1 # Intercace SAN : eth2 eth3 # VLAN SAN : 192.168.25.0/24 (eth2), 192.168.26.0/24 (eth3) # ALL : Autoriser les pings iptables -A INPUT -p icmp -j ACCEPT # SAN : Permettre réponse iptables -A OUTPUT -o eth2 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A OUTPUT -o eth3 -m state --state NEW,ESTABLISHED -j ACCEPT # 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 * ` /sys/class/iscsi_session/` * `lsscsi` ### RedHat ~~~bash yum install iscsi-initiator-utils ~~~ Changer éventuellement le IQN `/etc/iscsi/initiatorname.iscsi` ~~~ini InitiatorName=iqn.1994-05.com.redhat:b51429c7fc6 ~~~ 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:3260,1 nom-libre:fs.iscsi.disk ~~~ ~~~bash iscsiadm -m node -p 192.168.25.12 -T nom-libre:fs.iscsi.disk --login ~~~ Vérif ~~~bash iscsiadm -m session ls -l /dev/disk/by-path/*iscsi* ~~~ Déconnexion ~~~bash #iscsiadm -m node -u -p $(iscsiadm -m session | awk '{print $3}') #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 /dev/sd[a-z] SAN ~~~bash ls -l /dev/disk/by-path/*iscsi* ~~~ ~~~ lrwxrwxrwx 1 root root 9 9 nov. 14:18 /dev/disk/by-path/ip-192.168.25.12:3260-iscsi-nom-libre:fs.iscsi.disk-lun-0 -> ../../sdc lrwxrwxrwx 1 root root 10 9 nov. 14:18 /dev/disk/by-path/ip-192.168.25.12:3260-iscsi-nom-libre:fs.iscsi.disk-lun-0-part1 -> ../../sdc1 ~~~ #### Reset Info ~~~bash tree /var/lib/iscsi/ iscsiadm -m node iscsiadm -m session -P3 ~~~ Effacement config ~~~bash umount /dev/disk/by-path/*iscsi*[1-9] 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 /var/lib/iscsi/ 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:fs.iscsi.disk --portal 192.168.25.12 --login iscsiadm -m iface -I iface0 --op=new -n iface.hwaddress -v "08:00:27:85:d1:16" iscsiadm -m discovery --type sendtargets --portal 192.168.25.12 -I iface0 iscsiadm -m node --targetname nom-libre:fs.iscsi.disk --portal 192.168.25.12:3260 -I iface0 --login ~~~ ~~~bash iscsiadm -m discoverydb ~~~ ~~~ 192.168.25.12:3260 via sendtargets 192.168.56.12:3260 via sendtargets 192.168.26.12:3260 via sendtargets ~~~ ~~~bash iscsiadm -m discoverydb -o delete -p 192.168.56.12:3260 -t st ~~~ ## Pb ### Pb1 ~~~bash iscsiadm -m session ~~~ ~~~ tcp: [1] 192.168.25.12:3260,1 nom-libre:fs.iscsi.disk (non-flash) ~~~ ~~~bash iscsiadm -m node -p 192.168.25.12 -T nom-libre:fs.iscsi.disk -u ~~~ ~~~ Logging out of session [sid: 1, target: nom-libre:fs.iscsi.disk, portal: 192.168.25.12,3260] iscsiadm: Could not logout of [sid: 1, target: nom-libre:fs.iscsi.disk, portal: 192.168.25.12,3260]. 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:fs.iscsi.disk, portal: 192.168.25.12,3260], but a session is using it. Logout session then rerun command to remove record. 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) / 24 - iSCSI login failed due to authorization failure ~~~ # 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 `/etc/iscsi/iscsid.conf` ~~~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 /sys/block/sd*/device/vendor ~~~ And writing the desired values into sysfs files: ~~~bash echo noop > /sys/block/sdx/queue/scheduler ~~~ An example for loop is shown here to quickly set all Pure luns to the desired 'noop' elevator: ~~~bash for disk in $(lsscsi | grep PURE | awk '{print $6}'); do echo noop > /sys/block/${disk##/dev/}/queue/scheduler done ~~~ All changes in this section take effect immediately, without rebooting for RHEL5 and higher. RHEL 4 releases will 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 /sys/block/sdb/queue/scheduler [noop] deadline cfq ~~~