Das Problem
Die iscsiadm-Erkennung läuft ab, wenn beide Schnittstellen aktiv sind, aber es funktioniert gut, wenn eine einzige Schnittstelle aktiv ist.
# iscsiadm -m discovery -t st -p x.x.x.x iscsiadm: connect to x.x.x.x timed out iscsiadm: connect to x.x.x.x timed out
Die Lösung
Dieses Problem kann auftreten, wenn zwei oder mehr Ethernet-Schnittstellen mit demselben Subnetz verbunden sind oder wenn die iSCSI-Verbindung für die Verwendung einer bestimmten Schnittstelle konfiguriert ist. In solchen Fällen, in denen Pakete an die falsche Schnittstelle geliefert werden, geht das Betriebssystem davon aus, dass sie an einen geschlossenen Port oder ein falsches Ziel gesendet wurden, und es kommt zu einer Zeitüberschreitung. Um dieses Problem zu lösen, müssen wir so konfigurieren, dass asymmetrisch geroutete Pakete auf beiden Schnittstellen des iSCSI-Clients akzeptiert werden, auf denen wir diese Fehlermeldung erhalten:
1. Setzen Sie net.ipv4.conf.all.arp_ignore von sysctl auf 1, um jede Schnittstelle zu zwingen, nur ARP-Anfragen für ihre eigenen Adressen zu beantworten. Oder setzen Sie net.ipv4.conf.[INTERFACE].arp_ignore auf 1 für jede Schnittstelle, die ein Pfad zum iscsi-Speicher ist.
Zum Beispiel in /etc/sysctl.conf :
# vi /etc/sysctl.conf net.ipv4.conf.all.rp_filter=0 net.ipv4.conf.all.arp_ignore=1 net.ipv4.conf.all.arp_announce=2
Oder um es nur für die relevanten Schnittstellen festzulegen (vorausgesetzt, es handelt sich um eth0 und eth1):
# vi /etc/sysctl.conf net.ipv4.conf.eth0.rp_filter=0 net.ipv4.conf.eth0.arp_ignore = 1 net.ipv4.conf.eth0.arp_announce=2 net.ipv4.conf.eth1.rp_filter=0 net.ipv4.conf.eth1.arp_ignore = 1 net.ipv4.conf.eth1.arp_announce=2
2. Wenden Sie die Einstellung mit dem folgenden Befehl an:
# sysctl -p /etc/sysctl.conf
3. Prüfen Sie, ob die neuen Einstellungen erfolgreich angewendet wurden:
# sysctl -a
4. Entfernen Sie nun alte Dateien aus /var/lib/iscsi/ifaces:
# rm -rf /var/lib/iscsi/ifaces
Dies sollte das Zeitlimit für die iscsi-Erkennung beheben, wenn zwei Schnittstellen konfiguriert sind.
Für CentOS/RHEL 7
Beachten Sie, dass, wenn auf dem System CentOS/RHEL 7 installiert ist, Sie die obigen sysctl-Parameter in die Datei /etc/sysctl.d/99-sysctl.conf eingeben und dann den folgenden Befehl ausführen, um die Einstellungen aus der Konfigurationsdatei erneut zu lesen:
# sysctl --system
Notizen
Dieses Problem kann auftreten, wenn eine iSCSI-Verbindung für die Verwendung einer bestimmten Netzwerkschnittstelle konfiguriert ist. Wenn iscsi-Pakete an die falsche Schnittstelle geliefert werden, reagiert Linux so, als ob die Daten an einen geschlossenen Port gesendet wurden, und sendet ein RST-Paket. Solange die empfangenen Daten an der falschen Schnittstelle ankommen, bleibt die Verbindung unterbrochen und kann nicht wiederhergestellt werden.
Dies kann auftreten, wenn mehrere Adapter mit demselben Subnetz verbunden sind. Standardmäßig beantwortet Linux alle ARP-Anfragen für alle IP-Adressen des Systems, unabhängig davon, von welcher Schnittstelle die ARP-Anfrage kam. Wenn eine andere Schnittstelle die ARP-Anforderung für die IP-Adresse der iscsi-verbindung beantwortet, wird der Datenverkehr an die falsche Schnittstelle geleitet und die Verbindung schlägt fehl. Das Einschalten von arp_ignore zwingt eine Netzwerkschnittstelle, nur ARP-Anfragen für ihre eigenen Adressen zu beantworten. Dies verhindert die ARP-Antwort von der falschen Schnittstelle und hält die iscsi-verbindung funktionsfähig.