Что типичный метод должен масштабировать горизонтально подсистему балансировки нагрузки программного обеспечения?

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

Каково Ваше конкретное требование для него? Удобство выполнения материала, локального на веб-сервере, или там законные риски данных, идущих ясный по проводу? Можно ли соединиться с удаленным mysql клиентом (в этом случае, uou может попытаться использовать опцию SSL), или это связывается с localhost сервера или иначе non-routable интерфейс? Если уязвимые данные являются беспокойством, можно настроить простую страницу PHP-загрузки и использовать HTTPS для загрузок.

Без большего количества деталей, существует мало для создания случая в Вашу пользу.

22
задан 11 May 2011 в 17:30
6 ответов

Подсистемы балансировки нагрузки не могут легко масштабироваться другими подсистемами балансировки нагрузки, так как по сути будет единственная подсистема балансировки нагрузки на цепочке, где-нибудь поддерживающей соединения. Тем не менее стабилизаторы, такие как LVS или HAProxy имеют абсурдную способность в диапазоне Гбит/с. После того как Вы добираетесь вне возможностей единственной подсистемы балансировки нагрузки (программное обеспечение, аппаратные средства, безотносительно), затем необходимо будет переместиться в другие методы, такие как круговой DNS.

10
ответ дан 28 November 2019 в 20:22

Хорошо, уже существует принятый ответ, но существует что-то для добавления.. Наиболее распространенные 'классические' способы масштабировать уровень подсистемы балансировки нагрузки (без определенного порядка):

  • Циклический алгоритм DNS для разглашения нескольких IP-адресов для домена. Для каждого IP-адреса реализуйте высоконадежную пару сервера (2 сервера, сотрудничающие при хранении одного IP-адреса, работающего в любом случае.) Каждый IP соответствует одному кластеру подсистемы балансировки нагрузки, или устройства использования или серверы с программным обеспечением выравнивания нагрузки. Масштаб горизонтально путем добавления большего количества пар подсистемы балансировки нагрузки по мере необходимости.

  • Маршрутизация или брандмауэр настраивает для распределения нагрузки к нескольким подсистемам балансировки нагрузки. Имейте передний маршрутизатор, или передний брандмауэр распространил входящие соединения с несколькими IP-адресами (каждое представление одной пары подсистемы балансировки нагрузки) путем хеширования исходного IP-адреса, наличия нескольких маршрутов равной стоимости к подсистемам балансировки нагрузки, или подобный.

  • Слой подсистем балансировки нагрузки уровня IP перед слоем подсистем балансировки нагрузки уровня HTTP. Выравнивание нагрузки iPlayer может быть реализовано в ASICs / кремний и может быть злым быстро для некоторых вещей. Таким образом единственная пара подсистемы балансировки нагрузки IP может часто 'поддерживать на высоком уровне' с несколькими уровнями HTTP/HTTPS подсистемы балансировки нагрузки и обеспечивать мультигигабитные уровни производительности при сохранении архитектуры хорошей и простой.

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

Выбираете ли Вы форм-фактор устройства (F5, Cisco, A10), или универсальный сервер (программное обеспечение Windows / Linux +) имеет значение меньше. Основные соображения при масштабировании горизонтально слоя подсистемы балансировки нагрузки:

  • Состояния полный по сравнению с не сохраняющим состояние. Вам абсолютно нужны липкие сессии, или можно ли жить без? Не хранение состояния делает все более простым.
  • 'Аппаратные средства' (ASICs) по сравнению с 'программным обеспечением' (серверы общего назначения) для выравнивания нагрузки. У каждого есть его за и против, см. документацию обзора HAProxy, связанную выше.
  • L3/4 (IP / TCP/IP) выравнивание нагрузки по сравнению с L7 (HTTP) выравнивание нагрузки. Снова, за и против, документ HAProxy предоставляет хороший обзор.
  • Завершение SSL, где, на webnodes или на подсистеме балансировки нагрузки.

Обычно Вы не должны волноваться об этом, прежде чем Ваш веб-сайт станет очень большим - единственный современный сервер с fx nginx обработает десятки тысяч простых Запросов HTTP в секунду. Не делайте преждевременной оптимизации, не имейте дело с этим, прежде чем Вы будете иметь к.

19
ответ дан 28 November 2019 в 20:22

Лично я перехожу к более простым, менее настраиваемым аппаратным подсистемам балансировки нагрузки в той точке - вещи как ACE/ASAs Cisco, Литейный завод ServerIrons, возможно, даже Zeus ZXTMs (LB SW, это разработало fro очень большие нагрузки).

2
ответ дан 28 November 2019 в 20:22

Типичный подход должен был бы создать кластер, достаточно большой, чтобы обработать необходимую загрузку и использовать SLB, который может сделать детерминированное выравнивание нагрузки (для случая постоянных соединений).

