вторник, 11 сентября 2012 г.

Load Balancer на базе NGINX в Debian Squeeze

English: Nginx Logo Español: Logo de Nginx


Рассмотрим построение простого дешевого HTTP балансера на базе Debian+Nginx.

Итак мы имеем

  1. MySQL server - мы не будем рассматривать его конфигурацию, и предположим, что WEB ноды к нему обращаются и работают.
  2. WEB Server 1 - host1.example.com(принимает запросы, общается с базой данных, отдает контент)
  3. WEB Server 2 - host2.example.com(настроен идентично "WEB Server 1")
  4. HTTP balancer - NGINX

Схема выглядит примерно так:

Пункт 1: Установка Nginx

apt-get update
apt-get install nginx -y

Пункт 2: Настройка Nginx

Думаю сейчас стоит обговорить обозначения:
  • exampleproject - имя проекта(так будет называться наш upstream, в нем будут перечислены все WEB ноды)
  • host1.example.com - web server(web нода, их может быть перечислено сколь угодно)
  • example.com - имя домена
Перед внесением изменений скопируем оригинальный файл конфигурации, после чего создадим шаблон конфига.

cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.origin

cat > /etc/nginx/sites-available/default <<EOF
upstream exampleproject {
server host1.example.com;
server host2.example.com;
}

server {

    listen   80; ## listen for ipv4
    server_name  example.com;

    access_log  /var/log/nginx/example.com.access.log;

    location / { 
        proxy_pass http://exampleproject;
    }   

    }   
EOF
Теперь можете отредактировать /etc/nginx/sites-available/default , изменить имя домена, проекта, адреса и количество WEB нод.

Теперь можно перезапустить Nginx.
/etc/init.d/nginx restart
 Restarting nginx: nginx.

P.S. Upstream имеет кучу параметров. Серверам можно задавать вес, настраивать резервные сервера и прочее. По умолчанию запросы распределяются по серверам циклически (в режиме round-robin) с учётом весов серверов. Если при попытке работы с сервером произошла ошибка, то запрос будет передан следующему серверу, и так до тех пор, пока не будут опробованы все работающие серверы. Если не удастся получить успешный ответ ни от одного из серверов, то клиенту будет возвращён результат работы с последним сервером. Подробнее можно почитать Тут
Enhanced by Zemanta