Настройка балансировки на базе Angie (sticky)
В статье была рассмотрена настройка балансировщика на базе Angie в «Astra Linux» и «РЕД ОС».
В данном варианте балансируемые сервера (WebApp) подняты на SSL/TLS, и сам собственно балансировщик на Angie тоже будет на SSL/TLS.
1. Получите root-права
Наберите команду и введите пароль:
sudo su
2. Установите Angie и модуль angie-module-vts
Варианты установки на различные ОС описаны разработчиком по ссылке.
Варианты установки Angie PRO описаны по ссылке.
2.1. Пакетная установка на Astra Linux
apt-get update
apt-get install -y ca-certificates curl lsb-release
curl -o /etc/apt/trusted.gpg.d/angie-signing.gpg \
https://angie.software/keys/angie-signing.gpg
echo "deb https://download.angie.software/angie/astra-se/$(egrep -o \
'[0-9]+.[0-9]+' /etc/astra_version) unstable main" \
| sudo tee /etc/apt/sources.list.d/angie.list > /dev/null
apt-get update
apt-get install -y angie
apt install angie-module-vts
2.2. Пакетная установка на РЕД ОС
Создайте файл /etc/yum.repos.d/angie.repo
:
nano /etc/yum.repos.d/angie.repo
C содержимым:
[angie]
name=Angie repo
baseurl=https://download.angie.software/angie/redos/$releasever/
gpgcheck=1
enabled=1
gpgkey=https://angie.software/keys/angie-signing.gpg.asc
Выполните команды:
yum install -y angie
yum install angie-module-vts
systemctl start angie
systemctl enable angie
3. Создайте каталог /etc/angie/upstreams
В каталоге будут указаны балансируемые сервера и каталог /etc/angie/conf.ks
, куда необходимо поместить файл bot_blocked.conf
.
bot_blocked.conf
– файл с http_user_agent.
mkdir -p /etc/angie/upstreams
mkdir -p /etc/angie/conf.ks
wget -O /etc/angie/conf.ks/bot_blocked.conf https://keysystems.ru/files/web/Scripts/wsks/bot_blocked.conf --no-check-certificate
chown angie:angie /etc/angie/conf.ks/bot_blocked.conf
chmod 750 /etc/angie/conf.ks/bot_blocked.conf
4. Создайте файл /etc/angie/upstreams/upstream-budget.conf
nano /etc/angie/upstreams/upstream-budget.conf
С содержимым:
Следует использовать метод балансировки sticky, при котором запросы распределяются по серверам на основе клиентских сессий.
upstream upstream-budget {
sticky cookie srv_id;
server 10.10.0.141:443 max_fails=3 fail_timeout=10s;
server 10.10.0.143:443 max_fails=3 fail_timeout=10s;
}
Здесь вместо 10.10.0.141:443
и 10.10.0.143:443
укажите свои балансируемые сервера. Если порт отличен от 80, то обязательно укажите порт как показано в примере!
sticky - настраивает привязку клиентских сессий к проксируемым серверам в режиме, заданном первым параметром.
max_fails - задает количество неудачных попыток связи с сервером, которое должно произойти в течение времени, заданного параметром, fail_timeout чтобы считать сервер недоступным в течение времени, также заданного fail_timeout параметром. По умолчанию количество неудачных попыток равно 1. Нулевое значение отключает учет попыток.
5. Создайте каталог /etc/angie/ssl
и скопируйте туда сертификаты SSL
mkdir -p /etc/angie/ssl
6. Отредактируйте /etc/angie/angie.conf
предварительно сделав копию
cp /etc/angie/angie.conf /etc/angie/angie.conf.bak
nano /etc/angie/angie.conf
С содержимым:
user angie;
worker_processes auto;
worker_rlimit_nofile 65536;
load_module ./modules/ngx_http_vhost_traffic_status_module.so; #модуль сбора статистики
error_log /var/log/angie/error.log notice;
pid /run/angie.pid;
events {
worker_connections 65536;
}
http {
include /etc/angie/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
log_format extended '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" rt="$request_time" '
'"$http_user_agent" "$http_x_forwarded_for" '
'h="$host" sn="$server_name" ru="$request_uri" u="$uri" '
'ucs="$upstream_cache_status" ua="$upstream_addr" us="$upstream_status" '
'uct="$upstream_connect_time" urt="$upstream_response_time"';
access_log /var/log/angie/access.log main;
sendfile on;
tcp_nopush on;
keepalive_timeout 65;
types_hash_max_size 4096;
client_max_body_size 100M;
server_tokens off;
vhost_traffic_status_zone;
include /etc/angie/upstreams/*.conf; # адреса балансируемых серверов
server {
listen 443 ssl;
listen [::]:443 ssl;
http2 on;
server_name localhost;
include /etc/angie/conf.ks/bot_blocked.conf;
ssl_certificate "/etc/angie/ssl/wsks-19.08_demo.crt";
ssl_certificate_key "/etc/angie/ssl/wsks-19.08_demo.key";
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_ecdh_curve secp384r1;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_stapling on;
ssl_stapling_verify on;
access_log /var/log/angie/budget-access.log;
error_log /var/log/angie/budget-error.log;
proxy_next_upstream error timeout http_502;
proxy_next_upstream_tries 0;
location / {
proxy_pass https://upstream-budget;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host:$server_port;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 1800;
proxy_connect_timeout 1800;
proxy_send_timeout 1800;
proxy_buffer_size 64k;
proxy_buffers 4 64k;
proxy_busy_buffers_size 64k;
}
location /status {
# укажите IP, с которых разрешен доступ к статистике
allow 127.0.0.1;
deny all;
vhost_traffic_status_bypass_stats on;
vhost_traffic_status_display;
vhost_traffic_status_display_format html;
}
}
}
При необходимости измените:
- имена виртуального сервера, параметр
server_name
; - имена сертификатов, параметр
ssl_certificate
; - параметр
proxy_pass
(к примеру на torgi) иaccess_log
,error_log
; - добавьте IP адрес в секцию status, с которого будет доступна статистика по балансировщику.
7. Настройте правило Selinux для РЕД ОС
setsebool -P httpd_can_network_connect 1
во избежание ошибок вида: *2 connect() to 10.10.0.141:443 failed (13: Permission denied) while connecting to upstream
8. Перезапустите Angie и проверьте работу останавливая балансируемые сервера
systemctl restart angie
systemctl status angie
9. Проверьте наличие таймера logrotate.timer для РЕД ОС
systemctl list-units -t timer --all
Eсли в списке нет таймера logrotate.timer, то включите его (баг в RedOS 7.3.1):
systemctl enable logrotate.timer --now
Дополнительно
Перечитать конфигурацию без перезапуска Agine
service angie reload
angie -s reload
Пример статистики модуля angie-module-vts
Ссылка доступна по адресу .../status.
Команда для сброса статистики:
.../status/control?cmd=reset&group=*