2 votes

lpfc + multipath + ubuntu - le chemin continue de changer

J'ai des problèmes pour configurer le multipath en utilisant Emulex (lpfc). Bien que je ne détecte pas de corruption de données, l'administrateur du SAN dispose d'un outil qui montre que les chemins sont changés toutes les 20 secondes environ. Voici les détails :

# multipath -l
san01 (3600a0b80002a042200002cb44a9a29ca) dm-2 IBM     ,1815      FASt
[size=100G][features=0][hwhandler=0]
\_ round-robin 0 [prio=0][active]
 \_ 3:0:0:0 sdb 8:16  [active][undef]
\_ round-robin 0 [prio=0][enabled]
 \_ 4:0:0:0 sdc 8:32  [active][undef]

Les chemins multiples sont connectés au même LUN.

# /lib/udev/scsi_id -g -u -d /dev/sdb
3600a0b80002a042200002cb44a9a29ca
# /lib/udev/scsi_id -g -u -d /dev/sdc
3600a0b80002a042200002cb44a9a29ca

Voici le fichier /etc/multipath.conf

defaults {
        udev_dir                /dev
        polling_interval        5
        selector                "round-robin 0"
        path_grouping_policy    failover
        getuid_callout          "/lib/udev/scsi_id -g -u -d /dev/%n"
        path_checker            readsector
        failback                immediate
        user_friendly_names     yes
}
multipaths {
        multipath {
                wwid    3600a0b80002a042200002cb44a9a29ca
                alias   san01
        }
}

fdisk -l

Disk /dev/sdb: 107.3 GB, 107374182400 bytes
255 heads, 63 sectors/track, 13054 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x61b4bf95

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1       13054   104856223+  83  Linux

Disk /dev/sdc: 107.3 GB, 107374182400 bytes
255 heads, 63 sectors/track, 13054 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x61b4bf95

   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1       13054   104856223+  83  Linux

J'ai augmenté la verbosité pour lpfc et maintenant j'obtiens ce qui suit sur dmesg :

[ 2519.241119] lpfc 0000:07:00.0: 1:0336 Rsp Ring 0 error: IOCB Data: xff000018 x37a120c0 x0 x0 xeb x0 x1b108db xa29b16
[ 2519.241124] lpfc 0000:07:00.0: 1:(0):0729 FCP cmd x12 failed <0/0> status: x1 result: xeb Data: x1b1 x8db
[ 2519.241127] lpfc 0000:07:00.0: 1:(0):0730 FCP command x12 failed: x0 SNS x0 x0 Data: x8 xeb x0 x0 x0
[ 2519.241130] lpfc 0000:07:00.0: 1:(0):0716 FCP Read Underrun, expected 254, residual 235 Data: xeb x12 x0
[ 2519.241275] lpfc 0000:07:00.0: 1:0336 Rsp Ring 0 error: IOCB Data: xff000018 x37a14c48 x0 x0 xd2 x0 x1b208e6 xa29b16
[ 2519.241279] lpfc 0000:07:00.0: 1:(0):0729 FCP cmd x12 failed <0/0> status: x1 result: xd2 Data: x1b2 x8e6
[ 2519.241283] lpfc 0000:07:00.0: 1:(0):0730 FCP command x12 failed: x0 SNS x0 x0 Data: x8 xd2 x0 x0 x0
[ 2519.241286] lpfc 0000:07:00.0: 1:(0):0716 FCP Read Underrun, expected 254, residual 210 Data: xd2 x12 x0

Quelqu'un peut-il voir quelque chose d'anormal dans cette configuration ? Merci.


En me basant sur les commentaires de janneb, j'ai changé la configuration dans multipath.conf en :

defaults {
        udev_dir                /dev
        polling_interval        5
        selector                "round-robin 0"
        path_grouping_policy    multibus
        getuid_callout          "/lib/udev/scsi_id -g -u -d /dev/%n"
        failback                immediate
        user_friendly_names     yes
}

Ce qui donne maintenant :

san01 (3600a0b80002a042200002cb44a9a29ca) dm-2 IBM     ,1815      FASt
[size=100G][features=0][hwhandler=0]
\_ round-robin 0 [prio=2][active]
 \_ 3:0:0:0 sdb 8:16  [active][ready]
 \_ 4:0:0:0 sdc 8:32  [active][ready]

Mais il passe toujours à [active][undef] après un certain temps, puis revient à [ready].

Oh, je viens de remarquer quelque chose, lorsque je lance 'multipath -l', j'obtiens [undef], mais si je lance 'multipath -ll', j'obtiens [ready].

-l     show the current multipath topology from information fetched in sysfs and the device mapper
-ll    show the current multipath topology from all available information (sysfs, the device mapper, path checkers ...)

La configuration est-elle mauvaise ? Comment puis-je déboguer ? Merci.


Merci à janneb et zerolagtime pour leur aide.