Что-то как CARP использует хеш IP запроса для определения, какой веб-сервер бэкенда обработал бы запрос, это должно быть детерминировано, но не очень полезно, если существует брандмауэр или NAT перед подсистемой балансировки нагрузки.
Можно также найти что-то как IPVS полезным при работе Linux.

0
ответ дан 28 November 2019 в 20:22

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

То, что Вы делаете, на самом деле требует ответа, эта самая миллисекунда или клиент могут ожидать 15/20 секунды до следующего периода опроса?

1
ответ дан 28 November 2019 в 20:22

Ключ для масштабирования слоя выравнивания нагрузки HTTP должен добавить другой слой низшего уровня (IP или TCP) выравнивание нагрузки сначала. Этот слой может быть создан полностью с программным обеспечением с открытым исходным кодом, хотя Вы получите лучшие результаты, если у Вас будут современные маршрутизаторы.

Потоки (сеансы TCP) должны быть хешированы с помощью заголовков, таких как порты IP и TCP источника/места назначения, для решения, в какой frontend они переходят. Вам также нужен механизм, чтобы удостовериться, что, когда frontend умирает, он прекращает привыкать.

Существуют различные стратегии, я собираюсь обрисовать в общих чертах пару этого, я использовал в производстве на сайтах, служащих миллионам пользователей, таким образом, можно получить идею. Это было бы слишком длинно для объяснения всего в деталях, но я надеюсь, что этот ответ даст Вам достаточно информации/указателей для начала работы. Для реализации этих решений, Вы испытываете необходимость в ком-то, кто действительно хорошо осведомлен о сетях.

По общему признанию то, что я описываю здесь, намного более трудно реализовать, чем, что описано в других ответах, но это - действительно современное состояние, если у Вас есть высоко переданный веб-сайт с большими проблемами масштабируемости и требованиями доступности более чем 99,9%. Если у Вас уже есть вид сетевого инженера парня на борту, он стоит меньше, чтобы установить и работать (и в капитальных расходах и в opex), чем устройства подсистемы балансировки нагрузки, и он не может масштабироваться далее почти ни по какой дополнительной стоимости (по сравнению с покупкой нового, еще более дорогого устройства при перерастании текущей модели).

Первая стратегия: с брандмауэром

По-видимому, у Вас есть пара маршрутизаторов, на которых соединены Ваши восходящие каналы ISP. Ваш ISP предоставляет 2 ссылки (активный/пассивный, с помощью VRRP). На Ваших маршрутизаторах Вы также используете VRRP, и Вы направляете трафик, идущий в Вашу сеть общего пользования к брандмауэру. Брандмауэры (FW 1 и FW 2 ниже), также также активны/пассивны и отфильтрует трафик и отправит каждый поток на здоровый сервер фронтэнда (Ваши подсистемы балансировки нагрузки HTTP, FE 1 и FE 2 ниже).

      +--------------+       +--------------+
      | ISP router A |       | ISP router B |
      +--------------+       +--------------+
             |                      |
           ==#======================#==   (public network)
             |                      |
      +---------------+     +---------------+
      | Your router A |     | Your router B |
      +---------------+     +---------------+
             |                      |
           ==#=====#==========#=====#==   (RFC 1918 private network)
             |     |          |     |
       +------+ +------+  +------+ +------+
       | FW 1 | | FE 1 |  | FE 2 | | FW 2 |
       +------+ +------+  +------+ +------+

Цель состоит в том, чтобы иметь поток, похожи на это:

  1. ISP направляет трафик, идущий в Вашего дюйм/с к Вашему активному маршрутизатору.
  2. Ваши маршрутизаторы направляют трафик к VIP, который использует адрес RFC 1918. Этот VIP принадлежит активному брандмауэру, во многом как VRRP. Если Вы используете OpenBSD для своих потребностей брандмауэра, то можно использовать CARP, альтернативу без патентов VRRP/HSRP.
  3. Ваш брандмауэр применяет фильтр (например, "только позволяют 80/tcp и 443/tcp, идущий в этот конкретный IP-адрес").
  4. Ваш брандмауэр также действует как маршрутизатор и передает пакеты к здоровому frontend.
  5. Ваш frontend завершает соединение TCP.

Теперь волшебство происходит на шагах 4 и 5, поэтому давайте посмотрим более подробно, что они делают.

Ваш брандмауэр знает список frontends (FE 1 и FE 2), и это выберет одного из них на основе конкретного аспекта потока (например, путем хеширования исходного IP и порта среди других заголовков). Но это также должно удостовериться, что передает трафик к здоровому frontend, иначе Вы поместите трафик в черный список. При использовании OpenBSD, например, можно использовать relayd. Что relayd делает просто: это проверки состояния весь Ваш frontends (например, путем отправки им тестового Запроса HTTP), и каждый раз, когда frontend здоров, он добавляет его к таблице что использование брандмауэра для выбора следующего транзитного участка пакетов данного потока. Если frontend приводит проверки состояния к сбою, он удален из таблицы, и никакие пакеты больше не отправляются в него. При передаче пакета к frontend весь брандмауэр делает подкачивает целевой MAC-адрес пакета, чтобы быть тем из выбранных frontend.

