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

Внутренняя балансировка нагрузки IPTables

Я пытаюсь настроить балансировку нагрузки в той же локальной сети с помощью IPTables (если возможно). Моя идея состоит в том, чтобы эмулировать наш основной балансировщик нагрузки, но в виртуальной среде все серверы, кстати, являются виртуальными машинами.

Существует сервер шлюза, который перенаправляет трафик на виртуальные серверы и реальный мир и от них, и я хочу использовать этот шлюз для балансировки некоторого трафика в этой виртуальной локальной сети.

Моя установка:

На ServerB есть 2 экземпляра службы, прослушивающие порты 60003 и 60004.

Моя цель - иметь возможность открыть соединение от ServerA к GatewayServer: 60002 и выполнить балансировку с ServerB на портах 60003 и 60004 в режиме Round Robin.

Мне удалось открыть соединения с ServerB с ServerA через сервер GateWay, но соединение всегда достигает ServerB через порт 60003, а не через порт 60004.

У меня шлюз настроен следующим образом:

-A POSTROUTING -i eth2 -s 10.x.y.0/24 -p tcp --dport 60002 -j DNAT --to-destination 10.x.y.18-10.x.y.18:60003-60004

-A POSTROUTING -o eth2 -j MASQUERADE

Обнюхивая сервер ServerB, я вижу, что пакеты поступают от GatewayServer, но всегда обращаются к порту 60003, как указывалось ранее.

Любая идея?

Вам нужно будет проверить версию ядра, которое вы используете, поскольку в ядрах более поздних, чем 2.6.11-rc1, были удалены функции, которые вы хотите использовать. Чтобы узнать версию ядра, используйте uname, например.

uname -r 
2.6.32-71.el6.x86_64

На странице руководства iptables

В ядрах до 2.6.10 вы можете добавить несколько опций --to-destination. Для этих ядер, если вы укажете более одного адреса назначения, либо через диапазон адресов, либо через несколько опций --to-destination, между этими адресами будет выполняться простая циклическая (один за другим в цикле) балансировка нагрузки. Более поздние ядра (> = 2.6.11-rc1) больше не имеют возможности NAT для нескольких диапазонов.