Назад | Перейти на главную страницу

Балансировка нагрузки в исходящем направлении на сервере Centos с несколькими сетевыми адаптерами

В своей лабораторной среде я провожу стресс-тестирование приложения, работающего на трех серверах 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-адресами / интерфейсами и направлять их таким образом, чтобы каждый из них использовал уникальный интерфейс.