Настройка балансировщика нагрузки HAProxy — различия между версиями

Материал из ARK-HOSTER.RU | Документация хостинга
Перейти к: навигация, поиск
(Новая страница: «= Настройка балансировщика нагрузки HAProxy = == 1. Подготовка системы == * Войдите в систему п…»)
(нет различий)

Версия 08:33, 15 октября 2025

Содержание

Настройка балансировщика нагрузки 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
  1. Статистика HAProxy

listen stats

   bind *:8404
   stats enable
   stats uri /stats
   stats refresh 5s
   stats admin if TRUE
  1. 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
  1. 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):

Наши специалисты помогут с настройкой HAProxy и оптимизацией производительности ваших приложений!