« LINUX:ISCSI » : différence entre les versions
Aucun résumé des modifications |
Aucun résumé des modifications Balise : Révocation manuelle |
||
(10 versions intermédiaires par le même utilisateur non affichées) | |||
Ligne 53 : | Ligne 53 : | ||
backing-store /dev/sdb1 | backing-store /dev/sdb1 | ||
initiator-name iqn.2023-02.dom.home.sv:sv.initiator01 | initiator-name iqn.2023-02.dom.home.sv:sv.initiator01 | ||
incominguser diskuser | incominguser diskuser Eupen2Marron | ||
initiator-address 192.168.1.73 | initiator-address 192.168.1.73 | ||
</target> | </target> | ||
Ligne 62 : | Ligne 62 : | ||
backing-store /dev/sdb1 | backing-store /dev/sdb1 | ||
initiator-name iqn.2023-02.dom.home.sv:sv.initiator01 | initiator-name iqn.2023-02.dom.home.sv:sv.initiator01 | ||
incominguser diskuser | incominguser diskuser Eupen2Marron | ||
initiator-address 192.168.1.73 | initiator-address 192.168.1.73 | ||
</target> | </target> | ||
Ligne 87 : | Ligne 87 : | ||
systemctl enable tgtd.service | systemctl enable tgtd.service | ||
systemctl start tgtd.service | systemctl start tgtd.service | ||
Eventuellement: | |||
systemctl enable remote-fs.target | |||
Quand on exécute la commande: | Quand on exécute la commande: | ||
netstat -nltp | grep tgtd | netstat -nltp | grep tgtd | ||
Ligne 185 : | Ligne 187 : | ||
node.session.auth.authmethod = CHAP | node.session.auth.authmethod = CHAP | ||
node.session.auth.username = '''diskuser''' | node.session.auth.username = '''diskuser''' | ||
node.session.auth.password = ''' | node.session.auth.password = '''Eupen2Marron''' | ||
---- | ---- | ||
* Dans le fichier "initiatorname.iscsi", on remplace la ligne existante par le nom d'initiator défini sur les serveurs targets ISCSI: | * Dans le fichier "initiatorname.iscsi", on remplace la ligne existante par le nom d'initiator défini sur les serveurs targets ISCSI: | ||
Ligne 195 : | Ligne 197 : | ||
==Activer et lancer le service== | ==Activer et lancer le service== | ||
Le service à lancer est "iscsid.service". La première | Le service à lancer est "iscsid.service". La première et la seconde commandes active et lance le service "iscsid" et sont chargées d'établir les connexions aux "Targets" découverts: | ||
systemctl enable | systemctl enable iscsi.service | ||
systemctl start iscsi.service | systemctl start iscsi.service | ||
Il est important de vérifier que le "target" suivant est activé: | Il est important de vérifier que le "target" de Systemd suivant est activé: | ||
systemctl enable remote-fs.target | systemctl enable remote-fs.target | ||
Et éventuellement: | Et éventuellement: | ||
systemctl enable iscsid.socket | |||
systemctl enable iscsiuio.socket | systemctl enable iscsiuio.socket | ||
systemctl enable iscsi-onboot.service | systemctl enable iscsi-onboot.service | ||
systemctl enable iscsid | systemctl enable iscsid.service | ||
Notons que par défaut, ils sont activés sous Fedora Server. | Notons que par défaut, ils sont activés sous Fedora Server. | ||
Ligne 235 : | Ligne 229 : | ||
En parallèle dans le répertoire "/var/lib/iscsi/send_targets", deux sous-répertoires sont apparus: "192.168.1.71,3260" et "192.168.1.72,3260". Dans chacun, le fichier "st_config" est créé. On y rencontre d'autres paramètres liés aux serveurs. | En parallèle dans le répertoire "/var/lib/iscsi/send_targets", deux sous-répertoires sont apparus: "192.168.1.71,3260" et "192.168.1.72,3260". Dans chacun, le fichier "st_config" est créé. On y rencontre d'autres paramètres liés aux serveurs. | ||
<!-- | |||
==Automatisation de la liaison== | ==Automatisation de la liaison== | ||
Les commandes suivantes permettent de créer une liaison automatiques à ces devices. | Les commandes suivantes permettent de créer une liaison automatiques à ces devices. | ||
Ligne 266 : | Ligne 260 : | ||
iscsiadm --mode discoverydb --portal 192.168.1.71:3260 -n discovery.sendtargets.use_discoveryd -v Yes -o update -t sendtargets | iscsiadm --mode discoverydb --portal 192.168.1.71:3260 -n discovery.sendtargets.use_discoveryd -v Yes -o update -t sendtargets | ||
iscsiadm --mode discoverydb --portal 192.168.1.72:3260 -n discovery.sendtargets.use_discoveryd -v Yes -o update -t sendtargets | iscsiadm --mode discoverydb --portal 192.168.1.72:3260 -n discovery.sendtargets.use_discoveryd -v Yes -o update -t sendtargets | ||
--> | |||
==Mise en route de la liaison== | ==Mise en route de la liaison== | ||
Maintenant soit on relance la machine "initiator" soit on relance le service " | Maintenant soit on relance la machine "initiator" soit on relance le service "iscsi.service": | ||
systemctl restart | systemctl restart iscsi.service | ||
Ligne 295 : | Ligne 289 : | ||
* par la commande: | * par la commande: | ||
iscsiadm -m session -P 3 | iscsiadm -m session -P 3 | ||
qui affiche plus d'informations, notamment la liaison entre le serveur et le device disque: | qui affiche plus d'informations, notamment la liaison entre le serveur et le device disque à la fin de chaque bloc: | ||
---- | ---- | ||
iSCSI Transport Class version 2.0-870 | iSCSI Transport Class version 2.0-870 | ||
Ligne 423 : | Ligne 417 : | ||
==Montage== | ==Montage classique via le fichier "/etc/fstab"== | ||
Nous allons les monter comme décrit dans l'article sur le [[LINUX:Montage d'espace disque|Montage d'espace disque]]. | Nous allons les monter comme décrit dans l'article sur le [[LINUX:Montage d'espace disque|Montage d'espace disque]]. | ||
Ligne 466 : | Ligne 460 : | ||
==Montage via Systemd== | |||
Au lieu d'ajouter ces deux entrées au fichier "/etc/fstab", on peut utiliser la fonctionnalité de Systemd pour monter ces disques. | Au lieu d'ajouter ces deux entrées au fichier "/etc/fstab", on peut utiliser la fonctionnalité de Systemd pour monter ces disques. | ||
Ligne 517 : | Ligne 512 : | ||
==RAID 1== | |||
Au lieu d'utiliser les deux disques séparément, comme ils sont de même taille, on peut les coupler pour faire un seul device de type RAID 1 software. | |||
Dernière version du 9 juin 2023 à 18:20
→ retour à la gestion des disques
→ retour au menu de la Haute disponibilité
But
ISCSI est un protocole réseau qui permet d'utiliser à distance une partition de disque d'une machine "target" sur une autre machine "initiator" comme si ce disque était connecté localement.
Ce protocole est utilisé dans les SAN qui mettent à disposition un ensemble de disques durs à utiliser comme on le désire mais à distance.
Il ne faut le confondre avec les protocoles de partages de fichiers tels SMB (samba) et NFS. Un NAS est une machine qui offre des espaces de partage de fichiers.
Principe
Le protocole ISCSI travaille en mode Client-Serveur. Il est donc constitué de deux composantes:
- Target : la machine qui met à disposition certain de ses disques
- Initiator : la machine qui va utiliser les disques mis à disposition par le serveur
Nous allons expliquer la configuration de ces deux pièces: target et initiator.
Matériel et adressage IP
Dans notre exemple, nous utilisons deux serveurs ("target") et un client ("initiator"). Le schéma ci-dessous nous montre l'adressage IP et le nom de ces trois machines. Nous avons mis deux serveurs (target) ISCSI pour illustrer l'intérêt du terme "initiator-name" abordé ci-dessous.
Serveur ou Target
Ces deux machines vont offrir à d'autres machines la possibilité d'utiliser un espace disque local. Ces opérations sont à effectuer sur les deux serveurs.
Installation
Un paquet est à installer:
dnf install scsi-target-utils
Notons qu'il existe d'autres méthodes de gestion.
Préparation du disque dur
Nous avons ajouté un disque dur de 160GB que nous nommons "/dev/sdb". Nous y faisons une seule partition de type Linux: "/dev/sdb1".
Configuration
Les fichiers de configuration se retrouvent dans le répertoire "/etc/tgt".
- le fichier "tgtd.conf" fait référence au fichier "targets.conf" et aux fichiers de type ".conf" se trouvant dans le sous-répertoire "/etc/tgt/conf.d",
- le fichier "targets.conf" contient les paramètres généraux.
- Dans le sous-répertoire "/etc/tgt/conf.d", on crée le fichier, que l'on nommera "diskb.conf", contenant les paramètres permettant de mettre à disposition la partition "/dev/sdb1" aux clients ISCSI distants.
Voici son contenu pour la machine "sv1.home.dom":
<target iqn.2023-02.dom.home.sv1:sv1.target1> backing-store /dev/sdb1 initiator-name iqn.2023-02.dom.home.sv:sv.initiator01 incominguser diskuser Eupen2Marron initiator-address 192.168.1.73 </target>
Et voici son contenu pour la machine "sv2.home.dom":
<target iqn.2023-02.dom.home.sv2:sv2.target1> backing-store /dev/sdb1 initiator-name iqn.2023-02.dom.home.sv:sv.initiator01 incominguser diskuser Eupen2Marron initiator-address 192.168.1.73 </target>
Explications des options:
- target <nom du target> : définit le nom du target sous lequel les clients ISCSI verront ce device. Normalement ce nom suit une structure de nommage: "iqn.<année>-<mois>.<nom de domaine en ordre inverse>:<intitulé personnel>". On a donné des noms du target différents pour les deux machines pour une question de lisibilité.
- backing-store <nom de device disque> : définit le nom du device disque; il peut être une partition disque ou LVM
- initiator-name <nom de l'initiator> : définit le nom de l'initiator, sorte de groupe de targets, ayant des options, permettant à un groupe de clients ISCSI d'y accéder; la structure de ce nom suit le même principe que le nom du target. Il est identique sur chaque machine, ainsi il forment un groupe de deux targets ISCSI.
- incominguser <nom d'utilisateur> <mot de passe> : définit les paramètres d'authentification des clients ISCSI; lors d'une connexion, le client devra fournir de nom de cet utilisateur et son mot de passe pour cet "initiator-name". Ils sont liés au nom d'initiator.
- initiator-address <adresse IP> : définit l'adresse IP d'un client ISCSI qui peut y accéder. Ils sont liés au nom d'initiator.
Il existe bon nombre d'autres options. Les trois dernières sont facultatives mais ajoute un aspect de sécurité.
Configurer le mur de feu ou FireWall
Si vous activez le Firewall, ce qui est recommandé, il faut y ajouter la règle suivante:
-A INPUT -p tcp -m tcp --sport 3260 -s 192.168.1.73 -m conntrack --ctstate NEW -j ACCEPT
Activer et lancer le service
Le service à lancer est "tgtd.service". La première commande active le service pour qu'à chaque démarrage du serveur, le service se lance. La seconde lance directement le service.
systemctl enable tgtd.service systemctl start tgtd.service
Eventuellement:
systemctl enable remote-fs.target
Quand on exécute la commande:
netstat -nltp | grep tgtd
on obtient:
Connexions Internet actives (seulement serveurs) Proto Recv-Q Send-Q Adresse locale Adresse distante Etat PID/Program name tcp 0 0 0.0.0.0:3260 0.0.0.0:* LISTEN 1767/tgtd tcp6 0 0 :::3260 :::* LISTEN 1767/tgtd
Nous remarquons que ce service écoute aussi en IPV6.
On peut aussi le constater avec la commande suivante:
tgtadm --lld iscsi --op show --mode portal
qui donne:
Portal: [::]:3260,1 Portal: 0.0.0.0:3260,1
Il est possible d'éliminer la première ligne par la commande:
tgtadm --lld iscsi --op delete --mode portal --param portal=[::]:3260
Nous allons l'intégrer au lancement du service. On crée le répertoire "/etc/systemd/system/tgtd.service.d"; dans ce répertoire, on ajoute le fichier "ipv4.conf" dont voici le contenu:
[Service] ExecStartPost=/usr/sbin/tgtadm --lld iscsi --op delete --mode portal --param portal=[::]:3260
On recharge les paramètres de Systemd:
systemctl daemon-reload
On relance le service:
systemctl stop tgtd.service systemctl start tgtd.service
L'entrée pour IPV6 a disparu.
Vérification
La commande suivante permet d'afficher les caractéristiques de ce target:
tgtadm --mode target --op show
qui donne:
Target 1: iqn.2023-02.dom.home.sv1:sv1.target1 System information: Driver: iscsi State: ready I_T nexus information: LUN information: LUN: 0 Type: controller SCSI ID: IET 00010000 SCSI SN: beaf10 Size: 0 MB, Block size: 1 Online: Yes Removable media: No Prevent removal: No Readonly: No SWP: No Thin-provisioning: No Backing store type: null Backing store path: None Backing store flags: LUN: 1 Type: disk SCSI ID: IET 00010001 SCSI SN: beaf11 Size: 160040 MB, Block size: 512 Online: Yes Removable media: No Prevent removal: No Readonly: No SWP: No Thin-provisioning: No Backing store type: rdwr Backing store path: /dev/sdb1 Backing store flags: Account information: diskuser ACL information: 192.168.1.73 iqn.2023-02.dom.home.sv:sv.initiator01
Client ou Initiator
Après avoir configuré nos serveurs Targets, on passe au client qui va profiter de ces ressources.
Installation
Un paquet est à installer:
dnf install iscsi-initiator-utils
En base, il est déjà installé sur FGedora, Edition Serveur.
Configuration
Les fichiers de configuration se retrouvent dans le répertoire "/etc/iscsi". Il contient deux fichiers: initiatorname.iscsi et iscsid.conf
- Dans le fichier "iscsid.conf", nous allons y apporter quelques modifications.
Ces modifications permettent que la machine s'authentifie auprès des serveurs targets ISCSI. Il s'agit des deux paramètres de l'option "incominguser" activés sur les machines Targets: nom d'utilisateur et son mot de passe. On ajoute ou active ces lignes:
node.session.auth.authmethod = CHAP node.session.auth.username = diskuser node.session.auth.password = Eupen2Marron
- Dans le fichier "initiatorname.iscsi", on remplace la ligne existante par le nom d'initiator défini sur les serveurs targets ISCSI:
InitiatorName=iqn.2023-02.dom.home.sv:sv.initiator01
Il ne peut y avoir qu'une ligne; seule la première ligne est utilisée.
Activer et lancer le service
Le service à lancer est "iscsid.service". La première et la seconde commandes active et lance le service "iscsid" et sont chargées d'établir les connexions aux "Targets" découverts:
systemctl enable iscsi.service systemctl start iscsi.service
Il est important de vérifier que le "target" de Systemd suivant est activé:
systemctl enable remote-fs.target
Et éventuellement:
systemctl enable iscsid.socket systemctl enable iscsiuio.socket systemctl enable iscsi-onboot.service systemctl enable iscsid.service
Notons que par défaut, ils sont activés sous Fedora Server.
Récupération des informations disponibles sur les serveurs
La configuration faite et le service lancé, il est temps de récupérer les informations provenant des serveurs. On lance les deux commandes suivantes qui sont chargées de découvrir les "targets" auprès de nos deux serveurs:
iscsiadm --mode discoverydb --type sendtargets --portal 192.168.1.71 --discover
qui donne:
192.168.1.71:3260,1 iqn.2023-02.dom.home.sv1:sv1.target1
et:
iscsiadm --mode discoverydb --type sendtargets --portal 192.168.1.72 --discover
qui donne:
192.168.1.72:3260,1 iqn.2023-02.dom.home.sv2:sv2.target1
Dans le répertoire "/var/lib/iscsi/nodes", deux sous-répertoires sont apparus: "iqn.2023-02.dom.home.sv1:sv1.target1/192.168.1.71,3260,1" et "iqn.2023-02.dom.home.sv2:sv2.target1/192.168.1.72,3260,1". Dans chacun, le fichier "default" est créé. Il contient nombre de paramètres propres à ce "target".
En parallèle dans le répertoire "/var/lib/iscsi/send_targets", deux sous-répertoires sont apparus: "192.168.1.71,3260" et "192.168.1.72,3260". Dans chacun, le fichier "st_config" est créé. On y rencontre d'autres paramètres liés aux serveurs.
Mise en route de la liaison
Maintenant soit on relance la machine "initiator" soit on relance le service "iscsi.service":
systemctl restart iscsi.service
Vérification
On peut vérifier que les liaisons sont effectives.
- par la commande:
lsblk
qui fait apparaître les deux nouvelles entrées suivantes:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sdb 8:16 0 149G 0 disk sdc 8:32 0 149G 0 disk
Ce sont les deux partitions mises à disposition par les serveurs "target".
- par la commande:
netstat -natp | grep iscsid
qui affiche la liaison IP avec nos deux serveurs "target".
Connexions Internet actives (serveurs et établies) Proto Recv-Q Send-Q Adresse locale Adresse distante Etat PID/Program name tcp 0 0 192.168.1.73:57520 192.168.1.71:3260 ESTABLISHED 2315/iscsid tcp 0 0 192.168.1.73:58242 192.168.1.72:3260 ESTABLISHED 2315/iscsid
- par la commande:
iscsiadm -m session -P 3
qui affiche plus d'informations, notamment la liaison entre le serveur et le device disque à la fin de chaque bloc:
iSCSI Transport Class version 2.0-870 version 6.2.1.4 Target: iqn.2023-02.dom.home.sv1:sv1.target1 (non-flash) Current Portal: 192.168.1.71:3260,1 Persistent Portal: 192.168.1.71:3260,1 ********** Interface: ********** Iface Name: default Iface Transport: tcp Iface Initiatorname: iqn.2023-02.dom.home.sv:sv.initiator01 Iface IPaddress: 192.168.1.73 Iface HWaddress: default Iface Netdev: default SID: 5 iSCSI Connection State: LOGGED IN iSCSI Session State: LOGGED_IN Internal iscsid Session State: NO CHANGE ********* Timeouts: ********* Recovery Timeout: 120 Target Reset Timeout: 30 LUN Reset Timeout: 30 Abort Timeout: 15 ***** CHAP: ***** username: diskuser password: ******** username_in: <empty> password_in: ******** ************************ Negotiated iSCSI params: ************************ HeaderDigest: None DataDigest: None MaxRecvDataSegmentLength: 262144 MaxXmitDataSegmentLength: 8192 FirstBurstLength: 65536 MaxBurstLength: 262144 ImmediateData: Yes InitialR2T: Yes MaxOutstandingR2T: 1 ************************ Attached SCSI devices: ************************ Host Number: 6 State: running scsi6 Channel 00 Id 0 Lun: 0 scsi6 Channel 00 Id 0 Lun: 1 Attached scsi disk sdb State: running Target: iqn.2023-02.dom.home.sv2:sv2.target1 (non-flash) Current Portal: 192.168.1.72:3260,1 Persistent Portal: 192.168.1.72:3260,1 ********** Interface: ********** Iface Name: default Iface Transport: tcp Iface Initiatorname: iqn.2023-02.dom.home.sv:sv.initiator01 Iface IPaddress: 192.168.1.73 Iface HWaddress: default Iface Netdev: default SID: 6 iSCSI Connection State: LOGGED IN iSCSI Session State: LOGGED_IN Internal iscsid Session State: NO CHANGE ********* Timeouts: ********* Recovery Timeout: 120 Target Reset Timeout: 30 LUN Reset Timeout: 30 Abort Timeout: 15 ***** CHAP: ***** username: diskuser password: ******** username_in: <empty> password_in: ******** ************************ Negotiated iSCSI params: ************************ HeaderDigest: None DataDigest: None MaxRecvDataSegmentLength: 262144 MaxXmitDataSegmentLength: 8192 FirstBurstLength: 65536 MaxBurstLength: 262144 ImmediateData: Yes InitialR2T: Yes MaxOutstandingR2T: 1 ************************ Attached SCSI devices: ************************ Host Number: 7 State: running scsi7 Channel 00 Id 0 Lun: 0 scsi7 Channel 00 Id 0 Lun: 1 Attached scsi disk sdc State: running
Partitionnement
On partitionne ces deux disques "/dev/sdb" et "/dev/sdc" comme vu à l'article sur le Partitionnement du disque. Nous n'avons fait qu'une partition.
La commande:
lsblk
donne maintenant:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sdb 8:16 0 149G 0 disk └─sdb1 8:17 0 149G 0 part sdc 8:32 0 149G 0 disk └─sdc1 8:33 0 149G 0 part
Formatage
Nous formatons ces deux partitions au format "xfs":
mkfs.ext4 /dev/sdb1 mkfs.ext4 /dev/sdc1
Montage classique via le fichier "/etc/fstab"
Nous allons les monter comme décrit dans l'article sur le Montage d'espace disque.
Nous créons deux répertoires vides pour le montage:
mkdir /datab mkdir /datac
Comme nous ne connaissons pas à l'avance le nom du device disque, nous utiliserons son UUID.
Exécutons la commande:
blkid
qui donne ces deux UUID:
/dev/sdb1: UUID="74435bdf-f453-471f-aa85-ec5418d59cfd" BLOCK_SIZE="512" TYPE="xfs" PARTUUID="2a4e45db-01" /dev/sdc1: UUID="c45eb09d-3eae-4090-995f-3da5ab7d167c" BLOCK_SIZE="512" TYPE="xfs" PARTUUID="7cdf9c3a-01"
Nous avons le nécessaire pour ajouter toutes deux entrées au fichier "/etc/fstab":
UUID="74435bdf-f453-471f-aa85-ec5418d59cfd" /datab xfs defaults,_netdev 0 0 UUID="c45eb09d-3eae-4090-995f-3da5ab7d167c" /datac xfs defaults,_netdev 0 0
L'option "_netdev" est fondamentale car ce montage ne doit être fait qu'après l'exécution du service "iscsid.service" lors de la phase de Systemd nommée "remote-fs.target".
On peut monter ces nouveaux espaces disques:
mount -a
ou redémarrer la machine "cl1.home.dom".
La commande:
df
voit apparaître nos deux répertoires "/datab" et "/datac":
Sys. de fichiers blocs de 1K Utilisé Disponible Uti% Monté sur /dev/sdb1 156211688 1122160 155089528 1% /datab /dev/sdc1 156211688 1122160 155089528 1% /datac
Montage via Systemd
Au lieu d'ajouter ces deux entrées au fichier "/etc/fstab", on peut utiliser la fonctionnalité de Systemd pour monter ces disques.
Dans le répertoire "/usr/lib/systemd/system", on crée deux fichiers, un pour chaque montage.
- le fichier "datab.mount" dont voici le contenu:
[Unit] Before=remote-fs.target After=iscsid.service Requires=iscsid.service [Mount] What=/dev/disk/by-uuid/74435bdf-f453-471f-aa85-ec5418d59cfd Where=/datab Type=xfs Options=defaults,_netdev [Install] WantedBy=remote-fs.target
- le fichier "datac.mount" dont voici le contenu:
[Unit] Before=remote-fs.target After=iscsid.service. Requires=iscsid.service [Mount] What=/dev/disk/by-uuid/c45eb09d-3eae-4090-995f-3da5ab7d167c Where=/datac Type=xfs Options=defaults,_netdev [Install] WantedBy=remote-fs.target
On y retrouve tous les paramètres entrés dans le fichier "/etc/fstab". On remarque l'ordre d'éxécution. Il se fait après le service "iscsid.service" qui effectue la liaison avec les serveurs "target" et le montage se fait lors de la phase "remote-fs.target".
On recharge les paramètres de Systemd que nous venons de modifier:
systemctl daemon-reload
et on active ces deux points de montage:
systemctl enable datab.mount systemctl enable datac.mount
Deux liens sont ajouté dans le répertoire "/etc/systemd/system/remote-fs.target.wants".
On redémarre la machine "cl1.home.dom" ou on exécute les commandes:
systemctl start datab.mount systemctl start datac.mount
pour monter ces deux disques.
RAID 1
Au lieu d'utiliser les deux disques séparément, comme ils sont de même taille, on peut les coupler pour faire un seul device de type RAID 1 software.
→ retour à la gestion des disques
→ retour au menu de la Haute disponibilité