IscsiAdm + Multipath

De Justine's wiki
Aller à la navigation Aller à la recherche

Quoi ?

Nous allons voir comment monter sur une Debian 11 un volume iscsi en multipath. Il va s'agir dans mon cas de monter un volume hébergé sur un cluster PureStorage.

Nous aurons donc une multiprésentation du volume iscsi qui sera ensuité géré par multipath. Toutes les confs suivront, autant que ce que j'ai pu trouver dans le cadre de mes tests, une conf suivant les recommandations PureStorage - cependant, c'est ici une configuration de tests.

Sources

Mise en place

Préalable

Avoir fait le nécessaire côté target (côté serveur) : créé le volume, autorisé l'hôte.

Pour cela, on peut avoir besoin de l'iqn de l'initiateur (le client).

iqn de l'initiateur

Dans tous les cas - une fois le paquet open-iscsi installé -, il se trouve toujours dans:

/etc/iscsi/initiatorname.iscsi

Récupérer des infos détaillées sur les disques (Vendor, product name, etc)

Cela peut me servir n'importe quand, notamment une fois que je me suis connectée à mes iscsi:

lsblk -pS

Install

Installer les paquets suivants:

apt install open-iscsi
apt install multipath-tools

Puis on active et démarre les services iscsid et multipathd.

Config iscsi

Avant toute chose, je vais aller dans /etc/iscsi/iscsid.conf et modifier la valeur suivante:

node.startup

Celle-ci doit être en "automatic", sinon les noeuds ne se reconnecteront pas tous seuls au reboot.

Connection au LUN

Donc, j'ai un volume dispo sur 2 baies à la fois dans mon cas (un pod stretché pour être exacte, en langage PureStorage !).

Pour chacune de mes baies, et ce sur chaque adresse IP où elle est joignable sur son réseau iSCSI, je vais faire la commande suivante de découverte des targets:

iscsiadm -m discovery -t st -p 10.1.2.3
On découvre les targets (ici, le -t st signifie "send targets") disponibles pour nous à chaque fois. À chaque fois, iscsiadm garde ses nodes en mémoire dans /etc/iscsiadm/nodes. Chacun a son dossier avec sa conf.

Je peux voir toutes les targets trouvées:

iscsiadm -m node

Enfin, je vais m'y connecter à toutes en même temps:

iscsiadm -m node -L all

Et voilà ! Je peux voir que j'ai désormais plein de disques qui sont apparus avec la commande lsblk -pS.

Config multipath

Maintenant que tous les disques sont montés, on va les utiliser tous en même temps avec multipath.

La config multipath est assez simple. Le principe de multipath est qu'il va chercher des périphériques de stockage similaires (par exemple, tous mes liens iscsi menant au même volume) et les regrouper dans /dev/mapper/quelquechose afin que l'on puisse y accéder comme un seul périph.

On va commencer par récupérer toutes les valeurs de conf actives pour savoir où il attend son fichier de conf:

multipath -T | grep config_dir
#Donne
config_dir "/etc/multipath/conf.d"

