В своей лабораторной среде я провожу стресс-тестирование приложения, работающего на трех серверах Centos 5.4. Вся работа приложения заключается в получении данных из сети и создании двух копий на любых других двух серверах. При запуске приложение привяжет один IP-адрес, сохраненный в файле конфигурации. Чтобы найти узкое место в производительности, я увеличиваю количество сетевых карт с одного до трех и назначаю отдельный IP-адрес для каждой сетевой карты на каждом сервере.
Теперь у меня есть три сервера с тремя сетевыми адаптерами, и я могу запускать 3 экземпляра приложения на каждом сервере. Один экземпляр связывает один IP-адрес. Все девять IP-адресов находятся в одном списке подсети ниже.
При запуске инструментов стресс-тестирования я обнаружил, что трафик сбалансирован во входящем направлении для трех сетевых адаптеров, но не в исходящем направлении. 90% трафика отправляется через eth0.
Я перечисляю статистику сетевого адаптера командой "sar -n DEV 10", как показано ниже.
11:25:39 AM IFACE rxpck/s txpck/s rxkB/s txkB/s 11:25:49 AM lo 669.90 669.90 4727.13 4727.13 11:25:49 AM eth0 12290.80 23736.20 9183.59 18736.31 11:25:49 AM eth1 6056.10 0.00 8522.95 0.00 11:25:49 AM eth2 6048.10 0.00 8514.29 0.00 11:25:49 AM eth3 0.00 0.00 0.00 0.00 11:25:49 AM sit0 0.00 0.00 0.00 0.00 11:25:49 AM IFACE rxpck/s txpck/s rxkB/s txkB/s 11:25:59 AM lo 1106.80 1106.80 8044.32 8044.32 11:25:59 AM eth0 22891.80 41899.20 16967.78 32745.58 11:25:59 AM eth1 10641.70 0.00 15173.43 0.00 11:25:59 AM eth2 10982.20 0.00 15663.58 0.00 11:25:59 AM eth3 0.00 0.00 0.00 0.00
Обычно для этого используются два метода. Первый - это склеивание:
http://www.linuxfoundation.org/collaborate/workgroups/networking/bonding
Вы можете настроить это так, чтобы три интерфейса отображались как один и исходящий трафик с циклическим перебором между всеми тремя интерфейсами. Это дает дополнительное преимущество, обеспечивая некоторую избыточность, если один из интерфейсов также выходит из строя.
Другой метод - выяснить, для какой службы вы передаете весь этот трафик, и использовать DNAT в iptables для циклических запросов к этой службе между несколькими IP-адресами / интерфейсами и направлять их таким образом, чтобы каждый из них использовал уникальный интерфейс.