четверг, 18 сентября 2014 г.

Установка и настройка nginx на Oracle Linux 6.5

Перейти к концу метаданных
Переход к началу метаданных
В данной статье мы рассмотрим вопрос установки и настройки сервера балансировки nginx на Oracle Linux 6.5 (основана на RedHat, лицензия GNU GPL — бесплатна для коммерческого использования). Делается это довольно просто и не принужденно.

1) Установка Oracle Linux 6.5. Запускаем инсталлятор, следуем его инструкциям.
Ставим галочки возле «Basic», а внизу «High Availability», «Load Balancer», «Oracle Linux Server», «UEK3 kernel repo». Далее-далее и.. устанавливаем. После установки, приступаем к настройке сети.

2) Настройка сети.
Выполняем команду, где указываем свои параметры HOSTNAME и GATEWAY:
nano /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=NGINXtest
GATEWAY=1.1.1.9

Следующая команда... Устанавливаем свои параметры (IPADDR, NETMASK, GATEWAY, DNS1). UUID и HWADDR — лучше оставить родные.
nano /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
NM_CONTROLLED=yes
ONBOOT=yes
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="System eth0"
#UUID=5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03
#HWADDR=52:54:00:91:6a:b3
PEERROUTES=yes
IPADDR=1.1.4.202
NETMASK=255.255.248.0
GATEWAY=1.1.1.9
DNS1=1.1.1.10
USERCTL=no

Прописываем свой IP в hosts:
nano /etc/hosts
1.1.4.202 NGINXtest

Включение и выключение сетевого интерфейса:
ifdown eth0
ifup eth0

Проверяем сетевые настройки:
ifconfig -a

3) Обновление системы. Обновление системы выполняется одной командой:
yum update

Однако, в случае с Oracle Linux, нам необходимо еще подключить public репозиторий:
cd /etc/yum.repos.d
yum repolist
yum update

4) Установка nginx. Сначала необходимо создать файл с указанием родного репозитория nginx:
nano /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
gpgcheck=0
enabled=1

Обновляем список пакетов и устанавливаем nginx:
yum repolist
yum install nginx

5) Настройка nginx. Запускаем сервис (при запуске системы он будет запускаться автоматически):
service nginx start

Соответственно, для остановки (на всякий случай):
service nginx stop

Далее идем править конфиг nginx:
nano /etc/nginx/nginx.conf

В данном примере, у нас есть сервер приложений CBS3PLUS и он находится по адресу: 1.1.4.201, а его веб-интерфейс находится тут: http://1.1.4.201:8080/cbs-qx/  Мы сделаем так, что он будет доступен на нашем сервере nginx по адресу: http://1.1.4.202/

Начальный конфиг:
user nginx;
worker_processes 1;

error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;

events {
worker_connections 1024;
            }

http {
upstream cbs3plus {
server 1.1.4.201:8080;
                               }

server                {
listen 80;
server_name NGINXtest;
location / {
                }
                          }
     }

Обновляем настройки nginx:
nginx -s reload

В случае, если возникнет ошибка такого вида: nginx: [error] open() "/var/run/nginx.pid" failed (2: No such file or directory), то решение у нее такое (при работающем nginx):
ps -ef | grep nginx

Смотрим какой PID у главного процесса, запоминаем его и записываем сюда:
nano /var/run/nginx.pid

А потом уже снова:
nginx -s reload

6) Открываем 80-й порт в firewall для веб-интерфейса:
service iptables stop
nano /etc/sysconfig/iptables

Вставить в конфиг после 22-го порта:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
service iptables start
service iptables restart
reboot

Готово! Заходим по адресу nginx и любуемся там нашим AShttp://1.1.4.202/
PS.: Конфиг nginx можно и нужно оптимизировать в сторону кэширования. В данное статье приведен простой, но действенный режим его работы.

7) Анализируем готовую конфигурацию nginx для CBS3+
Вот опытный конфиг nginx с кэшированием для CBS, который был собран путем проб, ошибок и длительного тестирования (с Владиславом Евсеевым) работы двух серверов приложений непосредственно через nginx.

user nginx;
worker_processes  4;

error_log /dev/null;
pid /var/run/nginx.pid;


events {
    worker_connections  1024;
}



http {
    upstream cbs3plus {
    ip_hash;
    server 1.1.0.228:8080;
    server 1.1.4.206:8080;
                      }

    proxy_cache_path /var/cache/nginx levels=2:2 keys_zone=default:1000m;

  server {
    listen 8080;
    server_name nginx_balancer;
    access_log /dev/null;
    location / {
    proxy_pass http://cbs3plus/;
    proxy_connect_timeout 180;
    proxy_send_timeout 180;
    proxy_read_timeout 180;
    proxy_cache default;
    proxy_cache_valid 200 302 10m;
    proxy_cache_valid 404 3m;
               }
          }
  }

В данный момент, сервер с этим конфигом работает по адресу: http://1.1.4.205:8080/cbs-qx/

Особенности:
1) nginx запоминает, кто откуда пришел через хеш входящего IP адреса. Каждого клиента он направляет на свой сервер (наименее загруженный в данный момент), при этом, что самое важное, не разрывает сессию. Это не значит, что клиент будет навсегда привязан к определенному серверу приложений. Тестирование показало равномерную нагрузку на оба сервера приложений.
2) Чтобы лишний раз не нагружать сервер, все логи (а они у nginx тяжеленные) отправляются в /dev/null.
3) У сервера работает кэш. Он живет только 10 минут (!) и кроме кэширования обычной статики, он еще кэширует одинаковые динамические запросы, тем самым уменьшая нагрузку на ЦП сервера приложений (!!!) и ускоряя вывод одинаковых запросов. Длительное тестирование проблем не показало, все работает очень красиво и аккуратно.
4) Максимальное время отклика на сервер приложений составляет 3 минуты. Если он в это время будет недоступен, запрос автоматически будет переброшен на другой сервер приложений.
5) Количество серверов в пуле может быть насколько угодно большим. Кроме того, можно подготовить также специальные резервные сервера, которые вступят в бой только в случае недоступности какого-либо из основных.
6) Веб-адрес можно сократить, убрав "8080".. но "cbs-qx" убирать нельзя, т.к. на этот путь смотрят модули.
7) Крайне не рекомендуется менять/добавлять что-либо в данный конфиг. Добавление простейшей опции, например enhanced life check, приводит к непредвиденным ошибкам в CBS3+.

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

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