C'est là que ça se complique, je pensais ne pas avoir besoin d'expliquer tout ça, et je penche actuellement pour un mélange de configuration matérielle.

Il y a en fait deux serveurs connectés au même LUN en utilisant FC. Au niveau du système d'exploitation, un seul serveur accède au système de fichiers (bien que le même LUN soit exposé aux deux), puisqu'il s'agit d'un système de fichiers ext3 (et non d'un système de fichiers en grappe). Si le serveur 1 tombe en panne, le serveur 2 prend le relais (linux-ha) et monte le système de fichiers.

Serveur 1 (multipath -ll) :

san01 (3600a0b80002a042200002cb44a9a29ca) dm-2 IBM     ,1815      FASt
[size=100G][features=0][hwhandler=0]
\_ round-robin 0 [prio=2][active]
 \_ 3:0:0:0 sdb 8:16  [active][ready]
 \_ 4:0:0:0 sdc 8:32  [active][ready]

Serveur 2 (multipath -ll) :

san01 (3600a0b80002a042200002cb44a9a29ca) dm-2 IBM     ,1815      FASt
[size=100G][features=0][hwhandler=0]
\_ round-robin 0 [prio=2][active]
 \_ 3:0:0:0 sdb 8:16  [active][ready]
 \_ 4:0:0:0 sdc 8:32  [active][ready

Noms des ports du serveur 1 :

# cat /sys/class/fc_host/host3/port_name 
0x10000000c96c5fdb
# cat /sys/class/fc_host/host4/port_name 
0x10000000c96c5df5
root@web-db-1:~# 

Noms des ports du serveur 2 :

#cat /sys/class/fc_host/host3/port_name 
0x10000000c97b0917
# cat /sys/class/fc_host/host4/port_name 
0x10000000c980a2d8

Cette configuration est-elle mauvaise ? La manière dont le LUN est exposé aux deux serveurs est-elle incorrecte ? Je pense que la connexion matérielle est incorrecte, qu'est-ce qui pourrait être mauvais ? Le path_checker du serveur 1 pourrait-il interférer avec le fonctionnement du serveur 2 ? Merci.

3voto

KaoFloppy Points 66

Votre configuration semble bizarre ; normalement, vous devriez avoir 4 chemins vers le même périphérique (c'est-à-dire 4 périphériques /dev/sdX par périphérique multipath). Le contrôleur de tableau est généralement capable d'informer l'hôte de la priorité de chaque chemin, de sorte que vous avez 2 chemins avec une priorité élevée et 2 avec une priorité inférieure. Ensuite, dm-multipath multiplexe les entrées-sorties sur les 2 chemins à haute priorité (l'option "selector" avec la valeur par défaut rr_min_io=100). Maintenant, vous avez 2 groupes de chemins ayant tous deux la même priorité, donc peut-être que dm-multipath répartit l'IO sur les deux, ce qui n'est peut-être pas ce que votre administrateur SAN veut que vous fassiez. Une autre chose étrange est que les périphériques sont marqués avec "undef" plutôt que "ready". Enfin, la numérotation de vos chemins d'accès semble étrange (tout suit le même chemin ?). Êtes-vous vraiment sûr que tout est correctement câblé, que le zonage est correct, etc.

Une sortie typique de "multipath -ll" devrait ressembler à ceci

sanarch3 (3600508b4000683de0000c00000a20000) dm-6 HP,HSV200
\[size=2.0T\]\[features=1 queue\_if\_no\_path\]\[hwhandler=0\]\[rw\]
\\\_ round-robin 0 \[prio=100\]\[active\]
 \\\_ 0:0:0:5 sdc 8:32  \[active\]\[ready\]
 \\\_ 1:0:0:5 sdk 8:160 \[active\]\[ready\]
\\\_ round-robin 0 \[prio=20\]\[enabled\]
 \\\_ 0:0:1:5 sdg 8:96  \[active\]\[ready\]
 \\\_ 1:0:1:5 sdo 8:224 \[active\]\[ready\]

Vous y voyez 4 chemins regroupés en 2 groupes de priorité, et les entrées-sorties sont effectuées sur les périphériques sdc et sdk tandis que sdg et sdo sont inactifs et utilisés uniquement en cas de panne.

EDITAR La raison pour laquelle vous devriez voir 4 chemins est que vous avez 2 ports HBA et que la matrice a 2 contrôleurs redondants. Ensuite, vous avez 2 réseaux redondants avec une couche de commutation finale fournissant des connexions inter-réseaux. Ainsi, les deux HBA voient les deux contrôleurs, d'où 4 chemins pour chaque LUN. Vous pouvez voir cela dans mon exemple ci-dessus pour la numérotation SCSI ID, qui va comme [host controller ID] :[channel ID] :[target controller ID] :[LUN ID]. Ce que vous pouvez voir ci-dessus, c'est que les chemins actifs sont tous deux sur le contrôleur n°0, puisque dans ce cas, le contrôleur n°0 est le "propriétaire" du LUN ; l'IO est possible via l'autre contrôleur, mais avec une pénalité de performance puisque l'autre contrôleur (selon l'implémentation du contrôleur) doit transmettre l'IO au contrôleur propriétaire. Le contrôleur signale donc que les chemins qui vont vers le contrôleur n°0 ont une priorité plus élevée.

Donc, d'après votre question, on voit qu'il n'y a pas du tout de chemin vers l'autre contrôleur. Et, dans le cas où vous n'avez pas de contrôleurs et de réseaux redondants, pourquoi s'embêter avec le multipath en premier lieu ?

0 votes

Les deux sdb1 et sdc1 sont attachés au même LUN, donc en fait j'ai 1 LUN avec 100GBs. /dev/sdb1 est un chemin et /dev/sdc1 en est un autre. Ne puis-je pas le configurer de cette manière ? J'ai 2 câbles qui sortent du serveur, j'ai supposé que chaque périphérique serait un chemin.

0 votes

Bonjour janneb, j'ai ajouté quelques informations supplémentaires à la question originale, pouvez-vous jeter un coup d'œil et me faire part de vos commentaires :) Je vous remercie.

