Чи можна використовувати кілька балансирів навантаження для перенаправлення трафіку на мої сервери додатків?


9

Я новачок завантажую балансування, і мені цікаво, чи можна використовувати кілька балансирів навантаження для перенаправлення трафіку на мої сервери додатків. Я не дуже розумію, як це можна зробити. Чи не повинно доменне ім’я відповідати одному до одного з IP-адресою певного сервера (у цьому випадку IP одного балансира завантаження)? Якщо кожен сервер балансування навантаження має різну IP-адресу, то як запит можуть бути отримані обома балансирами навантаження (або 10 балансирами навантаження, або 50, або 100)?


Спасибі за вашу відповідь. Отже, якщо я хочу використовувати декілька балансирів навантаження для обробки трафіку, мені потрібно встановити лише різний CNAME для кожного з них? Зокрема, якщо мені потрібні 10 балансирів навантаження для обробки трафіку на мій сайт, це єдиний спосіб зробити це?
користувач3790827

1
Я рекомендую залишити питання відкритими принаймні на добу, перш ніж їх закрити. Навіть це, як правило, поспішно. Тільки тому, що ви отримали відповідь, не означає, що це обов'язково єдиний (або найкращий) варіант, і те, що позначення відповіді на запитання та відповіді зазвичай означає, що він отримує менше уваги.
Андрій Б

1
@Anatoly Я ще не прийняв рішення. Я переглянув рішення, представлені тут, а також поговорив з деякими моїми друзями, які рекомендували мені інші рішення. Я думаю, що для мого випадку найкращим рішенням до цих пір було б використовувати VPS-сервери від дешевих постачальників, таких як DO або Vultr, які не пропонують Virtual IP, та використовувати метод, який використовує Algolia при збалансуванні завантаження клієнта. Мені потрібна HA та масштабованість лише для API, тому не було б такої великої справи, якщо я створю різні субдомени для кожного балансира навантаження. Ці кінцеві користувачі віджета ніколи їх не помітять.
користувач3790827

@ user3790827 звучить як план. Незважаючи на тип вимог, що мають HA та Failover, навколо них занадто багато моделей, всі стикаються з однією і тією ж проблемою, але ніхто не має SLA 99.9 (8 годин простою на рік) або вище. Рішення HA, як правило, дорогі і діловий компроміс між наявністю та витратами. Зазвичай клієнти приймають 99,9 і знають про можливі простої або заплановані часові рамки, навіть 100% тривалість роботи не гарантує нульових помилок з розвитком / розгортанням / безпекою або людськими помилками.
Анатолій

Я перевірив, що Google Chrome змушує відключити DNS-запит і запит у випадку 3-секундного тайм-ауту. Не впевнений, що поведінка інших браузерів.
Анатолій

Відповіді:


12

Використання DNS з круглим роботом не дуже підходить для високої доступності - якщо один сервер перейде в офлайн, клієнти все одно намагатимуться підключитися до нього і чекати очікування часу.

Є й інші способи досягти цього.
1) Активні / пасивні балансири навантаження
В основному один балансир навантаження обробляє весь трафік за одну IP-адресу.
Якщо цей балансир опуститься, пасивний вузол заскакує і переймає IP.
Майте на увазі, що балансири навантажень в значній мірі лише перенаправляють трафік, тому для невеликих та середніх сайтів це може бути добре.

2) Активні / активні балансири навантажень
Один і той же IP-трафік налаштований на обох (або багатьох інших) балансирах навантаження.
Вхідний трафік надсилається всім балансирам навантажень, але алгоритм вибирає, який балансир повинен відповідати, а всі інші відкидають цей трафік.
Простий спосіб подумати про це, у вас є два балансири навантаження:
Коли запитуючий IP закінчується парним числом, тоді завантажує балансир відповіді, інакше завантажує балансир B.

Звичайно, ваша інфраструктура повинна підтримувати це, і є надмірні витрати через надходження трафіку, але його відкидають.
Більше інформації, наприклад тут: http://community.brocade.com/t5/SteelApp-Docs/Feature-Brief-Deep-dive-on-Multi-Hosted-IP-addresses-in-Stingray/ta-p/73867


