Распределение нагрузки: перенаправление на пул адресов

После того, как вы создали сервисы, которые будут доступны для всего мира, вероятно

один  из  возможных  сценариев,  то,  что  ваши  сервисы  будут  расти  и  станут  более сложными и ресурсоемкими, или просто привлекут больше трафика чем тогда, когда вы

чувствовали себя комфортно при обслуживании одного сервера. Есть несколько способов,

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

Для примера возьмем наш веб-сервер. Мы уже имеем макрос для публичного  IP адреса (webserver=”192.0.2.227”), который, в свою очередь связан с именем хоста, который ваши пользователи имеют  помеченным,  например  www.example.com. Когда  настанет  время распределять нагрузку, нужно  установить необходимое количество идентичных или по крайней мере эквивалентных, серверов, а затем немного изменить наш набор правил для введения перенаправления. Во-первых, определить содержит ли таблица  адресов для вашего веб сервера пул:

table <webpool> persist { 192.0.2.214, 192.0.2.215, 192.0.2.216, 192.0.2.217 }

Затем выполнить перенаправление:

match in on $ext_if protp tcp to $webserver port $webports \ rdr-to <webpool> round-robin

Не похожий на перенаправление в ранних примерах, таких как FTP прокси в главе 3, этот набор правил устанавливает всех членов талицы веб пула, как потенциальные цели для перенаправления для входящих соединений,  предназначенных для веб портов адресов веб   сервера.   Каждое   входящее    соединение   которое   подпадает   под   правило перенаправится на один из адресов в таблице, распределяя нагрузку между несколькими хостами.   Вы   можете   выбрать   на   последок   оригинальный   веб-сервер,   однажды переключившись перенаправление завершиться или будет захвачен в новый  пул веб- сервера.

В более ранних версиях PF чем OpenBSD 4.7 эквивалентное правило будет выглядеть:

rdr on $ext_if proto tcp to $webserver port $webports -> <webpool> round-robin

В  обоих  случаях,  round-robin  опция  значит,  что  PF  распределяет  нагрузку  между машинами в пуле циклично через таблицу перенаправления адресов последовательно. Когда это необходимо для доступа с каждого отдельного адреса всегда переходит на тот же хост в бэкэнде (например, если сервис зависит от клиент или сессий-специфических параметров,  то  будет   потеряно,  если  несколько  новых  соединений  произойдет  с различных  хостов  на  бэкэнде),  вы  может  добавить  опцию  «липкого»  адреса,  чтобы убедиться, что новые соединения с клиентом всегда перенаправляются на ту же машину по ту сторону перенаправления в качестве начального  соединения.  Недостатком этой опции то, что PF нужно обслуживать источник отслеживания данных для каждого клиента и по умолчанию значение для  максимального количества узлов установлено на 10000, которые могут быть  ограничивающим фатором. (смотрите главу 9 советы по настройке этого и подобных предельных значений)

Даже когда равномерное распределение нагрузки не является абсолютным требованием, выбрав перенаправление адресов в случайном порядке может быть целесообразным.

match in on $ext_if proto tcp to $webserver port $webports rdr-to <webpool> random

Замечание:

В версиях PF перед OpenBSD 4.7, опция случайного порядка не поддерживается для таблицы  перенаправления  или списка адресов.

Даже организация с большим пулом официальных, маршрутизируемых  адресов  решает ввести NAT между балансировкой нагрузки пулов сервера и  интернета в целом. Эта техника работает одинаково хорошо в различных  основанных на NAT   установках, но переход к NAT предлагает некоторые дополнительные возможности и вызовы.

Источник: Книга о PF, by Peter N.M. Hansteen, Перевод выполнил Михайлов Алексей aka iboxjo

Похожие посты:

Вы можете оставить комментарий, или ссылку на Ваш сайт.

Оставить комментарий