Por que dois servidores conectam o mesmo NIC quando uso a ligação no Linux com o modo = 6?

0

Eu criei uma interface de ligação com 3 NICs no CentOS6.3. Eu uso o modo = 6, que não precisa do suporte de hardware do switch.

Aqui está o arquivo de ligação:

[root@~]cat /proc/net/bonding/bond0 
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)

Bonding Mode: adaptive load balancing
Primary Slave: None
Currently Active Slave: eth3
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: eth1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 1
Permanent HW addr: 00:e0:66:d3:70:b1
Slave queue ID: 0

Slave Interface: eth2
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 1
Permanent HW addr: 00:e0:66:d3:70:b2
Slave queue ID: 0

Slave Interface: eth3
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 1
Permanent HW addr: 00:e0:66:d3:70:b3
Slave queue ID: 0

Eu uso três servidores Windows para conectar o IP de ligação. Em teoria, cada servidor terá um endereço MAC diferente. Por exemplo, o Servidor 1 se conectará à eth1 e o Servidor 2 se conectará à eth2 e o Servidor 3 se conectará à eth3. Então a carga será balanceada.

No entanto, o Servidor 1 se conecta à eth2 e o Servidor 2 se conecta à eth3, mas o Servidor 3 se conecta à eth2 novamente. eth1 nunca é usado. Eu tentei muitas vezes mas falhei. Por fim, vinculo manualmente o endereço IP e o endereço MAC para resolver esse problema.

Por que isso acontece? Existe uma maneira de fazer com que todas as NICs sejam usadas? Existem apenas três servidores conectados, então, em teoria, cada servidor deve se conectar a uma NIC diferente.

Muito obrigado!

    
por flypen 27.09.2014 / 03:57

1 resposta

1

Você assumiu:

each server will get a different MAC address. For example, Server 1 will connect to eth1, and Server 2 will connect to eth2, and Server 3 will connect to eth3.

No entanto, isso não está correto. Conforme a documentação de ligação do kernel do Linux :

different peers use different hardware addresses

Mas não todos os pares irão usar um endereço de hardware diferente.

O algoritmo de balanceamento de carga é baseado em uma tabela de hash, você precisa usar mais de três hosts no mesmo domínio de broadcast para obter balanceamento de carga igual em todos os escravos.

Se você tivesse um grande número de hosts se comunicando com seu vínculo, digamos, dezenas ou centenas de hosts no mesmo domínio de broadcast, então o número de hosts seria bastante igual em todos os escravos de ligação.

Para o tipo de balanceamento de carga que você procura, talvez seja melhor usar o Modo 2 ou o Modo 4 com xmit_hash_policy definido como layer2+3 ou layer3+4 , mas isso só fará o balanceamento de carga de transmissão. até o comutador para fornecer um equilíbrio de carga de entrada semelhante.

(Nota: layer3+4 não é compatível com o Modo 4, o seu switch pode ou não reclamar se estiver configurado dessa forma, tente e veja)

Realmente, se você quiser que seus três sistemas Windows se comuniquem com seu sistema Linux em diferentes interfaces, então a única maneira 100% confiável de fazer isso é separar as interfaces na Camada 2 - tenha cada uma de suas eth1 / eth2 / eth3 em uma VLAN diferente com um IP diferente, e os sistemas Windows conhecem o sistema Linux por esse IP diferente.

    
por 23.11.2014 / 00:01