Serveur avec baies de disques, double attachement
Ceci est un exemple de configuration comprenant un serveur et trois baies de disques, en attachement multiple. Terminologie : NAS + DAS.
matériel :
multipath :
Cette disposition est la plus courante, lorsque l’on utilise des contrôleurs RAID matériel. Avec de simples contrôleurs HBA, et dans le cadre de notre exemple, elle nécessite l’usage du logiciel multipath.
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 RAID matériel. Elle fonctionne pourtant parfaitement avec des contrôleurs HBA et multipath.
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 SAS, supportant plus ou moins de disques (le LSI SAS2008 supporte de 256 à 512 devices), on pourra attacher plus ou moins de baies 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 :
apt install multipath-tools
fichier
/etc/modprobe.d/zfs.conf
:
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
:
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 GUID), les nommer (leur donner un alias). Il est fortement recommandé de blacklister le disque système.
# /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 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 :
ps faxu | grep [m]ulti
root 3210 0.0 0.0 2687520 22752 ? SLsl 2013 124:16 /sbin/multipathd -d -s
multipath -F # Flush all unused multipath device maps.
multipath -r # Force devmap reload.
[ ... output may differ ... ]
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).
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 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.
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.
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.
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
[ ... ]