Je vais ensuite créer ce dossier (il n'existe pas par défaut) et y créer un fichier multipath.conf:

defaults {
       polling_interval      10
}

blacklist {
	device {
		vendor "VMWARE.*"
		product "Virtual_disk.*"
	}
}

devices {
  device {
        vendor "PURE"
        product "FlashArray"
        fast_io_fail_tmo 10
        path_grouping_policy "group_by_prio"
        failback "immediate"
        prio "alua"
        hardware_handler "1 alua"
        max_sectors_kb 4096
    }
}

Redhat a une référence pas mal pour les confs.

Explications

  • defaults: Configurations par défaut. Cette config est issue des préco PureStorage.
  • Blacklist : Ici, je blackliste tous les disques VMWare : ils ne seront pas pris en compte par multipath. En réalité, ce n'est pas très grave si ils le sont.
  • Devices : Ici, sert à donner des confs pour les disques pureStorage : ils seront groupés ensemble, et les sont issues des précos purestorage (encore).

Une fois fait, je redémarre le service multipath (systemctl restart multipathd) et je regarde ce que cela donne avec la commande de contrôle multipath -ll:

3624a9370368d17fbea94216800012487 dm-4 PURE,FlashArray
size=10G features='0' hwhandler='1 alua' wp=rw
|-+- policy='service-time 0' prio=50 status=active
| |- 11:0:0:1 sdj 8:144 active ready running
| |- 12:0:0:1 sdk 8:160 active ready running
| |- 13:0:0:1 sdl 8:176 active ready running
| |- 14:0:0:1 sdm 8:192 active ready running
| |- 16:0:0:1 sdo 8:224 active ready running
| |- 15:0:0:1 sdn 8:208 active ready running
| |- 17:0:0:1 sdp 8:240 active ready running
| `- 18:0:0:1 sdq 65:0  active ready running
`-+- policy='service-time 0' prio=10 status=enabled
  |- 4:0:0:1  sdc 8:32  active ready running
  |- 3:0:0:1  sdb 8:16  active ready running
  |- 7:0:0:1  sdf 8:80  active ready running
  |- 5:0:0:1  sde 8:64  active ready running
  |- 6:0:0:1  sdd 8:48  active ready running
  |- 8:0:0:1  sdg 8:96  active ready running
  |- 10:0:0:1 sdi 8:128 active ready running
  `- 9:0:0:1  sdh 8:112 active ready running

Ici, le long numéro (3624a93... etc) est le WWID. On le note, puis on va rajouter le bloc suivant dans la conf de multipath afin de créer un alias.

multipaths {
	multipath {
		wwid 3624a9370368d17fbea94216800012487
		alias pure_vol
	}
}

On le voit, il s'agit ici de créer un alias : de base, dans /dev/mapper, je n'aurais que le WWID (peu pratique). J'ai créé l'alias "pure_vol" (nom au choix bien sûr). Ainsi, mon disque s'appellera /dev/mapper/pure_vol. Je peux revérifier:

multipath -ll
pure_vol (3624a9370368d17fbea94216800012487) dm-4 PURE,FlashArray
size=10G features='0' hwhandler='1 alua' wp=rw
|-+- policy='service-time 0' prio=50 status=active
| |- 11:0:0:1 sdj 8:144 active ready running
| |- 12:0:0:1 sdk 8:160 active ready running
| |- 13:0:0:1 sdl 8:176 active ready running
| |- 14:0:0:1 sdm 8:192 active ready running
| |- 16:0:0:1 sdo 8:224 active ready running
| |- 15:0:0:1 sdn 8:208 active ready running
| |- 17:0:0:1 sdp 8:240 active ready running
| `- 18:0:0:1 sdq 65:0  active ready running
`-+- policy='service-time 0' prio=10 status=enabled
  |- 4:0:0:1  sdc 8:32  active ready running
  |- 3:0:0:1  sdb 8:16  active ready running
  |- 7:0:0:1  sdf 8:80  active ready running
  |- 5:0:0:1  sde 8:64  active ready running
  |- 6:0:0:1  sdd 8:48  active ready running
  |- 8:0:0:1  sdg 8:96  active ready running
  |- 10:0:0:1 sdi 8:128 active ready running
  `- 9:0:0:1  sdh 8:112 active ready running

Et après ?

Après, je peux utiliser /dev/mapper/pure_vol comme n'importe quel disque:

fdisk /dev/mapper/pure_vol
#Création partition
mkfs.ext4 /dev/mapper/pure_vol-part1
#Ajout fs
#Ajout dans le fstab, etc

Démontage et suppression

Le but est ici de supprimer de notre OS l'un des disques montés en iSCSI.

On commence par récupérer les iqn utilisés auprès des targets avec les adresses des portals:

iscsiadm --mode node
#La liste de tous les portals + iqn utilisés connus
10.20.1.80:3260,1 iqn.2010-06.com.purestorage:flasharray.blablabla
#Ou mieux, montrer ceux qui sont connectés
iscsiadm --mode session

Pour chacun de ceux-ci on les déconnecte:

iscsiadm --mode node --targetname iqn.2010-06.com.purestorage:flasharray.blablabla --portal 10.20.1.80 -u
#Recommencer pour chaque target
#À la fin je peux revérifier avec
iscsiadm --mode session

On va ensuite effacer la connection pour chaque target connu, listé par "iscsiadm --mode node"

iscsiadm --mode node --targetname iqn.2010-06.com.purestorage:flasharray.blablabla --portal 10.20.1.80 -o delete
#Puis revérifier
iscsiadm --mode node

Si on a plus du tout de disques en iscsi, on peut désormais désactiver le service iscsid (et multipathd). On peut par ailleurs aller effacer les configurations multipathd concernant ce que l'on vient de supprimer.