Stockage, iSCSI, Multipath et Linux

Ou comment faire tomber tout ce beau monde en marche, assez simplement :)

De quoi parle-t’on ?

iSCSI

iSCSI c’est un protocole pour accéder a un disque, un morceau de disque, bref à espace de stockage à travers le réseau (via des adresses IP).

Dit autrement, vous avez une machine avec plein de disque d’un côté, du réseau, et une machine avec une (ou plusieurs) carte réseau et vous souhaitez accéder à vos disques directement via le réseau ? C’est ce que permet de faire iSCSI.

Multipath

Le multipath, comme le nom peut le laisser entendre, c’est permettre d’accéder à la même chose via plusieurs chemins.

Appliqué au stockage, ça veut dire qu’on va accéder sur la même ressource de stockage via 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 à ce qui avait décrit dans ce billet, sur le bonding réseau.

Mise en pratique

Ici je ne vais pas expliquer comment partager la ressource de stockage. Plusieurs raisons :

  • On utilise en général des technologies de stockages différentes les unes des autres, et chacune ont leurs propres manières de faire la partie « serveur » (target) ;
  • La ressource de stockage peut être via Ceph/RDB, une baie dédié (type Dell, IBM, EMC²), du VSAN VMware, une grappe raid.. ou un simple disque dur.

En terme de stockage, lorsqu’on partage un espace qui sera vu comme un disque on appelle ça un LUN (Logical Unit Number), on doit donc définir sur l’équipement qui fait le stockage que le LUN numéro xyz sera publié pour le serveur Charlie. 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, a ma connaissance, un LUN ne peut pas être dans plusieurs targets.

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éseaux différents le long du chemin, sinon on se retrouve avec un SPoF qu’on va chercher à éviter).

Une fois le LUN « publié » depuis notre serveur Linux on va pouvoir attacher ce volume au serveur.

Sur CentOS/RedHat il faut installer le paquet iscsi-initiator-utils, pour Debian/Ubuntu il faut installer open-iscsi.

Dans les deux cas, on se retrouve avec une commande : iscsiadm.

iscsiadmin

Avant de commencer, on va (re)définir quelques valeurs par défaut qui sont plus adaptés pour la suite.

Ces règlages se font dans le fichier /etc/iscsi/iscsid.conf

Il y a quelques variables qui peuvent être définie, elle permettre d’avoir des mots de passe et du chiffrement, ce n’est pas obligatoire mais fortement recommendé.

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!

Cette valeur doit être modifié, elle définie au bout de combien de seconde un session iSCSI qui n’est plus valable (par exemple le chemin réseau est KO) l’erreur sera remonté au dessus. Vu autrement, au bout de combien de seconde 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.

node.session.timeo.replacement_timeout = 0

Une fois les options modifiés, lancez ou relancez le service iscsid.

Une fois ces règlages fait, avec la commande iscsiadm on va demander à la partie stockage, envoie la liste des « targets » auquels jle serveur à accès.

# 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

On répête la même commande pour toutes les IP où notre LUN est joignable.

Une fois l’ensemble des discovery réalisé, la commande suivante permet de passer en ligne tous les LUNs.

# iscsiadm -m node -L all

Si vous faites la commande lsblk -pS vous devriez voir plusieurs nouveaux disques (ici de sdb à sdm, je vous laisse deviner la solution de stockage utilisé :)).

# 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

Le multipath

Pour configurer le multipath ça va être ralitevement plus simple à faire. Sous CentOS/RHEL il faut installer le paquet device-mapper-multipath et sous Debian/Ubuntu : multipath-tools.

Ensuite, il suffit de créer le fichier /etc/multipath.conf avec le contenu suivant :

defaults {
    user_friendly_names  yes
    find_multipaths      yes
    features             "1 queue_if_no_path"
    path_grouping_policy failover
    no_path_retry         100
}

Une relance du service multipathd suffit en général pour prendre en compte les modifs.

Il est possible d’être plus specifique dans le fichier de configuration mais dans le cas présent ces options suffisent pour nos besoins.

Une fois fait, la commande multipath -l permet de liste les différents agrégats de disque réalisé :

# 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

Ici on se retrouve avec 3 disques, mpathd, mpathc, et mpatha qui sont joignables par 4 chemins différents.

Pour l’usage ensuite, on accédera non plus à sdX mais à mpathX, ainsi l’abstraction multipath permet de garantir l’accès au stockage.

 

 

Wileyfox Swift bloqué sur TWRP ?

Si vous aviez lu attentivement le billet précédent, je vous avez dit de ne pas faire la mise à jour depuis le téléphone sous peine de rester bloquer sur TWRP… Bon, maintenant votre téléphone reste sur TWRP et vous ne savez plus comment vous en sortir ? Rassurez-vous votre téléphone n'est pas foutu,  […]

Lire la suite

LineageOS sur Wileyfox Swift

Pour faire suite à ce billet, qui indique la fin de CyanogenMod et pour faire une mise à jour de ce billet, qui explique comment installer CyanogenMod sur le Wileyfox Swift, voici comment installer/mettre à jour votre Wileyfox vers LineageOS 14. Avant de commencer, faites des sauvegardes car  […]

Lire la suite

Haut de page