Serveur avec baies de disques, double attachement ================================================= .. meta:: :authors: Loïs Taulelle Ceci est un exemple de configuration comprenant un serveur et trois baies de disques, en attachement multiple. Terminologie : :term:`NAS` + :term:`DAS`. matériel : ---------- * Serveur : * Dell R740 (de l'année 2020), * 2x Intel Xéon Silver 4214R CPU @ 2.40GHz, 2 threads par coeur, soit 48 coeurs logiques, * 192 GiB de :term:`RAM`, * Carte :term:`BOSS` 250 GiB pour l':term:`OS`, Debian 11 Bullseye, * 2x 10Gib/s Ethernet Controller, * 8x emplacements 2,5\" :term:`SAS` libres, * 2x contrôleurs :term:`HBA` externes. * Baies * 3x chassis MD1200, * 2x :term:`EMM` par chassis, * 12x disques 16 TiB :term:`SAS` par chassis. multipath : ----------- Cette disposition est la plus courante, lorsque l'on utilise des contrôleurs :term:`RAID` matériel. Avec de simples contrôleurs :term:`HBA`, et dans le cadre de notre exemple, elle nécessite l'usage du logiciel *multipath*. .. figure:: /_static/double-chain.png :alt: DAS, double, illustration Dell :align: center :term:`DAS`, double attachement (illustration Dell) Il est aussi possible d'utiliser un attachement en anneau, ou "Daisy Chain". Cette disposition n'est pas toujours supportée par les contrôleurs :term:`RAID` matériel. Elle fonctionne pourtant parfaitement avec des contrôleurs :term:`HBA` et *multipath*. .. figure:: /_static/daisy-chain.png :alt: DAS, "Daisy Chain", ring :align: center :term:`DAS`, double attachement en "Daisy Chain" (ou en anneau) En fait, avec *multipath*, le type d'attachement physique importe peu. Il suffit d'indiquer quels disques doivent être gérés et c'est le logiciel qui va découvrir les chemins (la topologie). Le modèle, ou la génération, de contrôleur :term:`SAS`, supportant plus ou moins de disques (le LSI SAS2008 supporte de 256 à 512 devices), on pourra attacher plus ou moins de baies :term:`DAS` (jusqu'à 8 baies MD1200, soit 96 disques, ou 4 baies MD3060e, soit 240 disques). - Pour les distributions Debian et dérivées, installez *multipath-tools* : .. code-block:: bash apt install multipath-tools - fichier ``/etc/modprobe.d/zfs.conf`` : .. code-block:: bash options spl spl_kmem_cache_slab_limit=16384 # ARC entre 96GiB et 144GiB options zfs zfs_arc_min=103079215104 zfs_arc_max=154618822656 - fichier ``/etc/zfs/vdev_id.conf`` : .. code-block:: bash multipath yes Oui, c'est tout. Par contre, il n'est pas possible de mélanger des disques gérés dans *vdev_id.conf* et d'autres avec *multipath*. Dans ce cas de figure, même les disques en simple attachement, ceux de la baie frontale du serveur par exemple, devront être gérés par *multipath*. configuration : --------------- - fichier ``/etc/multipath.conf`` : De la même manière qu'avec le fichier *vdev_id.conf* en simple attachement, il faut décrire les disques (par leur :term:`GUID`), les nommer (leur donner un alias). Il est fortement recommandé de blacklister le disque système. .. code-block:: bash # /etc/multipath.conf # see /usr/share/doc/multipath-tools/examples/multipath.conf.annotated.gz defaults { verbosity 1 user_friendly_names no find_multipaths yes # or greedy, or smart } blacklist { wwid ata-DELLBOSS_VD_60482ec238880010 # as in /dev/disk/by-id/ } multipaths { # baie1 MD1200 double attachement multipath { wwid 35000cca01aa65e50 alias B1D0 } multipath { wwid 35000cca01aa7a0d0 alias B1D1 } # [ ... ] multipath { wwid 35000cca01aa68344 alias B3D11 } } # fin multipaths Vous retrouvez l'association entre un :term:`GUID` (préfixé d'un *3*) et un alias humainement compréhensible. Cela peut paraître laborieux, mais c'est trés facile à scripter. `Quelques exemples de scripts `_. Après vérification que ``multipathd`` a bien démarré lors de son installation, il faut lui faire prendre en compte sa nouvelle configuration : .. code-block:: bash ps faxu | grep [m]ulti root 3210 0.0 0.0 2687520 22752 ? SLsl 2013 124:16 /sbin/multipathd -d -s .. code-block:: bash multipath -F # Flush all unused multipath device maps. .. code-block:: bash multipath -r # Force devmap reload. [ ... output may differ ... ] .. code-block:: bash multipath # list all new added devices [ ... output may differ ... ] - commande ``multipath -v2 -ll`` : Permet d'afficher la topologie, telle que détectée par *multipath* (*-v2* : be verbose, *-ll* : show the current multipath topology from all available sources). .. code-block:: bash data11:~# multipath -v2 -ll | less B1D8 (35000039a7843b7ad) dm-17 TOSHIBA,MG08SCA16TEY size=15T features='2 queue_mode mq' hwhandler='0' wp=rw |-+- policy='service-time 0' prio=1 status=active | `- 4:0:16:0 sdag 66:0 active ready running `-+- policy='service-time 0' prio=1 status=enabled `- 5:0:16:0 sdbe 67:128 active ready running B2D8 (35000039a785811e1) dm-5 TOSHIBA,MG08SCA16TEY size=15T features='2 queue_mode mq' hwhandler='0' wp=rw |-+- policy='service-time 0' prio=1 status=active | `- 4:0:3:0 sdu 65:64 active ready running `-+- policy='service-time 0' prio=1 status=enabled `- 5:0:3:0 sdas 66:192 active ready running B1D7 (35000039a7818ed75) dm-15 TOSHIBA,MG08SCA16TEY size=15T features='2 queue_mode mq' hwhandler='0' wp=rw |-+- policy='service-time 0' prio=1 status=active | `- 4:0:24:0 sdao 66:128 active ready running `-+- policy='service-time 0' prio=1 status=enabled `- 5:0:24:0 sdbm 68:0 active ready running B2D11 (35000039a78581391) dm-2 TOSHIBA,MG08SCA16TEY size=15T features='2 queue_mode mq' hwhandler='0' wp=rw |-+- policy='service-time 0' prio=1 status=enabled | `- 4:0:10:0 sdab 65:176 active ready running `-+- policy='service-time 0' prio=1 status=active `- 5:0:10:0 sdaz 67:48 active ready running B2D7 (35000039a78581595) dm-3 TOSHIBA,MG08SCA16TEY size=15T features='2 queue_mode mq' hwhandler='0' wp=rw |-+- policy='service-time 0' prio=1 status=active | `- 4:0:11:0 sdac 65:192 active ready running `-+- policy='service-time 0' prio=1 status=enabled [ ... ] Vous retrouvez pour chaque disque, une ligne rappelant l'alias, le :term:`GUID`, le device mappé, VENDOR et MODEL. Puis une deuxième ligne avec la taille et les options. Enfin les chemins (ou le chemin) vers le device, ainsi que son état. Fun fact : La sortie n'est jamais dans le même ordre. Vous retrouverez aussi les alias des disques dans */dev/mapper/*. Retour à ZFS : -------------- - commande ``zpool create`` : Oui, c'est la même que dans l'exemple précédent. .. code-block:: bash zpool create -f data \ raidz2 B1D0 B1D1 B1D2 B1B3 B1D4 B1D5 \ raidz2 B1D6 B1D7 B1D8 B1D9 B1D10 B1D11 \ raidz2 B2D0 B2D1 B2D2 B2B3 B2D4 B2D5 \ raidz2 B2D6 B2D7 B2D8 B2D9 B2D10 B2D11 \ raidz2 B3D0 B3D1 B3D2 B3B3 B3D4 B3D5 \ raidz2 B3D6 B3D7 B3D8 B3D9 B3D10 B3D11 \ zfs set compression=on data zfs set atime=off data - commande ``zpool status`` : Pour ZFS, la présentation ne change pas. Le chemin vers les vdev n'a pas d'importance. .. code-block:: bash zpool status pool: data state: ONLINE scan: scrub repaired 0B in 00:10:32 with 0 errors on Sun Jan 9 00:24:55 2022 config: NAME STATE READ WRITE CKSUM data ONLINE 0 0 0 raidz2-0 ONLINE 0 0 0 B1D0 ONLINE 0 0 0 B1D1 ONLINE 0 0 0 B1D2 ONLINE 0 0 0 B1D3 ONLINE 0 0 0 B1D4 ONLINE 0 0 0 B1D5 ONLINE 0 0 0 raidz2-1 ONLINE 0 0 0 B1D6 ONLINE 0 0 0 B1D7 ONLINE 0 0 0 [ ... ] raidz2-5 ONLINE 0 0 0 B3D6 ONLINE 0 0 0 B3D7 ONLINE 0 0 0 B3D8 ONLINE 0 0 0 B3D9 ONLINE 0 0 0 B3D10 ONLINE 0 0 0 B3D11 ONLINE 0 0 0 errors: No known data errors - commande ``zfs list`` : Ces données sont tirées d'un ensemble déjà en production. .. code-block:: bash zfs list NAME USED AVAIL REFER MOUNTPOINT data 83.6T 91.9T 36.5K none data/crlfd1 83.6T 16.4T 83.6T /data/crlfd1 [ ... ]