Solaris 10. Веб-проект. Обычная связка для нашего времени: Nginx+fastcgi-php-fpm+Mysql (cluster). Проект должен быть отказоустойчив а значит кроме всего прочего иметь избыточность оборудования. На двух серверах передовая - nginx. Точнее в зонах на первой паре серверов. Но нужно установить балансировщик запросов HTTP. Я выбрал BalanceNG. ПО коммерческое но есть вариант (из 2-й ветки) для двух узлов и одного виртуального сервера бесплатно. Общая картинка:
В глобальные зоны серверов (иначе balanceNG не понимает интерфейсы с двоеточиями - скотина!) устанавливаем пакет BalanceNG. Я использовал версии 2.168, 2.199. Создаю конфиг файл /etc/bng.conf:
hostname myhost1
interface e1000g2
vrrp {
vrid 9
priority 200
network 1
}
network 1 {
name "MY network"
addr 89.xxx.xxx.0
mask 255.255.252.0
real 89.xxx.xxx.236
interface e1000g2
}
register network 1
enable network 1
gateway {
ipaddr 89.xxx.xxx.1
}
server 1 {
ipaddr 89.xxx.xxx.235
ports 80,443
protocol tcp
method agent
targets 1,2
}
register servers 1
enable server 1
target 1 {
ipaddr 89.xxx.xxx.243
agent 439,2,5
script "/store/mon.d/http.monitor -p $port$ -u /index.html $ipaddr$",2,7
dsr enable
}
target 2 {
ipaddr 89.xxx.xxx.244
agent 439,2,5
script "/store/mon.d/http.monitor -p $port$ -u /index.html $ipaddr$",2,7
dsr enable
}
register targets 1,2
enable targets 1,2
// end of configuration
Далее запускаем
#bng start
#bng status
#bng control
myhost1#show log
VRRP без лицензии работать не будет к сожалению. Так же оно будет ругаться в журнал об этом. Но если лицензия есть, то будет вариант HA.
Такое же делаем на втором сервере (в глобальной зоне). Эх! Кто бы научил как в зоне запустить! Далее в зонах nginx я запускаю агента. Я выбрал вариант работы DSR и агента.
bngagent позволит мне отслеживать что зона жива. Также в конфиге выше я постоянно запрашиваю сам веб-сервер а жив ли он - это даёт мне гарантию что балансер отправит пришедший запрос только на живой сервер.
В зоне агент запускает просто:
#bngagent 439
здесь 439 - это порт для демона bng
Но это еще не все. Надо прописать сети для работы такой схемы. Наш общий адрес (в DNS так и напишем) 89.xxx.xxx.235. Этот адрес надо прописать в зоны веб-серверов. Можно ручками но лучше ножками. Ручной ввод:
В глобальной зоне:
#ifconfig lo0:10 plumb
#ifconfig lo0:10 89.xxx.xxx.235 netmask 255.255.252.0 zone web1 up
сделав такое на обоих серверах, проверить что балансер видит всё верно:
#bng control
myhost1#show servers
myhost1#show targets
myhost1#show target 1
myhost1#show sessions
Вот.
Далее в конфигах зоны сделать так:
#zonecfg -z web1
web1>add net
web1.net>set address=89.xxx.xxx.235
web1.net>set physical=lo0
web1.net>end
web1>commit
Ну и создать манифесты и методы для bng и bngagent.
Теперь проблема в том, что бы nginx увидел адрес клиента , который послал запрос и а не адреса наших веб-зон. Делаем так:
В nginx.conf добавим строки
set_real_ip_from 89.xxx.xxx.248;
set_real_ip_from 89.xxx.xxx.247;
real_ip_header X-Real-IP;
247 и 248 - это адреса глобальных где балансировщики живут
Комментариев нет:
Отправить комментарий