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 Copier lienLien copié sur presse-papiers!
Copier lienLien copié sur presse-papiers!
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
$ 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
$ cat /sys/class/fc_remote_port/rport-H:B:R/port_stateCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 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_tmosecondes, 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 avecechola valeur souhaitée dans le fichier. Par exemple, pour définirdev_loss_tmosur 30 secondes, veuillez exécuter :echo 30 >
$ echo 30 > /sys/class/fc_remote_port/rport-H:B:R/dev_loss_tmoCopy to Clipboard Copied! Toggle word wrap Toggle overflow
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 Copier lienLien copié sur presse-papiers!
Copier lienLien copié sur presse-papiers!
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"
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 Copier lienLien copié sur presse-papiers!
Copier lienLien copié sur presse-papiers!
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]
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]
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 Copier lienLien copié sur presse-papiers!
Copier lienLien copié sur presse-papiers!
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
# iscsiadm -m session -P 3
24.18.2.2. replacement_timeout Copier lienLien copié sur presse-papiers!
Copier lienLien copié sur presse-papiers!
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]
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 Copier lienLien copié sur presse-papiers!
Copier lienLien copié sur presse-papiers!
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
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
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 Copier lienLien copié sur presse-papiers!
Copier lienLien copié sur presse-papiers!
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
# 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 ».