LINUX.ORG.RU
ФорумAdmin

iptables load balancing


1

0

Коллеги,

помогите, пожалуйста, советом по настройке iptables.
Хочу организовать round robin входящих запросов на заданный порт между фиксированным количеством узлов.

По всем описаниям, как мне кажется, для этой задачи подходит цель random (с указанием равных долей для каждого узла).
Для четырех узлов, на головной машине создаю следующие правила:

[root@host Networking]# iptables -A PREROUTING -t nat -p tcp --dport 50180 -j DNAT --to-destination 192.168.10.5:50180 -m statistic --mode random --probability 0.25
[root@host Networking]# iptables -A PREROUTING -t nat -p tcp --dport 50180 -j DNAT --to-destination 192.168.10.6:50180 -m statistic --mode random --probability 0.25
[root@host Networking]# iptables -A PREROUTING -t nat -p tcp --dport 50180 -j DNAT --to-destination 192.168.10.8:50180 -m statistic --mode random --probability 0.25
[root@host Networking]# iptables -A PREROUTING -t nat -p tcp --dport 50180 -j DNAT --to-destination 192.168.10.9:50180

Вроде бы должно получаться (почти) равномерное распределение. Однако эксперименты показывают, что больше других получает последний узел (10.9), а меньше всех предпоследний (10.8). В принципе мне понятно почему это происходит. Но как можно исправить эту ситуацию? Насколько я понимаю в любом случае предпоследний в этом списке узел будет получать меньше других.

Пробывал реализовывать аналогичный сценарий через цель nth:
Для первых трех:
--every 3 --packet 0
--every 3 --packet 1
--every 3 --packet 2

Но распределение все равно далеко от равномерного :(
Что я делаю неправильно?

[root@host Networking]# uname -a
Linux SMP Wed May 16 14:36:30 MSD 2007 x86_64 x86_64 x86_64 GNU/Linux

[root@host Networking]# iptables --version
iptables v1.3.7

Немного статистики по random-правилам.
2 прогона по 2400 запроса в каждом:
Узел Количество ответов
10.5: 574 595
10.6: 472 448
10.8: 300 345
10.9: 1054 1012


Если я понял правильно, то --probability 0.25 это вероятность?
Тогда конечно здесь ошибка, тк вероятность попадания пакета
только в 1-ю точку будет
0.25

во вторую точку будет уже
0.25*(1-0.25) = 0.1875

а в третью
0.25*(1-0.25 -0.1875)) = 0.140625

соответственно все остальное попадет в четвертую точку

1 - 0.25 - 0.185 - 0.140625 = 0,424375

примерно такое распределение ты и наблюдаешь.
___

Что делать надо догадался?

nicebytes
()
Ответ на: комментарий от saper

Спасибо, это помогло.
Странно, что во многочисленных статьях на эту тему этот момент совершенно не учитывается. Как здесь, например:
http://linuxgazette.net/108/odonovan.html
Такое ощущение, что автор даже не удосужился проверить то, о чем написал

versus
() автор топика
Ответ на: комментарий от versus

Есть хорошая традиция - в открытых публикациях
делать специально одну - две ошибки.

Чтоб бездумно не копировали.

nicebytes
()
Ответ на: комментарий от spirit

> А еще ошибки надо делать в man-ах и коде, чтоб бездумно не компилили, не запускали.

В коде эксплоитов ошибки вполне уместны для защиты от script kiddies ;-) А вот в текстах - нет.

saper ★★★★★
()
Ответ на: комментарий от saper

Я про научные публикации, в мануалах это конечно
несмешно получается. У людей голова потом болит :)

nicebytes
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.