Розподіл навантаження: перенаправлення на пул адрес

Після того, як ви створили сервіси, які будуть доступні для всього світу, ймовірно

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

почували себе комфортно при обслуговуванні одного сервера Є кілька способів,

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

Для прикладу візьмемо наш веб-сервер Ми вже маємо макрос для публічного IP адреси (webserver = 19202227), який, у свою чергу повязаний з імям хоста, який ваші користувачі мають поміченим, наприклад wwwexamplecom Коли настане час розподіляти навантаження, потрібно встановити необхідну кількість ідентичних або принаймні еквівалентних, серверів, а потім трохи змінити наш набір правил для введення перенаправлення По-перше, визначити чи містить таблиця адрес для вашого веб сервера пул:

table &ltwebpool&gt persist { 19202214, 19202215, 19202216, 19202217 }

Потім виконати перенаправлення:

match in on $ext_if protp tcp to $webserver port $webports \ rdr-to &ltwebpool&gt round-robin

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

У більш ранніх версіях PF ніж OpenBSD 47 еквівалентне правило виглядатиме:

rdr on $ext_if proto tcp to $webserver port $webports -&gt &ltwebpool&gt round-robin

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

Навіть коли рівномірний розподіл навантаження не є абсолютною вимогою, вибравши перенаправлення адрес у випадковому порядку може бути доцільним

match in on $ext_if proto tcp to $webserver port $webports rdr-to &ltwebpool&gt random

Зауваження:

У версіях PF перед OpenBSD 47, опція випадкового порядку не підтримується для таблиці перенаправлення або списку адрес

Навіть організація з великим пулом офіційних, маршрутизованих адрес вирішує ввести NAT між балансуванням навантаження пулів сервера та інтернету в цілому Ця техніка працює однаково добре в різних заснованих на NAT установках, але перехід до NAT пропонує деякі додаткові можливості і виклики

Джерело: Книга про PF, by Peter NM Hansteen, Переклад виконав Михайлов Олексій aka iboxjo

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*