Поиск по сайту:

Как настроить балансировку нагрузки Nginx


О балансировке нагрузки

Балансировка нагрузки — это полезный механизм для распределения входящего трафика между несколькими работоспособными виртуальными частными серверами. Распределяя механизм обработки на несколько компьютеров, приложение получает избыточность, что обеспечивает отказоустойчивость и повышенную стабильность. Алгоритм Round Robin для балансировки нагрузки отправляет посетителей на один из набора IP-адресов. На самом базовом уровне Round Robin, который довольно легко реализовать, распределяет нагрузку на сервер без учета более тонких факторов, таких как время отклика сервера и географический регион посетителей.

Настраивать

Шаги, описанные в этом руководстве, требуют, чтобы у пользователя были привилегии root на вашем VPS. Вы можете увидеть, как настроить это в Учебнике для пользователей.

Перед настройкой балансировки нагрузки nginx на вашем VPS должен быть установлен nginx. Вы можете быстро установить его с помощью apt-get:

sudo apt-get install nginx

Восходящий модуль

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

Идем дальше и открываем конфигурацию вашего сайта (в своих примерах я просто работаю с общим виртуальным хостом по умолчанию):

sudo nano /etc/nginx/sites-available/default

Нам нужно добавить конфигурацию балансировки нагрузки в файл.

Сначала нам нужно подключить восходящий модуль, который выглядит так:

upstream backend  {
  server backend1.example.com;
  server backend2.example.com;
  server backend3.example.com;
}

Затем мы должны ссылаться на модуль дальше в конфигурации:

 server {
  location / {
    proxy_pass  http://backend;
  }
}

Перезапустите nginx:

sudo service nginx restart

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

Директивы

В предыдущем разделе было описано, как равномерно распределить нагрузку между несколькими виртуальными серверами. Однако есть много причин, по которым это может быть не самый эффективный способ работы с данными. Есть несколько директив, которые мы можем использовать для более эффективного направления посетителей сайта.

Масса

Один из способов начать распределять пользователей по серверам с большей точностью — это присвоить определенный вес определенным машинам. Nginx позволяет нам присвоить число, определяющее долю трафика, которая должна быть направлена на каждый сервер.

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

upstream backend  {
  server backend1.example.com weight=1;
  server backend2.example.com weight=2;
  server backend3.example.com weight=4;
}

Вес по умолчанию равен 1. При весе 2 backend2.example будет отправлять в два раза больше трафика, чем backend1, а backend3 с весом 4 будет обрабатывать в два раза больше трафика, чем backend2, и в четыре раза больше, чем backend. 1.

Хэш

Хэш IP позволяет серверам отвечать клиентам в соответствии с их IP-адресами, отправляя посетителей обратно на один и тот же VPS каждый раз, когда они посещают (если этот сервер не работает). Если известно, что сервер неактивен, он должен быть помечен как отключенный. Все IP-адреса, которые должны были перенаправляться на нерабочий сервер, затем перенаправляются на альтернативный.

В приведенной ниже конфигурации приведен пример:

upstream backend {
  ip_hash;
  server   backend1.example.com;
  server   backend2.example.com;
  server   backend3.example.com  down;
 }

Макс терпит неудачу

Согласно настройкам циклического перебора по умолчанию, nginx будет продолжать отправлять данные на виртуальные частные серверы, даже если серверы не отвечают. Max fails может автоматически предотвратить это, делая не отвечающие серверы неработоспособными в течение установленного периода времени.

Есть два фактора, связанные с максимальным количеством отказов: max_fails и fall_timeout. Максимальное число отказов относится к максимальному количеству неудачных попыток подключения к серверу, которое должно произойти, прежде чем он будет считаться неактивным.

Пример конфигурации может выглядеть так:

upstream backend  {
  server backend1.example.com max_fails=3  fail_timeout=15s;
  server backend2.example.com weight=2;
  server backend3.example.com weight=4;

Узнать больше

Это был краткий обзор простой балансировки нагрузки Round Robin. Кроме того, есть и другие способы ускорить и оптимизировать работу сервера:

  • Как настроить Nginx в качестве внешнего прокси-сервера для Apache
  • Как установить и настроить Varnish с Apache в Ubuntu 12.04
  • Как установить и использовать Memcache в Ubuntu 12.04