Коли ви говорите "звичайно, ваша інфраструктура повинна це підтримувати", ви маєте на увазі, що мені потрібна додаткова машина або VM, яка надсилатиме запити до балансирів навантаження?
користувач3790827

2
@ user3790827 Інфраструктура в цьому контексті - це мережеве обладнання, а не сервери. '
Дженні Д

1
Я планую використовувати хмарного постачальника, тому я не маю прямого контролю над фізичною інфраструктурою. Про що я повинен запитати свого постачальника послуг vps?
користувач3790827

1
Існують лише абстрактні рекомендації, оскільки це залежить від тонни деталей. Ми навіть не знаємо, чи є сенс мати тут розміщений IP з кількома розмірами - можливо, його трафік становить лише кілька сотень Мбіт / с. Якщо вам це потрібно, я б оцінив належне програмне забезпечення, перевірив би вимоги та з'ясував, який постачальник його підтримує. Чи працюватиме DNS RR? Звичайно. Я б ним користувався? Залежить від того, до якої доступності прагне власник бізнесу, над яким я працюю!
факер

@faker Вибачте, я думаю, що я винен, тому що я не дав достатньо деталей. Я хочу створити сценарій javascript, який буде вставлено на веб-сайти інших людей і буде збирати дані про трафік (думаю, Google Analytics), також він отримає доступ до сервера для відображення статистики для кожної завантаженої сторінки. В основному буде файл javascript, який буде завантажений для кожного веб-сайту, на якому він використовується.
користувач3790827

6

Висока доступність з балансирами завантаження зазвичай реалізується за допомогою протоколу віртуальної ip адреси (VIP), який дозволяє декільком хостам (тобто балансирам навантажень) відповідати на одну загальну ip адресу одним із декількох можливих способів (варіації активних / пасивних, активних / активних) .

Існує велика кількість цих протоколів, які я бачив більшість із звичайними балансирами навантаження - це VRRP та NLB (а також безліч непрозорих протоколів чорного кольору в пристроях). Окрім розширення маршрутизаторів та брандмауерів, можна також зустріти, наприклад, CARP , HRSP , GLSP .

Ця стратегія має низку переваг у порівнянні з навантаженням DNS, що є більш простою стратегією (і про яку ми вирішуємо в іншій відповіді).

Балансування навантаження DNS обтяжується, наприклад:

  • повільний оборот механізмів кешування dns
  • алгоритми з обмеженим балансуванням навантаження (як правило, просто круговий)
  • аутсорсинг рішення щодо балансування навантаження клієнту (через кешування запису dns)
  • Повільне зливання службових черг, коли сервер (тобто балансир навантаження) виводиться з обертання (на основі запису TTL, записаного в dns, як обробляють провайдери та клієнти )
  • Повільне відмовлення від несправності навантажувача

