Aymeric / APLU(.FR) - Mot-clé - iscsiSite d'Aymeric (ou d'aplufr) pour parler de Linux, de technique.. enfin de tout et surtout de n'importe quoi !2023-09-19T19:41:16+02:00Aymericurn:md5:9a770342f58fde945e9ce016459f8f12DotclearStockage, iSCSI, Multipath et Linuxurn:md5:6e854711d089b6d3e3406b5c2d210b392017-06-21T18:49:00+02:002017-07-21T20:53:20+02:00APLUsysadminiscsilinuxlunmultipathsysadmin <p>Ou comment faire tomber tout ce beau monde en marche, assez simplement <img src="https://www.aplu.fr/v2/?pf=smile.svg" alt=":)" class="smiley" /></p>
<h2>De quoi parle-t-on ?</h2>
<h3>iSCSI</h3>
<p>iSCSI c’est un protocole pour accéder à un disque, un morceau de disque, bref à un espace de stockage à travers le réseau (<em>via</em> des adresses IP).</p>
<p>Dit autrement, vous avez une machine avec plein de disques d’un côté du réseau, et une machine avec une (ou plusieurs) cartes réseau et vous souhaitez accéder à vos disques directement <em>via</em> le réseau ? C’est ce que permet de faire iSCSI.</p>
<h3>Multipath</h3>
<p>Le multipath, comme le nom peut le laisser entendre, c’est permettre d’accéder à la même chose par plusieurs chemins.</p>
<p>Appliqué au stockage, ça veut dire qu’on va accéder sur la même ressource de stockage <em>via</em> plusieurs liens, ce qui permet d’avoir de la redondance en cas de perte, et éventuellement, une répartition de charge. Ça peut être vu de manière équivalente <a class="ref-post" href="https://www.aplu.fr/v2/post/2014/05/24/Agr%C3%A9gation-de-liens-%28bonding%29-sous-Linux-%28Debian/Ubuntu%29">à ce qui avait décrit dans ce billet, sur le bonding réseau</a>.</p>
<h2>Mise en pratique</h2>
<p>Ici, je ne vais pas expliquer comment partager la ressource de stockage. Plusieurs raisons :</p>
<ul>
<li>On utilise en général des technologies de stockage différentes les unes des autres, et chacune a ses propres manières de faire la partie « serveur » (<em>target</em>) ;</li>
<li>La ressource de stockage peut être <em>via</em> Ceph/RDB, une baie dédiée (type Dell, IBM, EMC²), du VSAN VMware, une grappe raid… ou un simple disque dur.</li>
</ul>
<p>En termes de stockage, lorsqu’on partage un espace qui sera vu comme un disque, on appelle ça un LUN (<em>Logical Unit Number</em>), on doit donc définir sur l’équipement qui fait le stockage que le LUN numéro <em>xyz</em> sera publié pour le serveur <em>Charlie</em>. Pour ça, on présente le LUN dans un target et ce target au serveur. Il peut y avoir plusieurs LUN dans le même target et, à ma connaissance, un LUN ne peut pas être dans plusieurs targets.</p>
<p>Puisque l’on souhaite mettre du multipath ensuite, on doit donc s’assurer que le target sera joignable par plusieurs addresses IP (qui seront potentiellement sur des équipements réseau différents le long du chemin, sinon on se retrouve avec un SPoF qu’on va chercher à éviter).</p>
<p>Une fois le LUN « publié » depuis notre serveur Linux, on va pouvoir attacher ce volume au serveur.</p>
<p>Sur CentOS/RedHat, il faut installer le paquet iscsi-initiator-utils ; pour Debian/Ubuntu, il faut installer open-iscsi.</p>
<p>Dans les deux cas, on se retrouve avec une commande : iscsiadm.</p>
<h2>iscsiadmin</h2>
<p>Avant de commencer, on va (re)définir quelques valeurs par défaut qui sont plus adaptées pour la suite.</p>
<p>Ces réglages se font dans le fichier /etc/iscsi/iscsid.conf</p>
<p>Il y a quelques variables qui peuvent être définies, elles permettent d’avoir des mots de passe et du chiffrement, ce n’est pas obligatoire mais fortement recommandé.</p>
<pre>
node.session.auth.authmethod = CHAP
node.session.auth.username = username
node.session.auth.password = password!
discovery.sendtargets.auth.authmethod = CHAP
discovery.sendtargets.auth.username = username
discovery.sendtargets.auth.password = password!</pre>
<p>Cette valeur doit être modifiée, elle définit au bout de combien de secondes une session iSCSI qui n’est plus valable (par exemple le chemin réseau est KO) l’erreur sera remontée au-dessus. Vu autrement, au bout de combien de secondes, en cas de perte, on aura des erreurs et le LUN sera vu comme hors ligne, comme nous allons mettre du multipath ensuite, il est préférable d’avoir cette valeur à 0.</p>
<pre>
node.session.timeo.replacement_timeout = 0</pre>
<p>Une fois les options modifiées, lancez ou relancez le service iscsid.</p>
<p>Une fois ces réglages faits, avec la commande iscsiadm on va demander à la partie stockage, d’envoyer la liste des « targets » auquels le serveur a accès.</p>
<pre>
# iscsiadm -m discovery -t sendtargets -p 10.10.199.4
10.10.199.4:3260,2 iqn.1998-01.com.foo:4beb2e86-9c13-45f7-be3d-5eb96b7b62a6
</pre>
<p>On répète la même commande pour toutes les IP où notre LUN est joignable.</p>
<p>Une fois l’ensemble des discovery réalisés, la commande suivante permet de passer en ligne tous les LUNs.</p>
<pre>
# iscsiadm -m node -L all</pre>
<p>Si vous faites la commande <em>lsblk -pS</em> vous devriez voir plusieurs nouveaux disques (ici de sdb à sdm, je vous laisse deviner la solution de stockage utilisée :)).</p>
<pre>
# lsblk -pS
NAME HCTL TYPE VENDOR MODEL REV TRAN
/dev/sda 0:0:0:0 disk VMware Virtual disk 2.0
/dev/sdb 8:0:0:0 disk VMware Virtual SAN 0001 iscsi
/dev/sdc 3:0:0:0 disk VMware Virtual SAN 0001 iscsi
/dev/sdd 9:0:0:0 disk VMware Virtual SAN 0001 iscsi
/dev/sde 10:0:0:0 disk VMware Virtual SAN 0001 iscsi
/dev/sdf 8:0:0:1 disk VMware Virtual SAN 0001 iscsi
/dev/sdg 3:0:0:1 disk VMware Virtual SAN 0001 iscsi
/dev/sdh 9:0:0:1 disk VMware Virtual SAN 0001 iscsi
/dev/sdi 10:0:0:1 disk VMware Virtual SAN 0001 iscsi
/dev/sdj 8:0:0:2 disk VMware Virtual SAN 0001 iscsi
/dev/sdk 3:0:0:2 disk VMware Virtual SAN 0001 iscsi
/dev/sdl 9:0:0:2 disk VMware Virtual SAN 0001 iscsi
/dev/sdm 10:0:0:2 disk VMware Virtual SAN 0001 iscsi</pre>
<h2>Le multipath</h2>
<p>Pour configurer le multipath, ça va être relativement plus simple à faire. Sous CentOS/RHEL, il faut installer le paquet device-mapper-multipath et sous Debian/Ubuntu : multipath-tools.</p>
<p>Ensuite, il suffit de créer le fichier /etc/multipath.conf avec le contenu suivant :</p>
<pre>
defaults {
user_friendly_names yes
find_multipaths yes
features "1 queue_if_no_path"
path_grouping_policy failover
no_path_retry 100
}</pre>
<p>Une relance du service multipathd suffit en général pour prendre en compte les modifs.</p>
<p>Il est possible d’être plus specifique dans le fichier de configuration mais dans le cas présent, ces options suffisent pour nos besoins.</p>
<p>Une fois fait, la commande multipath -l permet de lister les différents agrégats de disque réalisés :</p>
<pre>
# multipath -l
mpathd (1VMware_VITDEVIDc7593159e1fd795a1d02901b0eafc51b) dm-4 VMware ,Virtual SAN
size=400G features='1 queue_if_no_path' hwhandler='0' wp=rw
|-+- policy='service-time 0' prio=0 status=enabled
| `- 8:0:0:2 sdj 8:144 active undef running
|-+- policy='service-time 0' prio=0 status=enabled
| `- 9:0:0:2 sdl 8:176 active undef running
|-+- policy='service-time 0' prio=0 status=active
| `- 3:0:0:2 sdk 8:160 active undef running
`-+- policy='service-time 0' prio=0 status=enabled
`- 10:0:0:2 sdm 8:192 active undef running
mpathc (1VMware_VITDEVIDa05931591221cbf9f449901b0eafc615) dm-3 VMware ,Virtual SAN
size=200G features='1 queue_if_no_path' hwhandler='0' wp=rw
|-+- policy='service-time 0' prio=0 status=enabled
| `- 8:0:0:1 sdf 8:80 active undef running
|-+- policy='service-time 0' prio=0 status=active
| `- 3:0:0:1 sdg 8:96 active undef running
|-+- policy='service-time 0' prio=0 status=enabled
| `- 9:0:0:1 sdh 8:112 active undef running
`-+- policy='service-time 0' prio=0 status=enabled
`- 10:0:0:1 sdi 8:128 active undef running
mpatha (1VMware_VITDEVID3dc72e59d49bb331d68b901b0eafc615) dm-2 VMware ,Virtual SAN
size=100G features='1 queue_if_no_path' hwhandler='0' wp=rw
|-+- policy='service-time 0' prio=0 status=enabled
| `- 3:0:0:0 sdc 8:32 active undef running
|-+- policy='service-time 0' prio=0 status=enabled
| `- 8:0:0:0 sdb 8:16 active undef running
|-+- policy='service-time 0' prio=0 status=active
| `- 9:0:0:0 sdd 8:48 active undef running
`-+- policy='service-time 0' prio=0 status=enabled
`- 10:0:0:0 sde 8:64 active undef running</pre>
<p>Ici, on se retrouve avec 3 disques, mpathd, mpathc, et mpatha qui sont joignables par 4 chemins différents.</p>
<p>Pour l’usage ensuite, on accèdera non plus à sdX mais à mpathX, ainsi l’abstraction multipath permet de garantir l’accès au stockage.</p>
<p> </p>
<p> </p>