понедельник, 9 апреля 2012 г.

nginx: балансировка и отказоустойчивость

Делается балансировка через модуль upstream, пример на сайте
upstream backend  {
  server backend1.example.com weight=5;
  server backend2.example.com:8080 max_fails=3  fail_timeout=30s;
  server unix:/tmp/backend3;
}
 
server {
  location / {
    proxy_pass  http://backend;
  }
}

В апстрим имя сервера указываем без префикса протокола (http), иначе ругнётся. Протокол указывается в proxy_pass.
weight=5 - указывает вес сервера, по умолчанию 1. Означает, что на этот сервер будет отправлено 5 запросов, после чего будет выбран следующий сервер.
max_fails=3 - сколько может быть неудачных попыток за время fail_timeout, после чего сервер будет помечен как сломанный и временно (на время fail_timeout) исключен из списка. Если не задано, по умолчанию 1 попытка. 0 отключает эту проверку.
fail_timeout=30s - см. max_fails. По умолчанию 10 сек.
down - пометить сервер как нерабочий. Применяется в связке с ip_hash, чтобы не сломать распределение айпи по серверам.
backup - Применяется в связке основные сервера + резервные (например, в облаке с оплатой ресурсов), задействуются, когда нет серверов без этой опции - основные по max_fails временно отпали. Не может применяться с ip_hash.

Нет вменяемого механизма для логгирования переключений и отказов. Как костыль - задействовать log_module и потом парсить лог спец формата:
log_format timing '$remote_addr - $remote_user [$time_local]  $request '
  'upstream_response_time $upstream_response_time '
  'msec $msec request_time $request_time';
 
log_format up_head '$remote_addr - $remote_user [$time_local]  $request '
  'upstream_http_content_type $upstream_http_content_type';
(c линка наверху)

Замечание про location / {
Дело в том, что нельзя просто сослаться на локейшн, но есть именованные "области" (error_page 404 = @fallback;) или можно попробовать через alias
location ~"..." {
alias /var/www/vhost$name; }

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

Комментариев нет:

Отправить комментарий