Використання віртуального протоколу ip для HA, наприклад, може мати вибір:

  • Вибір алгоритму балансування навантаження серед балансирів навантаження
  • Рішення щодо балансування навантаження на сервер (захоплюючі, наприклад, заходи, засновані на охороні здоров'я та маршрутизація)
  • Швидше злив службових черг, коли балансир навантаження виймається з обертання.
  • Моментальна відмова при несправності балансира навантаження

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


1
Я також додам, що деякі балансири навантажень підтримують встановлення BGP-сесій з розташованими поблизу маршрутизаторами, що дозволяє налаштувати рішення Anycast . Якщо балансир навантаження знизиться або іншим чином припинить рекламу для VIP (невдала перевірка здоров’я), виграє наступний найкращий кандидат з маршрутизації. Останнє речення в цій відповіді є обов'язковим: вам дійсно потрібно поговорити з адміністраторами мережі вашої компанії.
Андрій Б

Ось приємний опис того, що ви описуєте в першому абзаці cisco.com/c/en/us/support/docs/application-networking-services/…
Мартін Подвал

2

Вимоги: мати практичне рішення, яке працює для хмари або будь-якого типу оточення, де немає доступу до апаратних балансирів завантаження, протоколів BGP та всього іншого.

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

Давайте знайдемо додаток з подібним характером навантаження, наприклад, магазин журналів і додаток пошуку. Я знайшов одного .

Що вони хочуть:

  1. Збалансуйте навантаження в колекторах
  2. Запропонуйте відмовостійкість, дозволяючи нам продовжувати приймати дані, якщо хтось із колекторів помирає або виникає проблема
  3. Масштабуйте горизонтально зі збільшенням обсягів нашого журналу

Що вони спробували та дізналися про ELB:

  1. Не працює, як очікувалося
  2. Проблеми із затримкою через збільшення навантаження
  3. Недостатньо спостереження
  4. Занадто багато обмежень (кількість відкритих портів та протоколів)

Чому вони вибрали маршрут Route53:

  1. "Круглий робін є досить базовим балансуванням навантаження, але він добре працює для нас з точки зору ефективності"
  2. "Ми використовуємо переваги перевірок здоров'я на маршруті 53".
  3. "Якщо з колектором виникла проблема, маршрут 53 автоматично виводить її з сервісу; наші клієнти не побачать жодного впливу".
  4. Не потрібно попереднього розминки на маршруті 53

Маршрут 53 виявився найкращим способом для Loggly скористатися нашими високоефективними колекціонерами, враховуючи величезний обсяг журналів, непередбачувані зміни та постійний ріст нашого бізнесу. Він узгоджується з основними цілями колекторів: збирати дані зі швидкістю мережевої лінії з нульовими втратами, і це дозволяє нам скористатися еластичністю всіх служб AWS, які ми використовуємо в Loggly.

Цей конкретний приклад показує, що в деяких сценаріях (збирач журналів, сервіс рекламних оголошень або подібний) балансир навантаження є зайвим, і "рішення здоров'я DNS для перевірки здоров'я круглої лінії" робить свою роботу дуже добре.


Давайте подивимося, що AWS кажуть про перехід на DNS:

За допомогою DNS Failover Route 53 може виявити відключення вашого веб-сайту та перенаправити кінцевих користувачів на чергування або резервне копіювання вказаних вами місць. Маршрут 53 DNS Failover покладається на перевірки здоров’я - регулярно надсилаючи Інтернет-запити до ваших додатків кінцевими точками з різних місць по всьому світу, щоб визначити, чи є кожна кінцева точка вашої програми вгору чи вниз.

Ця техніка також робить ELB (не потрібен, лише на замітку) більш надійним, знову ж таки, він заснований на RR + Health Check:

Маршрут 53 DNS Failover обробляє всі ці сценарії відмов шляхом інтеграції з ELB за кадром. Після ввімкнення Маршрут 53 автоматично налаштовує та керує перевірками стану здоров'я для окремих вузлів ELB.


Давайте тепер подивимося, як це працює за сценою. Очевидне питання - як поводитися з кешуванням DNS:

Однак кешування DNS все ще може бути проблемою тут (див. Наш попередній пост, де висвітлюється проблема "довгого хвоста"), якщо TTL не дотримується всіма шарами між вашим клієнтом та маршрутом 53. Потім ви можете застосувати техніку "перебір кешу": відправити запит на унікальний домен

("http://<unique-id>.<your-domain>") 

і визначити ресурс підстановки

Record "*.<your-domain>" to match it.

Algolia представила "стратегію повторного використання клієнта", яка працює досить добре, якщо ваш клієнт (JS у вашому випадку) може впоратися з цим:

Ми закінчили реалізацію основної стратегії спроб у наших клієнтах API. Кожен клієнт API був розроблений для доступу до трьох різних машин. Три різні записи DNS представляли кожного користувача: USERIDID-1.algolia.io, USERID-2.algolia.io таUSERID-3.algolia.io. Наша перша реалізація полягала у тому, щоб випадковим чином вибрати один із записів, а потім повторити спробу з іншим у разі відмови.


1
Я думаю, що підхід Algolia є найкращим для мого бюджету та випадків використання. Зазвичай я б заперечував із використанням різних піддоменів для кожного балансира навантаження, але оскільки лише віджет JS використовує їх, кінцевий користувач ніколи не помітить різниці.
користувач3790827

1
Хтось також запропонував використовувати DNS cloudflare.com/features-optimizer для DNS Cloudflare для перенаправлення трафіку в режим очікування балансира навантаження, як тільки виникає збій із використовуваним балансиром навантаження. cloudflare.com/dns
користувач3790827
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.