Il problema
Il rilevamento di iscsiadm scade quando entrambe le interfacce sono attive, ma funziona correttamente con l'interfaccia singola attiva.
# 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
La soluzione
Questo problema può verificarsi quando due o più interfacce Ethernet sono connesse alla stessa sottorete o quando la connessione iSCSI è configurata per l'utilizzo di un'interfaccia specifica. In questi casi, quando i pacchetti vengono consegnati all'interfaccia sbagliata, il sistema operativo penserà che venga inviato a una porta chiusa oa una destinazione sbagliata e va in timeout. Per risolvere questo problema, dobbiamo configurare per accettare i pacchetti instradati in modo asimmetrico su entrambe le interfacce del client iSCSI su cui riceviamo questo messaggio di errore:
1. Impostare net.ipv4.conf.all.arp_ignore di sysctl su 1 per forzare ogni interfaccia a rispondere solo alle richieste ARP per i propri indirizzi. Oppure imposta net.ipv4.conf.[INTERFACE].arp_ignore su 1 per ogni interfaccia che è un percorso per l'archiviazione iscsi.
Ad esempio, 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
Oppure, per impostarlo solo per le interfacce rilevanti (supponendo che siano eth0 ed 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. Applicare l'impostazione utilizzando il comando seguente:
# sysctl -p /etc/sysctl.conf
3. Verifica se le nuove impostazioni sono state applicate correttamente in esecuzione:
# sysctl -a
4. Ora rimuovi i vecchi file da /var/lib/iscsi/ifaces:
# rm -rf /var/lib/iscsi/ifaces
Questo dovrebbe risolvere il timeout di rilevamento iscsi quando sono configurate due interfacce.
Per CentOS/RHEL 7
Nota che se sul sistema è installato CentOS/RHEL 7, inserisci i parametri sysctl sopra nel file /etc/sysctl.d/99-sysctl.conf e quindi esegui il comando seguente per rileggere le impostazioni dal file di configurazione:
# sysctl --system
Note
Questo problema può verificarsi se una connessione iSCSI è configurata per utilizzare un'interfaccia di rete specifica. Se i pacchetti iscsi vengono consegnati all'interfaccia sbagliata, Linux risponderà come se i dati fossero stati inviati a una porta chiusa e invierà un pacchetto RST. Finché i dati ricevuti arrivano nell'interfaccia sbagliata, la connessione rimarrà interrotta e non potrà essere ripristinata.
Ciò può verificarsi quando più adattatori sono connessi alla stessa sottorete. Per impostazione predefinita, Linux risponderà a tutte le richieste ARP per qualsiasi indirizzo IP del sistema indipendentemente dall'interfaccia da cui proveniva la richiesta ARP. Se un'interfaccia diversa risponde alla richiesta ARP per l'indirizzo IP della connessione iscsi, il traffico verrà instradato all'interfaccia sbagliata e la connessione avrà esito negativo. L'attivazione di arp_ignore forza un'interfaccia di rete a rispondere solo alle richieste ARP per i propri indirizzi. Ciò impedisce la risposta ARP dall'interfaccia sbagliata e mantiene funzionante la connessione iscsi.