Почему два сервера соединяют один и тот же сетевой адаптер, когда я использую соединение в Linux с mode=6?
Я создаю связующий интерфейс с 3 сетевыми картами в CentOS6.3. Я использую mode=6, который не нуждается в аппаратной поддержке коммутатора.
Вот файл склеивания:
[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
Я использую три сервера Windows для подключения IP-адреса. Теоретически, каждый сервер получит свой MAC-адрес. Например, Сервер 1 подключится к eth1, а Сервер 2 подключится к eth2, а Сервер 3 подключится к eth3. Тогда нагрузка будет сбалансирована.
Однако Сервер 1 подключается к eth2, а Сервер 2 подключается к eth3, но Сервер 3 снова подключается к eth2. eth1 никогда не используется. Я пытался много раз, но не получилось. Наконец, я вручную связываю IP-адрес и MAC-адрес, чтобы решить эту проблему.
Почему это происходит? Есть ли способ заставить каждый сетевой адаптер использоваться? Здесь подключено только три сервера, поэтому теоретически каждый сервер должен подключаться к отдельной сетевой карте.
Большое спасибо!
1 ответ
Вы сделали предположение:
каждый сервер получит свой MAC-адрес. Например, Сервер 1 подключится к eth1, а Сервер 2 подключится к eth2, а Сервер 3 подключится к eth3.
Однако это не правильно. Согласно документации по ядру Linux:
разные коллеги используют разные аппаратные адреса
Но не каждый узел будет использовать разные аппаратные адреса.
Алгоритм балансировки нагрузки основан на хеш-таблице, вам нужно использовать более трех хостов в одном широковещательном домене для достижения равной балансировки нагрузки для всех ведомых устройств.
Если бы у вас было большое количество хостов, связывающихся с вашей связью, скажем, десятки или сотни хостов в одном широковещательном домене, то число хостов было бы достаточно одинаковым для всех подчиненных подчиненных.
Для такого рода балансировки нагрузки вы можете использовать режим 2 или 4 с xmit_hash_policy
установлен в layer2+3
или же layer3+4
однако, это только выполнит балансировку нагрузки передачи, это будет зависеть от коммутатора, чтобы обеспечить аналогичную балансировку входящей нагрузки.
(Заметка: layer3+4
несовместим с режимом 4, ваш коммутатор может жаловаться или не жаловаться, если он настроен таким образом, попробуйте и посмотрите)
Действительно, если вы хотите, чтобы ваши три системы Windows взаимодействовали с вашей системой Linux через разные интерфейсы, то единственный надежный способ сделать это на 100% - это разделить интерфейсы на уровне 2 - каждая из ваших eth1/eth2/eth3 по-разному VLAN с разными IP-адресами, и каждая система Windows знает систему Linux по этому IP-адресу.