С помощью существующего протокола единого входа OpenID Connect 4 страница
Параметр reuseport дает NGINX указание создать индивидуальный
сокет прослушивания для каждого рабочего процесса. Это позволяет ядру распределять входящие соединения между рабочими процессами для обработки нескольких пакетов, которые отправляются между кли-
26 v Глава 2. Высокопроизводительная балансировка нагрузки
ентом и сервером. reuseport работает только на ядрах Linux 3.9 и выше, DragonFly BSD и FreeBSD 12 и выше.
2.4. Методы балансировки нагрузки
Задача
|
Решение
Используйте один из методов балансировки нагрузки NGINX, такой как наименьшее количество подключений, наименьшее время, общее хеширование, хеширование IP или случайный метод:
upstream backend { least_conn;
|
}
В этом примере для алгоритма балансировки нагрузки для внутрен- него восходящего пула задано наименьшее количество активных под- ключений. Все алгоритмы распределения нагрузки, за исключением общего хеша, случайного и наименьшего времени, – это отдельные ди- рективы, такие как в предыдущем примере. Параметры этих директив объясняются далее.
Обсуждение
Не все запросы или пакеты несут равный вес. Учитывая это, цикли- ческий или даже взвешенный циклический метод, использованный в предыдущих примерах, не будет отвечать потребностям всех прило- жений или потока трафика. NGINX предоставляет ряд алгоритмов рас- пределения нагрузки, которые можно использовать для соответствия конкретным случаям использования. Помимо возможности выбора этих алгоритмов или методов балансировки нагрузки, вы также можете настроить их. Для восходящих пулов HTTP, TCP и UDP доступны следу- ющие методы балансировки нагрузки.
|
|
|
Циклический алгоритм
Это метод балансировки нагрузки по умолчанию, который рас- пределяет запросы в порядке списка серверов в восходящем пуле. Вы также можете принять во внимание вес для взвешенного кару- сельного метода, который можно использовать, если емкости вы- шестоящих серверов разнятся. Чем выше целочисленное значение для такого веса, тем более предпочтительным будет сервер в дан- ном карусельном методе. Алгоритм, стоящий за весом, – это про- сто статистическая вероятность некоего среднего взвешенного.
Наименьшее количество подключений
Данный метод распределяет нагрузку, выступая посредником для текущего запроса к вышестоящему серверу с наименьшим коли- чеством открытых подключений. Этот метод, равно как и кару- сельный, учитывает веса при принятии решения, в какой сервер отправлять подключение. Имя директивы – least_conn.
|
|
Наименьшее время
|
Общее хеширование
Администратор определяет хеш с заданным текстом, переменны- ми запроса или времени выполнения или тем и другим. NGINX распределяет нагрузку между серверами, создавая хеш для теку- щего запроса и помещая его в вышестоящие серверы. Этот метод очень полезен, когда вам нужен дополнительный контроль над
|
|
28 v Глава 2. Высокопроизводительная балансировка нагрузки
тем, куда отправляются запросы, или для определения того, ка- кой вышестоящий сервер, скорее всего, будет кешировать данные. Обратите внимание, что при добавлении или удалении сервера из пула хешированные запросы будут перераспределены. Этот алго- ритм имеет необязательный параметр, consistent, чтобы миними- зировать эффект перераспределения. Имя директивы – hash.
|
Данный метод используется, чтобы дать NGINX команду выбрать произвольный сервер из группы, учитывая вес сервера. Необяза- тельный параметр two [method] указывает NGINX случайным обра- зом выбрать два сервера, а затем использовать предоставленный метод балансировки нагрузки для распределения нагрузки между ними. По умолчанию используется least_conn, если two передается без метода. Имя директивы для случайной балансировки нагруз- ки – random.
|
|
Хеширование IP-адреса
|
2.5. Директива sticky cookie
Задача
Вам необходимо привязать нижестоящего клиента к вышестоящему серверу, используя NGINX Plus.
Решение
Используйте директиву sticky cookie, чтобы дать указание NGINX Plus
создать и отслеживать куки:
2.6. Директива sticky learn v 29
upstream backend {
server backend1.example.com; server backend2.example.com; sticky cookie
|
domain=.example.com httponly
secure path=/;
}
В этой конфигурации мы создаем и отслеживаем куки, который свя- зывает нижестоящего клиента с вышестоящим сервером. В этом при- мере файл куки носит название affinity. Он устанавливается для exa- mple.com со сроком истечения один час, его нельзя использовать на стороне клиента, можно отправлять только по протоколу HTTPS, и он действителен для всех путей.
Обсуждение
|
2.6. Директива sticky learn
Задача
Вам необходимо привязать нижестоящего клиента к вышестоящему серверу, используя существующий куки-файл с помощью NGINX Plus.
Решение
Используйте директиву sticky learn для обнаружения и отслеживания куки, которые создаются восходящим приложением:
30 v Глава 2. Высокопроизводительная балансировка нагрузки
upstream backend {
server backend1.example.com:8080; server backend2.example.com:8081;
sticky learn
create=$upstream_cookie_cookiename lookup=$cookie_cookiename zone=client_sessions:2m;
|
|
Обсуждение
Когда приложения создают собственные куки состояния сеанса, NGINX Plus может обнаружить их в ответах на запросы и отслеживать их. Этот тип отслеживания куки выполняется, если директиве sticky предоставлен параметр learn. Общая память для отслеживания куки указывается при использовании параметра zone с именем и размером. NGINX Plus направлен на поиск куки в ответе, полученном от выше- стоящего сервера через спецификацию параметра create, и ищет ранее зарегистрированную привязку к серверу, используя параметр lookup. Значением этих параметров являются переменные, предоставляемые модулем HTTP.
2.7. Директива sticky route
Задача
Вам необходим детальный контроль над вашими постоянными сеан- сами к вышестоящему серверу с помощью NGINX Plus.
Решение
Используйте директиву sticky с параметром route, чтобы применить переменные относительно запроса на маршрут:
2.7. Директива sticky route v 31
map $cookie_jsessionid $route_cookie {
~.+\.(?P<route>\w+)$ $route;
}
map $request_uri $route_uri {
~jsessionid=.+\.(?P<route>\w+)$ $route;
|
upstream backend {
server backend1.example.com route=a; server backend2.example.com route=b;
sticky route $route_cookie $route_uri;
}
|
Обсуждение
Иногда вам может потребоваться направить трафик на конкретный сервер, располагая при этом более детальным контролем. Параметр route для директивы sticky создан для достижения этой цели. Sticky route обеспечивает более эффективный контроль, фактическое отслежива- ние и связываемость в отличие от алгоритма балансировки нагрузки с общим хешированием. Сначала клиент направляется в вышестоящий сервер на основе указанного маршрута, а затем последовательные зап- росы будут содержать информацию о маршрутизации в куки или URI. Sticky route принимает ряд позиционных параметров, которые оцени-
32 v Глава 2. Высокопроизводительная балансировка нагрузки
|
2.8. Осушение соединения
Задача
Вам необходимо аккуратно удалить серверы для обслуживания или по другим причинам, продолжая обслуживать сеансы с помощью NGINX Plus.
Решение
|
$ curl -X POST -d '{"drain":true}' \
' http://nginx.local/api/3/http/upstreams/backend/servers/0'
{
"id":0, "server":"172.17.0.3:80",
"weight":1, "max_conns":0, "max_fails":1, "fail_timeout": "10s","slow_start": "0s",
"route":"", "backup":false, "down":false, "drain":true
}
2.9. Пассивные проверки работоспособности v 33
Обсуждение
|
2.9.
|
Задача
Вам необходимо выполнить пассивную проверку работоспособности вышестоящих серверов.
Решение
Используйте проверку работоспособности NGINX с балансировкой нагрузки, чтобы убедиться, что применяются только работоспособные вышестоящие серверы:
upstream backend {
server backend1.example.com:1234 max_fails=3 fail_timeout=3s; server backend2.example.com:1234 max_fails=3 fail_timeout=3s;
}
В этой конфигурации мы пассивно отслеживаем работоспособность, устанавливая для директивы max_fails значение, равное трем, а для fail_ timeout – три секунды. Эти параметры директив работают одинаково и в потоковых, и HTTP-серверах.
Обсуждение
Пассивная проверка работоспособности доступна в версии NGINX с открытым исходным кодом. Пассивный мониторинг отслеживает сбой- ные или отключенные соединения, когда они проходят через NGINX по запросу клиента. Пассивные проверки работоспособности активирова-
34 v Глава 2. Высокопроизводительная балансировка нагрузки
|
2.10. Активные проверки работоспособности
Задача
Вам необходимо выполнить активную проверку работоспособности ваших вышестоящих серверов с помощью NGINX Plus.
Дата добавления: 2021-01-21; просмотров: 135; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!