Настройка балансировщика нагрузки HAProxy — различия между версиями
Admin (обсуждение | вклад) (Новая страница: «= Настройка балансировщика нагрузки HAProxy = == 1. Подготовка системы == * Войдите в систему п…») |
(нет различий)
|
Версия 08:33, 15 октября 2025
Содержание
- 1 Настройка балансировщика нагрузки HAProxy
- 1.1 1. Подготовка системы
- 1.2 2. Установка HAProxy =
- 1.3 3. Базовая конфигурация =
- 1.4 4. Настройка SSL =
- 1.5 5. Алгоритмы балансировки =
- 1.6 6. Проверка состояния серверов =
- 1.7 7. Продвинутые настройки =
- 1.8 8. Мониторинг и логирование =
- 1.9 9. Управление HAProxy =
- 1.10 10. Настройка файрвола =
- 1.11 11. Примеры конфигураций =
- 1.12 12. Устранение неполадок =
- 1.13 Заключение
Настройка балансировщика нагрузки HAProxy
1. Подготовка системы
- Войдите в систему под учетной записью с правами root или пользователя с правами sudo.
- Убедитесь, что у вас есть доступ к серверу через SSH или консоль.
2. Установка HAProxy =
Обновление системы
1. Обновите систему:
sudo apt update
2. Установите необходимые пакеты:
sudo apt install -y wget curl
Установка HAProxy
1. Установите HAProxy:
sudo apt install -y haproxy
2. Проверьте версию:
haproxy -v
3. Запустите и включите автозапуск:
sudo systemctl start haproxy
sudo systemctl enable haproxy
4. Проверьте статус:
sudo systemctl status haproxy
3. Базовая конфигурация =
Создание резервной копии
1. Создайте резервную копию оригинального файла:
sudo cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.backup
Базовая конфигурация
1. Отредактируйте конфигурационный файл:
sudo nano /etc/haproxy/haproxy.cfg
2. Создайте базовую конфигурацию:
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin
stats timeout 30s
user haproxy
group haproxy
daemon
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http
- Статистика HAProxy
listen stats
bind *:8404
stats enable
stats uri /stats
stats refresh 5s
stats admin if TRUE
- Frontend для веб-сервера
frontend web_frontend
bind *:80
bind *:443 ssl crt /etc/ssl/certs/example.com.pem
redirect scheme https if !{ ssl_fc }
default_backend web_servers
- Backend для веб-серверов
backend web_servers
balance roundrobin
option httpchk GET /health
server web1 192.168.1.10:80 check
server web2 192.168.1.11:80 check
server web3 192.168.1.12:80 check
4. Настройка SSL =
Создание SSL сертификата
1. Создайте директорию для сертификатов:
sudo mkdir -p /etc/ssl/certs
2. Создайте самоподписанный сертификат:
sudo openssl req -x509 -newkey rsa:4096 -keyout /etc/ssl/private/example.com.key -out /etc/ssl/certs/example.com.pem -days 365 -nodes -subj "/CN=example.com"
3. Объедините сертификат и ключ:
sudo cat /etc/ssl/certs/example.com.pem /etc/ssl/private/example.com.key > /etc/ssl/certs/example.com.pem
Настройка SSL в HAProxy
1. Обновите конфигурацию для SSL:
frontend web_frontend
bind *:80
bind *:443 ssl crt /etc/ssl/certs/example.com.pem
redirect scheme https if !{ ssl_fc }
default_backend web_servers
5. Алгоритмы балансировки =
Round Robin (по умолчанию)
backend web_servers
balance roundrobin
server web1 192.168.1.10:80 check
server web2 192.168.1.11:80 check
Least Connections
backend web_servers
balance leastconn
server web1 192.168.1.10:80 check
server web2 192.168.1.11:80 check
Source IP Hash
backend web_servers
balance source
server web1 192.168.1.10:80 check
server web2 192.168.1.11:80 check
Weighted Round Robin
backend web_servers
balance roundrobin
server web1 192.168.1.10:80 check weight 3
server web2 192.168.1.11:80 check weight 1
6. Проверка состояния серверов =
HTTP проверка
backend web_servers
option httpchk GET /health
http-check expect status 200
server web1 192.168.1.10:80 check
server web2 192.168.1.11:80 check
TCP проверка
backend web_servers
option tcp-check
server web1 192.168.1.10:80 check
server web2 192.168.1.11:80 check
Настройка интервалов проверки
backend web_servers
option httpchk GET /health
server web1 192.168.1.10:80 check inter 2s rise 2 fall 3
server web2 192.168.1.11:80 check inter 2s rise 2 fall 3
7. Продвинутые настройки =
Настройка заголовков
frontend web_frontend
bind *:80
bind *:443 ssl crt /etc/ssl/certs/example.com.pem
http-request set-header X-Forwarded-Proto https if { ssl_fc }
http-request set-header X-Real-IP %[src]
default_backend web_servers
Настройка ACL (Access Control Lists)
frontend web_frontend
bind *:80
bind *:443 ssl crt /etc/ssl/certs/example.com.pem
# ACL для блокировки определенных IP
acl blocked_ips src 192.168.1.100
http-request deny if blocked_ips
# ACL для перенаправления на мобильную версию
acl mobile hdr(User-Agent) -i mobile
use_backend mobile_servers if mobile
default_backend web_servers
Настройка rate limiting
frontend web_frontend
bind *:80
bind *:443 ssl crt /etc/ssl/certs/example.com.pem
# Ограничение запросов
stick-table type ip size 100k expire 30s store http_req_rate(10s)
http-request track-sc0 src
http-request deny if { sc_http_req_rate(0) gt 10 }
default_backend web_servers
8. Мониторинг и логирование =
Настройка статистики
listen stats
bind *:8404
stats enable
stats uri /stats
stats refresh 5s
stats admin if TRUE
stats auth admin:password
Настройка логирования
1. Настройте rsyslog для HAProxy:
sudo nano /etc/rsyslog.d/49-haproxy.conf
2. Добавьте конфигурацию:
$ModLoad imudp
$UDPServerRun 514
$UDPServerAddress 127.0.0.1
local0.* /var/log/haproxy.log
& stop
3. Перезапустите rsyslog:
sudo systemctl restart rsyslog
Настройка уведомлений
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin
stats timeout 30s
user haproxy
group haproxy
daemon
# Настройка уведомлений
email-alert from haproxy@example.com
email-alert to admin@example.com
email-alert mailers mailer1
mailers mailer1
mailer smtp1 192.168.1.100:25
9. Управление HAProxy =
Основные команды
1. Проверка конфигурации:
sudo haproxy -c -f /etc/haproxy/haproxy.cfg
2. Перезапуск HAProxy:
sudo systemctl restart haproxy
3. Перезагрузка конфигурации:
sudo systemctl reload haproxy
4. Проверка статуса:
sudo systemctl status haproxy
Управление через сокет
1. Просмотр статистики:
echo "show stat" | sudo socat stdio /run/haproxy/admin.sock
2. Отключение сервера:
echo "disable server web_servers/web1" | sudo socat stdio /run/haproxy/admin.sock
3. Включение сервера:
echo "enable server web_servers/web1" | sudo socat stdio /run/haproxy/admin.sock
10. Настройка файрвола =
Настройка UFW
1. Разрешите порты HAProxy:
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 8404/tcp
2. Проверьте статус:
sudo ufw status
Настройка iptables
1. Разрешите порты через iptables:
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 8404 -j ACCEPT
2. Сохраните правила:
sudo iptables-save > /etc/iptables/rules.v4
11. Примеры конфигураций =
Балансировка веб-серверов
frontend web_frontend
bind *:80
bind *:443 ssl crt /etc/ssl/certs/example.com.pem
redirect scheme https if !{ ssl_fc }
default_backend web_servers
backend web_servers
balance roundrobin
option httpchk GET /health
server web1 192.168.1.10:80 check
server web2 192.168.1.11:80 check
server web3 192.168.1.12:80 check
Балансировка баз данных
frontend db_frontend
bind *:3306
default_backend db_servers
backend db_servers
balance roundrobin
option tcp-check
server db1 192.168.1.20:3306 check
server db2 192.168.1.21:3306 check
Балансировка с перенаправлением
frontend web_frontend
bind *:80
bind *:443 ssl crt /etc/ssl/certs/example.com.pem
# Перенаправление на мобильную версию
acl mobile hdr(User-Agent) -i mobile
use_backend mobile_servers if mobile
# Перенаправление на API
acl api path_beg /api/
use_backend api_servers if api
default_backend web_servers
backend web_servers
balance roundrobin
server web1 192.168.1.10:80 check
server web2 192.168.1.11:80 check
backend mobile_servers
balance roundrobin
server mobile1 192.168.1.30:80 check
server mobile2 192.168.1.31:80 check
backend api_servers
balance roundrobin
server api1 192.168.1.40:80 check
server api2 192.168.1.41:80 check
12. Устранение неполадок =
Частые проблемы
1. HAProxy не запускается:
- Проверьте синтаксис конфигурации:
sudo haproxy -c -f /etc/haproxy/haproxy.cfg
- Проверьте логи:
sudo journalctl -u haproxy
- Проверьте права доступа к файлам
2. Серверы недоступны:
- Проверьте сетевую связность
- Проверьте настройки проверки здоровья
- Проверьте файрвол
3. SSL ошибки:
- Проверьте SSL сертификаты
- Проверьте права доступа к сертификатам
- Проверьте конфигурацию SSL
Диагностика
1. Проверка статуса:
sudo systemctl status haproxy
2. Проверка портов:
sudo netstat -tlnp | grep haproxy
3. Проверка логов:
sudo tail -f /var/log/haproxy.log
4. Проверка статистики:
curl http://localhost:8404/stats
Заключение
HAProxy успешно настроен и готов к работе! Теперь у вас есть мощный балансировщик нагрузки с возможностями мониторинга, SSL терминации и продвинутой маршрутизации.
Для размещения ваших высоконагруженных приложений на надежном хостинге рекомендуем воспользоваться услугами [ARK-HOSTER.RU](https://ark-hoster.ru):
- [Выделенные серверы](https://ark-hoster.ru/dedicated/) - для критически важных балансировщиков нагрузки
- [VPS/VDS серверы](https://ark-hoster.ru/vpsgame/) - для небольших и средних проектов
Наши специалисты помогут с настройкой HAProxy и оптимизацией производительности ваших приложений!