Dell Unity: Como alterar o algoritmo de balanceamento de carga do vínculo ou tronco LACP (corrigível pela Dell)
Summary: O tráfego do protocolo de controle de agregação de links (LACP) é balanceado para gravações nas SPs do Unity em um tronco ou vínculo LACP, mas não é equilibrado uniformemente quando as respostas são enviadas às solicitações de leitura. ...
Symptoms
Em determinadas condições e ambientes de rede, o algoritmo padrão pode usar como padrão uma única interface.
Exemplos:
Quando o endereço MAC de origem é o mesmo (também conhecido como quando se usa um roteador), o MAC será sempre o mesmo e a porta usada para transmissões será sempre a mesma.
Além disso, em circunstâncias especiais, MACs diferentes também podem resultar no mesmo valor.
Por exemplo, se os MACs sempre terminam em um número par (0,2,4,6,8,A,C ou E) e há duas portas no tronco ou vínculo LACP, o cálculo do hash direcionará o tráfego pela mesma porta todas as vezes também.
Os troncos ou vínculos LACP mostram que o tráfego não está balanceado usando uma única interface em vez de todas as interfaces uniformemente.
Isso pode ser confirmado na rede de produção (pelos SysAdmins do switch de rede) ou observando a exibição gráfica da rede no Unisphere em Desempenho do sistema>.
netstat -i' Saída no shell de serviço.
Cause
O LACP no Unity usa a camada 2 como seu "xmit_hash_policy" padrão.
Usar a camada 2+3 como a "xmit_hash_policy" destina-se a fornecer uma distribuição de tráfego mais equilibrada do que a camada 2 sozinha, especialmente em ambientes onde um dispositivo de gateway de camada 3 é necessário para alcançar a maioria dos destinos.
Referência: https://www.kernel.org/doc/Documentation/networking/bonding.txt
Layer2 usa XOR de endereços MAC de hardware e campo de ID de tipo de pacote para gerar o hash.
A fórmula é
hash = source MAC XOR destination MAC XOR packet type ID slave number = hash modulo slave count.
Layer2+3 usa uma combinação de informações de protocolo layer2 e layer3 para gerar o hash.
O hash é gerado usando uma combinação do XOR dos endereços MAC de hardware e os endereços IP.
A fórmula é
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.
Tanto a Layer2 quanto a Layer2+3 são compatíveis com 802.3ad.
Resolution
Para o código OE 4.3 e posterior do Unity:
Altere o xmit_hash_policy com o svc_network_bond comando.
Família Dell Unity™ versão 4.3: Notas técnicas dos comandos de serviço — página 74.
Uso:
svc_network_bond [-h|--help] -d <device> {-s -o <option> -v <value>} {-g [-o <option>]}
A sintaxe seria semelhante à do exemplo abaixo:
service@(none) spb:~> svc_network_bond -s -d bond23 -o xmit_hash_policy -v 2
Os valores aceitáveis para xmit_hash_policy are:
0 ou layer2 Configuração
padrão Esse parâmetro usa o XOR de endereços MAC de hardware para gerar o hash.
1 ou layer3+4 Usa informações de protocolo da camada superior (quando disponíveis) para gerar o hash.
Isso permite que o tráfego para um ponto de rede específico abranja vários escravos, embora uma única conexão não abranja vários escravos.
2 ou layer2+3 Usa uma combinação de informações de protocolo layer2 e layer3 para gerar o hash - O algoritmo Mode 2 ou Layer2+3 é compatível com 802.3ad.
Para o código OE do Unity 4.2.3.9670635 e anterior:
Entre em contato com o serviço de atendimento ao cliente Dell e mencione este número KBA.
Para código OE do Unity 5.3.x ou posterior
Fazer a alteração não exige o shell de serviço e nenhuma reinicialização é necessária.
Este é um exemplo de configuração do array Unity no xmit_hash_policy do laboratório.
Esse array do Unity é configurado com um tronco LACP conhecido como bond22.
SSH no array Unity usando a conta de serviço.
Primeiro, verifique qual é a configuração do 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 #
Em seguida, defina o xmit_hash_policy como 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 Exigem que o shell de serviço esteja ativado.
Exemplo 'netstat -i' output, que mostra os membros de um vínculo e pode ser usado para determinar se o tráfego está sendo hash.
Neste exemplo, 'bond20' (o vínculo LACP) é composto pelas interfaces 'eth20' e 'eth21'.
Observe a diferença na coluna TX-OK, que representa o tráfego de saída do 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
Exemplo de saída de "arp" no shell de serviço que mostra os endereços MAC (HWaddress) para cada endereço IP.
Eles devem ser diferentes para que o LACP balanceie com precisão o tráfego de carga em várias portas físicas.
Há várias interfaces que devem ser filtradas pela interface que você está usando.
Use
'ip addr' para encontrar o "Iface" que é atribuído ao endereço IP que você deseja investigar.
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