24.18. Modifier le comportement de la perte de lien
Cette section décrit comment modifier le comportement de la perte de lien des périphériques utilisant les protocoles Fibre Channel ou iSCSI.
24.18.1. Fibre Channel
Si un pilote implémente le rappel
dev_loss_tmo
de transport, les tentatives d'accès à un périphérique via un lien seront bloquées lorsqu'un problème de transport est détecté. Pour vérifier si un périphérique est bloqué, exécutez la commande suivante :
$ cat /sys/block/device/device/state
Cette commande retournera
blocked
(« bloqué ») si le périphérique est bloqué. Si le périphérique fonctionne normalement, alors cette commande retournera running
(« en cours d'exécution »).
Procédure 24.13. Déterminer l'état d'un port distant
- Pour déterminer l'état d'un port distant, exécutez la commande suivante :
$ cat /sys/class/fc_remote_port/rport-H:B:R/port_state
- Cette commande retournera
Blocked
(« bloqué ») lorsque le port distant ainsi que les périphériques pouvant être atteints par ce biais sont bloqués. Si le port distant fonctionne normalement, la commande retourneraOnline
(« en ligne »). - Si le problème n'est pas résolu en
dev_loss_tmo
secondes, le port et les périphériques seront débloqués et toutes les E/S exécutées sur ce périphérique (ainsi que toute nouvelle E/S envoyée sur celui-ci) échoueront.
Procédure 24.14. Modifier dev_loss_tmo
- Pour modifier la valeur de
dev_loss_tmo
, saisissez avececho
la valeur souhaitée dans le fichier. Par exemple, pour définirdev_loss_tmo
sur 30 secondes, veuillez exécuter :$ echo 30 > /sys/class/fc_remote_port/rport-H:B:R/dev_loss_tmo
Pour obtenir davantage d'informations sur
dev_loss_tmo
, veuillez consulter Section 24.3.1, « Interface de programmation Fibre Channel ».
Quand une perte de lien dépasse
dev_loss_tmo
, les périphériques scsi_device
et sdN
sont supprimés. Normalement, la classe de Fibre Channel laisse le périphérique tel quel; c-a-d /dev/sdx
demeure /dev/sdx
. C'est parce que la liaison cible est conservée par le pilote de Fibre Channel, donc quand le port cible revient, les adresses SCSI sont recréées en rapport. Cependant, il n'y a rien de garanti ; le sdx
ne sera restauré que si aucun changement supplémentaire n'est fait à la configuration de la case « in-storage » du LUN.
24.18.2. Paramètres iSCSI avec dm-multipath
Si
dm-multipath
est implémenté, il est recommandé de paramétrer les minuteurs iSCSI immédiatement pour déférer les commandes sur la couche multipath. Pour configurer ceci, ajoutez la ligne suivante à device {
dans /etc/multipath.conf
:
features "1 queue_if_no_path"
Ceci permet de s'assurer que les erreurs d'E/S soient ré-essayées et remises en file d'attente si tous les chemins sont en échec dans la couche
dm-multipath
.
Vous pourriez devoir réajuster les minuteurs iSCSI afin de mieux contrôler qu'il ne se produise pas de problème sur votre disque SAN. NOP-Out Interval/Timeouts et
replacement_timeout
sont des minuteurs iSCSI disponibles et configurables, dont il est question dans les sections suivantes.
24.18.2.1. Intervalle/Délai d'expiration NOP-Out
Pour aider à contrôler les problèmes SAN, la couche iSCSI envoie une requête NOP-Out à chaque cible. Si une requête NOP-Out dépasse son délai d'expiration, la couche iCSI répond en faisant échouer toute commande exécutée et en envoyant à la couche SCSI l'instruction de remettre ces commandes en file d'attente dès que possible.
Lorsque la commande
dm-multipath
est utilisée, la couche SCSI fera échouer les commandes en cours d'exécution et les déferrera sur la couche multipath. Puis, la couche multipath tentera à nouveau ces commandes sur un autre chemin. Si dm-multipath
n'est pas en cours d'utilisation, ces commandes seront tentées à nouveau cinq fois avant d'être en échec.
Les intervalles entre requêtes NOP-Out sont de 10 secondes par défaut. Pour ajuster cet intervalle, ouvrez le fichier
/etc/iscsi/iscsid.conf
et modifiez la ligne suivante :
node.conn[0].timeo.noop_out_interval = [interval value]
Une fois définie, la couche iSCSI enverra une requête NOP-Out sur chaque cible toutes les [valeur de l'intervalle] secondes.
By default, NOP-Out requests time out in 10 seconds[9]. To adjust this, open
/etc/iscsi/iscsid.conf
and edit the following line:
node.conn[0].timeo.noop_out_timeout = [timeout value]
Ceci paramètre la couche iSCSI pour faire expirer les requêtes NOP-Out après [timeout value] secondes.
SCSI Error Handler
Si SCSI Error Handler est en cours d'exécution, exécuter des commandes sur un chemin n'échouera pas immédiatement lorsque le délai d'une requête NOP-Out expire sur ce chemin. À la place, ces commandes échoueront après
replacement_timeout
secondes. Pour obtenir davantage d'informations sur replacement_timeout
, veuillez consulter Section 24.18.2.2, « replacement_timeout
».
Pour vérifier si SCSI Error Handler est cours d'exécution :
# iscsiadm -m session -P 3
24.18.2.2. replacement_timeout
replacement_timeout
contrôle le temps que la couche iSCSI doit attendre pour qu'un chemin ou une session dont le délai a expiré puisse se rétablir avant de faire échouer ses commandes. La valeur par défaut de replacement_timeout
s'élève à 120 secondes.
Pour ajuster
replacement_timeout
, ouvrez /etc/iscsi/iscsid.conf
et modifiez la ligne suivante :
node.session.timeo.replacement_timeout = [replacement_timeout]
L'option
1 queue_if_no_path
dans /etc/multipath.conf
paramètres les horodateurs iSCSI pour déférer immédiatement les commandes sur la couche multipath (veuillez consulter Section 24.18.2, « Paramètres iSCSI avec dm-multipath
»). Ce paramètre empêche les erreurs d'E/S de se propager à l'application. Par conséquent, vous pouvez définir replacement_timeout
sur 15 à 20 secondes.
En configurant une valeur
replacement_timeout
plus basse, les E/S sont rapidement envoyées vers un nouveau chemin et exécutées (en cas de dépassement du délai NOP-Out) tandis que la couche iSCSI tente de rétablir le chemin ou la session en échec. Si le délai expire pour tous les chemins, alors la couche du mappeur de périphérique et du multipath mettront les E/S en file d'attente interne, en se basant sur les paramètres du fichier /etc/multipath.conf
au lieu de ceux de /etc/iscsi/iscsid.conf
.
Important
Que vous preniez plutôt en compte la vitesse de basculement ou la sécurité, la valeur recommandée de
replacement_timeout
dépendra également d'autres facteurs. Ces autres facteurs incluent le réseau, la cible, et la charge de travail du système. Ainsi, il est recommandé de minutieusement tester replacements_timeout
avec toute nouvelle configuration avant de l'appliquer sur un système à mission critique.
24.18.3. Root iSCSI
Lors de l'accès à la partition root à travers un disque iSCSI, les compteurs iSCSI doivent être définis de manière à ce que la couche iSCSI possède plusieurs chances de rétablir un chemin ou une session. En outre, les commandes ne doivent pas être remises trop rapidement dans la file d'attente de la couche SCSI. Ceci est le contraire de ce qui doit être fait lorsque
dm-multipath
est implémenté.
Pour commencer, NOP-Out devrait être désactivé. Ceci peut être effectué en paramétrant l'intervalle et le délai d'expiration de NOP-Out sur zéro. Pour effectuer cela, ouvrez le fichier
/etc/iscsi/iscsid.conf
et modifiez-le comme suit :
node.conn[0].timeo.noop_out_interval = 0 node.conn[0].timeo.noop_out_timeout = 0
Similairement, le paramètre
replacement_timeout
doit être élevé. Cela instruira au système d'attendre plus longtemps qu'un chemin ou une session se rétablisse. Pour ajuster replacement_timeout
, ouvrez /etc/iscsi/iscsid.conf
et modifiez la ligne suivante :
node.session.timeo.replacement_timeout = replacement_timeout
Après avoir configuré
/etc/iscsi/iscsid.conf
, vous devriez effectuer une redécouverte du stockage affecté. Cela permettra au système de charger et d'utiliser les valeurs nouvelles dans /etc/iscsi/iscsid.conf
. Pour obtenir davantage d'informations sur la manière de découvrir les périphériques iSCSI, veuillez consulter Section 24.14, « Scanner les interconnexions iSCSI ».
Configurer des délais d'expiration pour une session particulière
Vous pouvez également configurer des délais d’expiration pour une session particulière et les rendre non-persistants (au lieu d'utiliser
/etc/iscsi/iscsid.conf
). Pour effectuer ceci, exécutez la commande suivante (en remplaçant les variables au besoin) :
# iscsiadm -m node -T target_name -p target_IP:port -o update -n node.session.timeo.replacement_timeout -v $timeout_value
Important
La configuration décrite ici est recommandée pour les sessions iSCSI impliquant l'accès à une partition root. Pour les sessions iSCSI impliquant l'accès à d'autres types de stockage (par exemple avec des systèmes utilisant
dm-multipath
), veuillez consulter Section 24.18.2, « Paramètres iSCSI avec dm-multipath
».