В данной статье мы рассмотрим вопрос установки и настройки сервера балансировки 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=yesHOSTNAME=NGINXtestGATEWAY=1.1.1.9
Следующая команда... Устанавливаем свои параметры (IPADDR, NETMASK, GATEWAY, DNS1). UUID и HWADDR — лучше оставить родные.
nano /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0NM_CONTROLLED=yesONBOOT=yesTYPE=EthernetBOOTPROTO=noneDEFROUTE=yesIPV4_FAILURE_FATAL=yesIPV6INIT=noNAME="System eth0"#UUID=5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03#HWADDR=52:54:00:91:6a:b3PEERROUTES=yesIPADDR=1.1.4.202NETMASK=255.255.248.0GATEWAY=1.1.1.9DNS1=1.1.1.10USERCTL=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.dyum repolistyum update
4) Установка nginx. Сначала необходимо создать файл с указанием родного репозитория nginx:
nano /etc/yum.repos.d/nginx.repo
[nginx]name=nginx repogpgcheck=0enabled=1
Обновляем список пакетов и устанавливаем nginx:
yum repolistyum 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 / {proxy_pass http://cbs3plus/cbs-qx/;}}}
Обновляем настройки 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 stopnano /etc/sysconfig/iptables
Вставить в конфиг после 22-го порта:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
service iptables startservice iptables restart
reboot
Готово! Заходим по адресу nginx и любуемся там нашим AS: http://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+.
Комментариев нет:
Отправить комментарий