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