На шаге 5 пакеты от пользователя получены Вашей подсистемой балансировки нагрузки (быть этим Лак, nginx, или безотносительно). На данном этапе пакет все еще предназначен к Вашему общедоступному IP-адресу, таким образом, необходимо исказить VIP на петлевом интерфейсе. Это называют DSR (Прямой Возврат Сервера), потому что Ваши frontends завершают соединение TCP, и брандмауэр, промежуточный только, видит симплексный трафик (только входящие пакеты). Ваш маршрутизатор направит исходящие пакеты непосредственно назад к маршрутизаторам ISP. Это особенно хорошо для Трафика HTTP, потому что запросы имеют тенденцию быть меньшими, чем ответы, иногда значительно так. Только быть ясным: это не OpenBSD определенная вещь и широко используется в высоко переданных веб-сайтах.

Глюки:

  • Конечные пользователи непосредственно соединятся с Вашими серверами фронтэнда, потому что Вы используете DSR. Возможно, уже имело место, но если бы это не было, то необходимо удостовериться, что они соответственно защищаются.
  • Если Вы используете OpenBSD, остерегаетесь этого, ядро является единственным, распараллелил так производительность единственного ядра процессора, ограничит пропускную способность брандмауэра. Это могла бы быть проблема в зависимости от Вашего типа NIC и скорости передачи пакетов, которую Вы видите. Существуют способы решить эту проблему (больше на этом ниже).

Вторая стратегия: без брандмауэра

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

Вам будут нужны маршрутизаторы, которые поддерживают L3/L4 ACLs на порт, BGP и ECMP и Основанную на политике маршрутизацию (PBR). Только высокопроизводительные маршрутизаторы поддерживают эти функции, и у них часто есть дополнительные лицензионные сборы для использования BGP. Это обычно еще более дешево, чем аппаратные подсистемы балансировки нагрузки и также намного легче масштабироваться. Хорошая вещь об этих высокопроизводительных маршрутизаторах состоит в том, что они имеют тенденцию быть частотой строчной развертки (например, они могут всегда истратить ссылку, даже на 10GbE интерфейсы, потому что все решения они делают, сделаны в аппаратных средствах ASICs).

На портах, на которых у Вас есть свои восходящие каналы ISP, примените ACL, который раньше был на брандмауэре (например, "только позволяют 80/tcp и 443/tcp, идущий в этот конкретный IP-адрес"). Затем имейте каждый из своих frontends, поддерживают сеанс BGP с Вашим маршрутизатором. Можно использовать превосходный OpenBGPD (если frontends находятся на OpenBSD), или Quagga. Ваш маршрутизатор будет ECMP трафик к frontends, которые здоровы (потому что они поддерживают свои сеансы BGP). Маршрутизатор также направит трафик, соответственно использующий PBR.

Улучшения

  • С решением для пары брандмауэра хорошо, если можно синхронизировать состояния TCP через брандмауэры, так, чтобы, когда один брандмауэр перестал работать, все заменило гладко к другому. Можно достигнуть этого с pfsync.
    • Примите во внимание это pfsync будет обычно дважды скорость передачи пакетов на своих брандмауэрах.
    • HTTP является протоколом без сохранения информации о состоянии, таким образом, это не конец света при сбросе всех соединений во время обработки отказа брандмауэра, потому что Вы не используете pfsync.
  • При перерастании единственного брандмауэра можно использовать ECMP на маршрутизаторе для маршрутизации трафика больше чем к одной паре брандмауэра.
  • При использовании больше чем одной пары брандмауэра Вы могли бы также сделать их всех активными/активными. Можно достигнуть, это при наличии брандмауэров поддерживает сеанс BGP с маршрутизаторами, во многом как frontends должен поддержать один в 2-м дизайне без брандмауэров.

Образец relayd конфигурация

См. также ПРАКТИЧЕСКОЕ РУКОВОДСТВО в https://calomel.org/relayd.html

vip="1.2.3.4"  # Your public IP address
               # (you can have more than one, but don't need to)
fe1="10.1.2.101"
fe2="10.1.2.102"
fe3="10.1.2.103"
fe4="10.1.2.104"  # You can have any number of frontends.
int_if="em0"
table <fe> { $fe1 retry 2, $fe2 retry 2, $fe3 retry 2, $fe4 retry 2 }
table <fallback> { 127.0.0.1 }

redirect webtraffic {
        listen on $vip port 80
        session timeout 60
        route to <fe> check http "/healthcheck.html" digest "(the sha1sum of healthcheck.html)" interface $int_if
}
9
ответ дан 28 November 2019 в 20:22

Теги

Похожие вопросы