0 votes

Si la description de janneb est correcte, chaque câble sur l'hôte représente deux périphériques dans le système d'exploitation. Pensez-y comme suit : le LUN a deux cibles T1 et T2. Votre hôte possède deux ports HBA agissant en tant qu'initiateurs I1 et I2. Les chemins représentent alors I1->T1, I1->T2, I2->T1 et I2->T2. Ceci est vrai si vous avez deux structures ou si vous n'avez qu'un seul commutateur SAN.

1voto

clrhs Points 1

Les SAN IBM ont généralement des exemples de multipath.conf bien définis dans leurs documentations, n'avez-vous pas commencé par là ? Je vais laisser cette partie comme un exercice pour le lecteur . De plus, l'administrateur de votre SAN vous doit un peu plus de soutien. Quelques points rapides

  • Les oscillations de trajectoire comme celles que vous avez décrites sont généralement dues à une mauvaise configuration du path checker, dans vos deux itérations, vous êtes passé de lire le secteur0 a aucun qui prend probablement le chemin multiple par défaut pour cette marque et ce modèle. tur (unité de test prête).

  • Pas de contrôleur de priorité défini, pas de contrôleur de priorité, pas de priorités.

  • Un gestionnaire de matériel est probablement nécessaire, qui est bien défini dans la documentation.

La meilleure histoire de guerre IBM 1815 que j'ai trouvée était ceci , résumé :

  • Installer le pilote rdac, modprobe scsi_dh_rdac et l'ajouter à votre initrd
  • Utilisez le fichier multipath.conf suivant :

blacklist {
    devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"
    devnode "^hd[a-z]"
    devnode "^sda"
    device {
        vendor "Maxtor*"
        product "OneTouch*"
    }
}
blacklist_exceptions {
    device {
            vendor  "IBM"
            product "1815*"
    }
}
defaults {
    failback                immediate
    no_path_retry           queue
    user_friendly_names     no
    path_grouping_policy    failover
}
devices {
    device {
            vendor                  "IBM"
            product                 "1815*"
            failback                manual
            hardware_handler        "1 rdac"
            path_checker            rdac
            prio_callout            "/sbin/mpath_prio_rdac /dev/%n"
    }
}

Faites-nous savoir comment ça se passe. Bonne chance !

0voto

Edi Points 131

Tout d'abord, vous définissez le multibus, êtes-vous sûr que votre stockage le supporte ? Demandez à votre administrateur SAN si votre stockage est réellement actif/actif, un stockage actif passif ne permet pas de changer de contrôleur tout le temps, cela a un coût pour le stockage et vous posera des problèmes du côté client également. Dans la première configuration, ce n'était pas défini dans la configuration, ce qui signifie que vous prenez la configuration par défaut définie dans multipath (vérifiez /usr/share/doc/mulitpath.conf.anotted) ou regardez la sortie de multipathd -k show config pour avoir une meilleure vue (de toute façon, il faut revoir la configuration par défaut avec vos spécifications de stockage, car elles ne sont pas toujours les meilleures : j'ai eu quelques problèmes avec HDS et rhel).

La deuxième chose, vous avez dit qu'il n'y avait pas de problème d'intégrité sur le FS, êtes-vous sûr que votre FS utilise le périphérique multipathed ??? Si je suppose que vous utilisez LVM, avez-vous vérifié les paramètres de filtrage dans lvm.conf ? Si ce n'est pas bien configuré, lvm utilisera le périphérique en direct au lieu d'utiliser MPIO, cela peut être encore plus un problème avec le stockage actif/passif, puisque lvm forcera l'utilisation d'un contrôleur qui peut ne pas être celui préféré..... J'espère que cela vous aidera Regard

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X