Dell Unity: Come modificare l'algoritmo di bilanciamento del carico del trunk o del bond LACP (correggibile da Dell)
Summary: Il traffico LACP (Link Aggregation Control Protocol) è bilanciato per le scritture negli SP Unity su un trunk o un bond LACP, ma non è bilanciato in modo uniforme quando le risposte vengono inviate alle richieste di lettura. ...
Symptoms
In determinate condizioni e ambienti di rete, l'algoritmo predefinito potrebbe utilizzare per impostazione predefinita un'unica interfaccia.
Esempi:
Quando l'indirizzo MAC di origine è lo stesso (ovvero quando si utilizza un router), il MAC sarà sempre lo stesso e la porta utilizzata per le trasmissioni sarà sempre la stessa.
Inoltre, in circostanze speciali, MAC diversi possono generare lo stesso valore.
Ad esempio, se i MAC terminano sempre con un numero pari (0,2,4,6,8,A,C o E) e sono presenti due porte nel trunk o nel bond LACP, il calcolo dell'hash indirizzerà il traffico attraverso la stessa porta ogni volta.
I trunk o i collegamenti LACP mostrano che il traffico non è bilanciato, utilizzando un'unica interfaccia anziché tutte le interfacce in modo uniforme.
Questa operazione può essere confermata sulla rete di produzione (dagli amministratori di sistema dello switch di rete) o osservando la visualizzazione grafica della rete in Unisphere in SYSTEM >Performance.
netstat -i' Output nella shell di servizio.
Cause
LACP su Unity utilizza il livello 2 come "xmit_hash_policy" predefinito.
L'utilizzo di Layer2+3 come "xmit_hash_policy" ha lo scopo di fornire una distribuzione più bilanciata del traffico rispetto al solo Layer2, soprattutto negli ambienti in cui è richiesto un dispositivo gateway di livello 3 per raggiungere la maggior parte delle destinazioni.
Riferimento: https://www.kernel.org/doc/Documentation/networking/bonding.txt
Layer2 utilizza XOR degli indirizzi MAC hardware e il campo ID del tipo di pacchetto per generare l'hash.
La formula è
hash = source MAC XOR destination MAC XOR packet type ID slave number = hash modulo slave count.
Layer2+3 utilizza una combinazione di informazioni di protocollo layer2 e layer3 per generare l'hash.
L'hash viene generato utilizzando una combinazione di XOR degli indirizzi MAC hardware e degli indirizzi IP.
La formula è
hash = source MAC XOR destination MAC XOR packet type ID hash = hash XOR source IP XOR destination IP hash = hash XOR (hash RSHIFT 16) hash = hash XOR (hash RSHIFT 8) And then hash is reduced modulo slave count.
Sia Layer2 che Layer2+3 sono conformi allo standard 802.3ad.
Resolution
Per Unity OE Code 4.3 e versioni successive:
Modificare la xmit_hash_policy colla svc_network_bond comando.
Famiglia Dell Unity™ versione 4.3: Note tecniche sui comandi di servizio - pagina 74.
Uso:
svc_network_bond [-h|--help] -d <device> {-s -o <option> -v <value>} {-g [-o <option>]}
La sintassi sarebbe simile all'esempio seguente:
service@(none) spb:~> svc_network_bond -s -d bond23 -o xmit_hash_policy -v 2
I valori accettabili per xmit_hash_policy sono:
0 o layer2 Impostazione
predefinita Questo parametro utilizza lo XOR degli indirizzi MAC hardware per generare l'hash.
1 o layer3+4 Utilizza le informazioni sul protocollo del livello superiore (se disponibili) per generare l'hash.
Ciò consente al traffico verso un particolare peer di rete di estendersi su più slave, anche se una singola connessione non si estenderà su più slave.
2 o layer2+3: utilizza una combinazione di informazioni sul protocollo layer2 e layer3 per generare l'hash: l'algoritmo Mode 2 o Layer2+3 è conforme a 802.3ad.
Per Unity OE codice 4.2.3.9670635 e versioni precedenti:
Contattare l'assistenza clienti Dell e fare riferimento a questo numero KBA.
Per Unity OE Code 5.3.x o versione successiva
Se si apporta la modifica, non è necessaria la Service Shell e non è necessario riavviare il sistema.
Di seguito è riportato un esempio di impostazione di Unity Array nel xmit_hash_policy del laboratorio.
Questo Unity Array è configurato con un trunk LACP noto come bond22.
Accedere con SSH all'array Unity utilizzando l'account di servizio.
Innanzitutto, verificare l'impostazione del xmit_hash_policy.
# svc_network_bond --get --device bond22 -o xmit_hash_policy INFO: Selected device: bond22 INFO: Option to show: xmit_hash_policy INFO: Execution code: 0 xmit_hash_policy=0 #
Quindi, imposta il xmit_hash_policy su 2
# svc_network_bond --set --device bond22 -o xmit_hash_policy -v 2 INFO: Selected device: bond22 INFO: Option to modify: xmit_hash_policy INFO: Requested value: 2 WARNING: Do you want to proceed? [yes/no]: yes <<<<<< sometimes y works and sometimes it fails on the first attempts. Retry then. INFO: Execution code: 0 INFO: Option 'xmit_hash_policy' has been successfully changed. #
# svc_network_bond --get --device bond22 -o xmit_hash_policy INFO: Selected device: bond22 INFO: Option to show: xmit_hash_policy INFO: Execution code: 0 xmit_hash_policy=2 #
Additional Information
netstat e arp Richiede l'abilitazione della Service Shell.
Esempio 'netstat -i' output, che mostra i membri di un bond e può essere utilizzato per determinare se il traffico viene sottoposto ad hashing.
In questo esempio, 'bond20' (il bond LACP) è costituito dalle interfacce 'eth20' e 'eth21'.
Si noti la differenza nella colonna TX-OK, che rappresenta il traffico in uscita da Unity.
21:12:03 service@(none) spb:~> netstat -i Kernel Interface table Iface MTU Met RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg bond20 9000 0 101724658 0 11 0 126087418 0 0 0 BMmRU cmin0 9000 0 14341258 0 0 0 11301712 0 0 0 BMRU eth2 1500 0 0 0 0 0 0 0 0 0 BMU eth3 1500 0 0 0 0 0 0 0 0 0 BMU eth10 1500 0 0 0 0 0 0 0 0 0 BMU eth11 1500 0 0 0 0 0 0 0 0 0 BMU eth12 1500 0 0 0 0 0 0 0 0 0 BMU eth13 1500 0 0 0 0 0 0 0 0 0 BMU eth20 9000 0 52249885 0 1 0 38317 0 0 0 BMsRU eth21 9000 0 49474773 0 10 0 126049101 0 0 0 BMsRU eth22 1500 0 0 0 0 0 0 0 0 0 BMU eth23 1500 0 0 0 0 0 0 0 0 0 BMU eth_int 9000 0 14341055 0 0 0 11301598 0 0 0 BMRU eve_br0 1500 0 16 0 0 0 3656 0 0 0 BMRU lo 65536 0 963282566 0 0 0 963282566 0 0 0 LRU mgmt 1500 0 1405994 0 64 0 360538 0 0 0 BMRU mgmt_vdev 1500 0 356150 0 64 0 326216 0 0 0 BMRU srm 1500 0 135650 0 64 0 5 0 0 0 BMRU vetheve1 1500 0 16 0 0 0 3647 0 0 0 BMRU
Esempio di output di 'arp' sulla shell di servizio che mostra gli indirizzi MAC (HWaddress) per ogni indirizzo IP.
Questi devono essere diversi per consentire al LACP di bilanciare con precisione il carico del traffico su più porte fisiche.
Esistono diverse interfacce che devono essere filtrate in base all'interfaccia in uso.
Utilizzare
'ip addr' per trovare il "Iface" assegnato all'indirizzo IP che si desidera analizzare.
19:23:33 service@(none) spa:~> arp Address HWtype HWaddress Flags Mask Iface 10.98.25.61 ether 00:25:b5:02:01:fc C bond20 10.98.25.60 ether 00:25:b5:02:00:1c C bond20 10.98.25.70 ether 00:25:b5:02:00:dc C bond20 10.98.25.63 ether 00:25:b5:02:01:8c C bond20 10.98.25.65 ether 00:25:b5:02:01:6c C bond20 10.98.25.62 ether 00:25:b5:02:01:dc C bond20 10.98.25.64 ether 00:25:b5:02:01:9c C bond20 10.98.25.67 ether 00:25:b5:02:01:0c C bond20 10.98.25.66 ether 00:25:b5:02:01:7c C bond20 10.98.25.59 ether 00:25:b5:02:00:0c C bond20 peer ether 8e:92:80:4d:2d:02 C eth_int 10.98.25.69 ether 00:25:b5:02:00:fc C bond20 10.98.25.1 ether 00:08:e3:ff:fd:90 C bond20 10.98.25.68 ether 00:25:b5:02:01:1c C bond20