¿Por qué dos servidores conectan la misma NIC cuando uso la vinculación en Linux con mode = 6?

0

Creo una interfaz de enlace con 3 NIC en CentOS6.3. Uso mode = 6, que no necesita el soporte de hardware del conmutador.

Aquí está el archivo de unión:

[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

Uso tres servidores de Windows para conectar la IP de enlace. En teoría, cada servidor obtendrá una dirección MAC diferente. Por ejemplo, el servidor 1 se conectará a eth1, y el servidor 2 se conectará a eth2, y el servidor 3 se conectará a eth3. Entonces la carga será equilibrada.

Sin embargo, el servidor 1 se conecta a eth2, y el servidor 2 se conecta a eth3, pero el servidor 3 se conecta a eth2 nuevamente. eth1 nunca se usa. Lo he intentado muchas veces pero he fallado. Finalmente, enlaza manualmente la dirección IP y la dirección MAC para resolver este problema.

¿Por qué pasó esto? ¿Hay alguna manera de hacer que cada NIC se use? Solo hay tres servidores conectados, por lo que, en teoría, cada servidor debe conectarse a una NIC diferente.

¡Muchas gracias!

flypen
fuente

Respuestas:

1

Usted ha hecho la suposición:

Cada servidor obtendrá una dirección MAC diferente. Por ejemplo, el servidor 1 se conectará a eth1, y el servidor 2 se conectará a eth2, y el servidor 3 se conectará a eth3.

Sin embargo eso no es correcto. Según la documentación de enlace del kernel de Linux :

diferentes pares utilizan diferentes direcciones de hardware

Pero no cada mirar será Utilice una dirección de hardware diferente.

El algoritmo de equilibrio de carga se basa en una tabla hash, necesita usar más de tres hosts en el mismo dominio de difusión para lograr un equilibrio de carga igual en todos los esclavos.

Si tuviera un gran número de hosts que se comunican con su enlace, digamos decenas o cientos de hosts en el mismo dominio de transmisión, entonces el número de hosts sería bastante igual en todos los esclavos de enlace.

Para el tipo de equilibrio de carga que está buscando, podría ser mejor usar el Modo 2 o el Modo 4 con xmit_hash_policy ajustado a layer2+3 o layer3+4Sin embargo, eso solo hará la transmisión de balanceo de carga, sería responsabilidad del switch proporcionar un balanceo de carga entrante similar.

(Nota: layer3+4 no es compatible con el Modo 4, su conmutador puede o no puede quejarse si está configurado de esa manera, pruébelo y vea)

Realmente, si desea que sus tres sistemas Windows se comuniquen con su sistema Linux a través de diferentes interfaces, entonces la única forma 100% confiable de hacerlo es separar las interfaces en la Capa 2: haga que cada uno de sus eth1 / eth2 / eth3 sea diferente VLAN con una IP diferente, y los sistemas Windows conocen el sistema Linux por esa IP diferente.

suprjami
fuente