Во всякой стране молодое поколение — всегда иностранцы (А. Сталь).

Как установить Nginx в качестве loadbalancer для Apache или Tomcat

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (5 оценок, среднее: 4,80 из 5)
Загрузка...

Статья опубликована: 21 января 2017

Как установить Nginx в качестве loadbalancer для Apache или Tomcat

Вы можете использовать Nginx в качестве loadbalancer как фронт в вашем веб-приложении.

Например, если ваше приложение работает на Apache (или Tomcat), вы можете настроить учетную вторую экземпляр приложения предприятия на Apache (или Tomcat) на другом сервере.

И потом, вы можете положить Nginx на переднем конце, который будет распределять нагрузку между двумя серверами Apache (или Tomcat или JBoss).

Если вы новичок в Nginx, важно понимать разницу между Nginx против Apache и архитектуру Nginx.

Nginx поддерживает следующие три типа балансировки нагрузки:

  1. round-robin – это тип по умолчанию для Nginx, который использует типичный алгоритм циклического перебора, чтобы решить, куда направить входящий запрос
  2. least-connected – как следует из названия, входящий запрос будет отправлен на сервер, который имеет меньшее количество соединения.
  3. ip-hash – это полезно, когда вы хотите иметь настойчивость, или подключать соединение входящего запроса. В этом типе, клиентский IP-адрес используется, чтобы решить, какому серверу запрос должен быть направлен.

Nginx Loadbalancer

1. Определить upstream и proxy_pass в конфигурационном файле Nginx

Для балансировки нагрузки, вам нужно добавить две вещи в файл конфигурации Nginx:

  1. upstream
  2. proxy_pass

Во- первых, upstream: Укажите уникальное имя (может быть название вашего приложения) и список всех серверов, которые будут балансировкой нагрузки Nginx.

В следующем примере, “crmdev” это название upstream, которое является именем приложения, которое работает как на индивидуальном сервере Apache (101.1 и 102.2, как показано ниже). Вместо того, чтобы “crmdev”, вы можете указать все, что вам нравится.

Примечание: upstream должен быть определен внутри контекста “HTTP” Nginx.

 

Примечание: Если отдельные серверы работают на другом порту (кроме порта 80), то указать номер порта, как показано ниже в upstream

 

Во- вторых, proxy_pass: Укажите уникальное имя upstream которое было определено в предыдущем шаге, как proxy_pass внутри вашей секции “Location”, которая будет в соответствии с разделом “server”, как показано ниже.

 

Примечание: В этом примере, Nginx сам прослушивает порт 80, как показано выше, с помощью параметра listen.

Обратите внимание, что вы также можете использовать proxy_pass для настройки Nginx в качестве обратного прокси для Apache/PHP.

2. Определить upstream и proxy_pass в конфигурационном файле Nginx по умолчанию

Примечание: Как правило, выше, должно быть в соответствии с HTTP или HTTPS, как показано ниже.

 

Но, если вы используете default.conf, который поставляется с файлом по умолчанию nginx.conf, вам не нужно  “HTTP”, так как он уже определен в контексте HTTP.

Примечание: Для HTTPS, замените “HTTP” контекст (в 1-й строке выше) на HTTPS. Кроме того, в строке proxy_pass, используйте https: // {-ваше-upstream-имя-}

В этом случае, если вы используете “HTTP”, как показано выше, вы можете получить следующую директиву HTTP не допускается сообщение об ошибке:

 

Это копия файла default.conf, где я добавил upstream в верхней части (без HTTP), а затем закомментированно местоположение по умолчанию, и добавил новое местоположение с помощью proxy_pass.

3. Установка по алгоритму к наименее активному Nginx для балансировки нагрузки

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

Для этого, добавьте ключевое слово “least_conn” в верхней части upstream, как показано ниже.

 

Если у вас есть несколько серверов, перечисленных в least_conn, и если несколько серверов, имеющих аналогичное низкое число существующих активных соединений, то среди этих серверов, один будет выбран на основе взвешенного циклического.

4. Установка Persistence or Sticky алгоритма балансировки нагрузки Nginx

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

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

 

Хэш для адресов IPv4, использует первые три октета. Если это IPv6-адрес, используется весь адрес.

5. Параметры весового коэффициента для отдельных серверов

Можно также указать вес для конкретного сервера в вашем пуле. По умолчанию все серверы имеет одинаковый приоритет (вес). т.е. по умолчанию значение веса 1.

Но, вы можете изменить это поведение путем присвоения веса к серверу, как показано ниже.

 

В этом примере, мы имеем в общей сложности 5 серверов. Но вес на 3-й сервер со значением 2. Это означает, что для каждого нового запроса 6, 2 запроса пойдет на 3-й сервер, а остальная часть сервера получит по 1 запросу.

Таким образом, это полезно, чтобы распределить больше нагрузки на определенном сервере, который имеет больше мощностей.

Несмотря на то, что в приведенном выше примере, вес используется с алгоритмом круговом по умолчанию, вы можете использовать вес для least_conn и ip_hash также.

6. Параметры времени ожидания для отдельных серверов – max_fails и fail_timeout

Можно также указать max_fails и fail_timeout к конкретному серверу, как показано ниже.

 

В приведенном выше:

  • По умолчанию fail_timeout составляет 10 секунд. В этом примере выше, это установлено на 30 секунд. Это означает, что в течение 30 секунд, если было х число неудачных попыток (как это определено max_fails), то сервер будет недоступен. Кроме того, сервер будет оставаться недоступным в течение 30 секунд.
  • по умолчанию max_fails равен 1 попытки. В приведенном выше примере, это установлено в 3 попытки. Это означает, что после 3 неудачных попыток подключения к этому конкретному серверу, Nginx будет рассматривать этот сервер недоступным в течение всего срока fail_timeout, который составляет 30 секунд.

7. Назначить резервный сервер в Nginx LoadBalancer: Пул

В следующем примере, 5-й сервер помечается как резервное копирование с помощью ключевого слова “backup” в конце параметра сервера.

 

Пример выше будет делать 5-сервер (192.168.101.5) в качестве сервера резервного копирования. Входящий запрос не будут передан на этот сервер, если все остальные 4 сервера будут недоступны.


Читайте также

    Добавить комментарий

    Войти с помощью: 

    Ваш e-mail не будет опубликован. Обязательные поля помечены *

    Заполните форму и наш менеджер перезвонит Вам в самое ближайшее время!

    badge
    Обратный звонок 1
    Отправить
    galka

    Спасибо! Ваша заявка принята

    close
    galka

    Спасибо! Ваша заявка принята

    close