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

Материал из ARK-HOSTER.RU | Документация хостинга
Перейти к: навигация, поиск
(Новая страница: «= Настройка балансировщика нагрузки HAProxy = == 1. Подготовка системы == * Войдите в систему п…»)
 
 
Строка 6: Строка 6:
 
* Убедитесь, что у вас есть доступ к серверу через SSH или консоль.
 
* Убедитесь, что у вас есть доступ к серверу через SSH или консоль.
  
== 2. Установка HAProxy ===
+
== 2. Установка HAProxy ==
  
 
=== Обновление системы ===
 
=== Обновление системы ===
  
 
1. Обновите систему:
 
1. Обновите систему:
<code>sudo apt update</code>
+
<pre>sudo apt update</pre>
  
 
2. Установите необходимые пакеты:
 
2. Установите необходимые пакеты:
<code>sudo apt install -y wget curl</code>
+
<pre>sudo apt install -y wget curl</pre>
  
 
=== Установка HAProxy ===
 
=== Установка HAProxy ===
  
 
1. Установите HAProxy:
 
1. Установите HAProxy:
<code>sudo apt install -y haproxy</code>
+
<pre>sudo apt install -y haproxy</pre>
  
 
2. Проверьте версию:
 
2. Проверьте версию:
<code>haproxy -v</code>
+
<pre>haproxy -v</pre>
  
 
3. Запустите и включите автозапуск:
 
3. Запустите и включите автозапуск:
<code>sudo systemctl start haproxy</code>
+
<pre>sudo systemctl start haproxy</pre>
<code>sudo systemctl enable haproxy</code>
+
<pre>sudo systemctl enable haproxy</pre>
  
 
4. Проверьте статус:
 
4. Проверьте статус:
<code>sudo systemctl status haproxy</code>
+
<pre>sudo systemctl status haproxy</pre>
  
== 3. Базовая конфигурация ===
+
== 3. Базовая конфигурация ==
  
 
=== Создание резервной копии ===
 
=== Создание резервной копии ===
  
 
1. Создайте резервную копию оригинального файла:
 
1. Создайте резервную копию оригинального файла:
<code>sudo cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.backup</code>
+
<pre>sudo cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.backup</pre>
  
 
=== Базовая конфигурация ===
 
=== Базовая конфигурация ===
  
 
1. Отредактируйте конфигурационный файл:
 
1. Отредактируйте конфигурационный файл:
<code>sudo nano /etc/haproxy/haproxy.cfg</code>
+
<pre>sudo nano /etc/haproxy/haproxy.cfg</pre>
  
 
2. Создайте базовую конфигурацию:
 
2. Создайте базовую конфигурацию:
<code>global
+
<pre>global
 
     log /dev/log    local0
 
     log /dev/log    local0
 
     log /dev/log    local1 notice
 
     log /dev/log    local1 notice
Строка 70: Строка 70:
 
     errorfile 504 /etc/haproxy/errors/504.http
 
     errorfile 504 /etc/haproxy/errors/504.http
  
# Статистика HAProxy
+
\# Статистика HAProxy
 
listen stats
 
listen stats
 
     bind *:8404
 
     bind *:8404
Строка 78: Строка 78:
 
     stats admin if TRUE
 
     stats admin if TRUE
  
# Frontend для веб-сервера
+
\# Frontend для веб-сервера
 
frontend web_frontend
 
frontend web_frontend
 
     bind *:80
 
     bind *:80
Строка 85: Строка 85:
 
     default_backend web_servers
 
     default_backend web_servers
  
# Backend для веб-серверов
+
\# Backend для веб-серверов
 
backend web_servers
 
backend web_servers
 
     balance roundrobin
 
     balance roundrobin
Строка 92: Строка 92:
 
     server web2 192.168.1.11:80 check
 
     server web2 192.168.1.11:80 check
 
     server web3 192.168.1.12:80 check
 
     server web3 192.168.1.12:80 check
</code>
+
</pre>
  
== 4. Настройка SSL ===
+
== 4. Настройка SSL ==
  
 
=== Создание SSL сертификата ===
 
=== Создание SSL сертификата ===
  
 
1. Создайте директорию для сертификатов:
 
1. Создайте директорию для сертификатов:
<code>sudo mkdir -p /etc/ssl/certs</code>
+
<pre>sudo mkdir -p /etc/ssl/certs</pre>
  
 
2. Создайте самоподписанный сертификат:
 
2. Создайте самоподписанный сертификат:
<code>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"</code>
+
<pre>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"</pre>
  
 
3. Объедините сертификат и ключ:
 
3. Объедините сертификат и ключ:
<code>sudo cat /etc/ssl/certs/example.com.pem /etc/ssl/private/example.com.key > /etc/ssl/certs/example.com.pem</code>
+
<pre>sudo cat /etc/ssl/certs/example.com.pem /etc/ssl/private/example.com.key > /etc/ssl/certs/example.com.pem</pre>
  
 
=== Настройка SSL в HAProxy ===
 
=== Настройка SSL в HAProxy ===
  
 
1. Обновите конфигурацию для SSL:
 
1. Обновите конфигурацию для SSL:
<code>frontend web_frontend
+
<pre>frontend web_frontend
 
     bind *:80
 
     bind *:80
 
     bind *:443 ssl crt /etc/ssl/certs/example.com.pem
 
     bind *:443 ssl crt /etc/ssl/certs/example.com.pem
 
     redirect scheme https if !{ ssl_fc }
 
     redirect scheme https if !{ ssl_fc }
 
     default_backend web_servers
 
     default_backend web_servers
</code>
+
</pre>
  
== 5. Алгоритмы балансировки ===
+
== 5. Алгоритмы балансировки ==
  
 
=== Round Robin (по умолчанию) ===
 
=== Round Robin (по умолчанию) ===
  
<code>backend web_servers
+
<pre>backend web_servers
 
     balance roundrobin
 
     balance roundrobin
 
     server web1 192.168.1.10:80 check
 
     server web1 192.168.1.10:80 check
 
     server web2 192.168.1.11:80 check
 
     server web2 192.168.1.11:80 check
</code>
+
</pre>
  
 
=== Least Connections ===
 
=== Least Connections ===
  
<code>backend web_servers
+
<pre>backend web_servers
 
     balance leastconn
 
     balance leastconn
 
     server web1 192.168.1.10:80 check
 
     server web1 192.168.1.10:80 check
 
     server web2 192.168.1.11:80 check
 
     server web2 192.168.1.11:80 check
</code>
+
</pre>
  
 
=== Source IP Hash ===
 
=== Source IP Hash ===
  
<code>backend web_servers
+
<pre>backend web_servers
 
     balance source
 
     balance source
 
     server web1 192.168.1.10:80 check
 
     server web1 192.168.1.10:80 check
 
     server web2 192.168.1.11:80 check
 
     server web2 192.168.1.11:80 check
</code>
+
</pre>
  
 
=== Weighted Round Robin ===
 
=== Weighted Round Robin ===
  
<code>backend web_servers
+
<pre>backend web_servers
 
     balance roundrobin
 
     balance roundrobin
 
     server web1 192.168.1.10:80 check weight 3
 
     server web1 192.168.1.10:80 check weight 3
 
     server web2 192.168.1.11:80 check weight 1
 
     server web2 192.168.1.11:80 check weight 1
</code>
+
</pre>
  
== 6. Проверка состояния серверов ===
+
== 6. Проверка состояния серверов ==
  
 
=== HTTP проверка ===
 
=== HTTP проверка ===
  
<code>backend web_servers
+
<pre>backend web_servers
 
     option httpchk GET /health
 
     option httpchk GET /health
 
     http-check expect status 200
 
     http-check expect status 200
 
     server web1 192.168.1.10:80 check
 
     server web1 192.168.1.10:80 check
 
     server web2 192.168.1.11:80 check
 
     server web2 192.168.1.11:80 check
</code>
+
</pre>
  
 
=== TCP проверка ===
 
=== TCP проверка ===
  
<code>backend web_servers
+
<pre>backend web_servers
 
     option tcp-check
 
     option tcp-check
 
     server web1 192.168.1.10:80 check
 
     server web1 192.168.1.10:80 check
 
     server web2 192.168.1.11:80 check
 
     server web2 192.168.1.11:80 check
</code>
+
</pre>
  
 
=== Настройка интервалов проверки ===
 
=== Настройка интервалов проверки ===
  
<code>backend web_servers
+
<pre>backend web_servers
 
     option httpchk GET /health
 
     option httpchk GET /health
 
     server web1 192.168.1.10:80 check inter 2s rise 2 fall 3
 
     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
 
     server web2 192.168.1.11:80 check inter 2s rise 2 fall 3
</code>
+
</pre>
  
== 7. Продвинутые настройки ===
+
== 7. Продвинутые настройки ==
  
 
=== Настройка заголовков ===
 
=== Настройка заголовков ===
  
<code>frontend web_frontend
+
<pre>frontend web_frontend
 
     bind *:80
 
     bind *:80
 
     bind *:443 ssl crt /etc/ssl/certs/example.com.pem
 
     bind *:443 ssl crt /etc/ssl/certs/example.com.pem
Строка 188: Строка 188:
 
     http-request set-header X-Real-IP %[src]
 
     http-request set-header X-Real-IP %[src]
 
     default_backend web_servers
 
     default_backend web_servers
</code>
+
</pre>
  
 
=== Настройка ACL (Access Control Lists) ===
 
=== Настройка ACL (Access Control Lists) ===
  
<code>frontend web_frontend
+
<pre>frontend web_frontend
 
     bind *:80
 
     bind *:80
 
     bind *:443 ssl crt /etc/ssl/certs/example.com.pem
 
     bind *:443 ssl crt /etc/ssl/certs/example.com.pem
Строка 205: Строка 205:
 
      
 
      
 
     default_backend web_servers
 
     default_backend web_servers
</code>
+
</pre>
  
 
=== Настройка rate limiting ===
 
=== Настройка rate limiting ===
  
<code>frontend web_frontend
+
<pre>frontend web_frontend
 
     bind *:80
 
     bind *:80
 
     bind *:443 ssl crt /etc/ssl/certs/example.com.pem
 
     bind *:443 ssl crt /etc/ssl/certs/example.com.pem
Строка 219: Строка 219:
 
      
 
      
 
     default_backend web_servers
 
     default_backend web_servers
</code>
+
</pre>
  
== 8. Мониторинг и логирование ===
+
== 8. Мониторинг и логирование ==
  
 
=== Настройка статистики ===
 
=== Настройка статистики ===
  
<code>listen stats
+
<pre>listen stats
 
     bind *:8404
 
     bind *:8404
 
     stats enable
 
     stats enable
Строка 232: Строка 232:
 
     stats admin if TRUE
 
     stats admin if TRUE
 
     stats auth admin:password
 
     stats auth admin:password
</code>
+
</pre>
  
 
=== Настройка логирования ===
 
=== Настройка логирования ===
  
 
1. Настройте rsyslog для HAProxy:
 
1. Настройте rsyslog для HAProxy:
<code>sudo nano /etc/rsyslog.d/49-haproxy.conf</code>
+
<pre>sudo nano /etc/rsyslog.d/49-haproxy.conf</pre>
  
 
2. Добавьте конфигурацию:
 
2. Добавьте конфигурацию:
<code>$ModLoad imudp
+
<pre>$ModLoad imudp
 
$UDPServerRun 514
 
$UDPServerRun 514
 
$UDPServerAddress 127.0.0.1
 
$UDPServerAddress 127.0.0.1
Строка 246: Строка 246:
 
local0.*    /var/log/haproxy.log
 
local0.*    /var/log/haproxy.log
 
& stop
 
& stop
</code>
+
</pre>
  
 
3. Перезапустите rsyslog:
 
3. Перезапустите rsyslog:
<code>sudo systemctl restart rsyslog</code>
+
<pre>sudo systemctl restart rsyslog</pre>
  
 
=== Настройка уведомлений ===
 
=== Настройка уведомлений ===
  
<code>global
+
<pre>global
 
     log /dev/log    local0
 
     log /dev/log    local0
 
     log /dev/log    local1 notice
 
     log /dev/log    local1 notice
Строка 270: Строка 270:
 
mailers mailer1
 
mailers mailer1
 
     mailer smtp1 192.168.1.100:25
 
     mailer smtp1 192.168.1.100:25
</code>
+
</pre>
  
== 9. Управление HAProxy ===
+
== 9. Управление HAProxy ==
  
 
=== Основные команды ===
 
=== Основные команды ===
  
 
1. '''Проверка конфигурации''':
 
1. '''Проверка конфигурации''':
<code>sudo haproxy -c -f /etc/haproxy/haproxy.cfg</code>
+
<pre>sudo haproxy -c -f /etc/haproxy/haproxy.cfg</pre>
  
 
2. '''Перезапуск HAProxy''':
 
2. '''Перезапуск HAProxy''':
<code>sudo systemctl restart haproxy</code>
+
<pre>sudo systemctl restart haproxy</pre>
  
 
3. '''Перезагрузка конфигурации''':
 
3. '''Перезагрузка конфигурации''':
<code>sudo systemctl reload haproxy</code>
+
<pre>sudo systemctl reload haproxy</pre>
  
 
4. '''Проверка статуса''':
 
4. '''Проверка статуса''':
<code>sudo systemctl status haproxy</code>
+
<pre>sudo systemctl status haproxy</pre>
  
 
=== Управление через сокет ===
 
=== Управление через сокет ===
  
 
1. '''Просмотр статистики''':
 
1. '''Просмотр статистики''':
<code>echo "show stat" | sudo socat stdio /run/haproxy/admin.sock</code>
+
<pre>echo "show stat" | sudo socat stdio /run/haproxy/admin.sock</pre>
  
 
2. '''Отключение сервера''':
 
2. '''Отключение сервера''':
<code>echo "disable server web_servers/web1" | sudo socat stdio /run/haproxy/admin.sock</code>
+
<pre>echo "disable server web_servers/web1" | sudo socat stdio /run/haproxy/admin.sock</pre>
  
 
3. '''Включение сервера''':
 
3. '''Включение сервера''':
<code>echo "enable server web_servers/web1" | sudo socat stdio /run/haproxy/admin.sock</code>
+
<pre>echo "enable server web_servers/web1" | sudo socat stdio /run/haproxy/admin.sock</pre>
  
== 10. Настройка файрвола ===
+
== 10. Настройка файрвола ==
  
 
=== Настройка UFW ===
 
=== Настройка UFW ===
  
 
1. Разрешите порты HAProxy:
 
1. Разрешите порты HAProxy:
<code>sudo ufw allow 80/tcp</code>
+
<pre>sudo ufw allow 80/tcp</pre>
<code>sudo ufw allow 443/tcp</code>
+
<pre>sudo ufw allow 443/tcp</pre>
<code>sudo ufw allow 8404/tcp</code>
+
<pre>sudo ufw allow 8404/tcp</pre>
  
 
2. Проверьте статус:
 
2. Проверьте статус:
<code>sudo ufw status</code>
+
<pre>sudo ufw status</pre>
  
 
=== Настройка iptables ===
 
=== Настройка iptables ===
  
 
1. Разрешите порты через iptables:
 
1. Разрешите порты через iptables:
<code>sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT</code>
+
<pre>sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT</pre>
<code>sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT</code>
+
<pre>sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT</pre>
<code>sudo iptables -A INPUT -p tcp --dport 8404 -j ACCEPT</code>
+
<pre>sudo iptables -A INPUT -p tcp --dport 8404 -j ACCEPT</pre>
  
 
2. Сохраните правила:
 
2. Сохраните правила:
<code>sudo iptables-save > /etc/iptables/rules.v4</code>
+
<pre>sudo iptables-save > /etc/iptables/rules.v4</pre>
  
== 11. Примеры конфигураций ===
+
== 11. Примеры конфигураций ==
  
 
=== Балансировка веб-серверов ===
 
=== Балансировка веб-серверов ===
  
<code>frontend web_frontend
+
<pre>frontend web_frontend
 
     bind *:80
 
     bind *:80
 
     bind *:443 ssl crt /etc/ssl/certs/example.com.pem
 
     bind *:443 ssl crt /etc/ssl/certs/example.com.pem
Строка 337: Строка 337:
 
     server web2 192.168.1.11:80 check
 
     server web2 192.168.1.11:80 check
 
     server web3 192.168.1.12:80 check
 
     server web3 192.168.1.12:80 check
</code>
+
</pre>
  
 
=== Балансировка баз данных ===
 
=== Балансировка баз данных ===
  
<code>frontend db_frontend
+
<pre>frontend db_frontend
 
     bind *:3306
 
     bind *:3306
 
     default_backend db_servers
 
     default_backend db_servers
Строка 350: Строка 350:
 
     server db1 192.168.1.20:3306 check
 
     server db1 192.168.1.20:3306 check
 
     server db2 192.168.1.21:3306 check
 
     server db2 192.168.1.21:3306 check
</code>
+
</pre>
  
 
=== Балансировка с перенаправлением ===
 
=== Балансировка с перенаправлением ===
  
<code>frontend web_frontend
+
<pre>frontend web_frontend
 
     bind *:80
 
     bind *:80
 
     bind *:443 ssl crt /etc/ssl/certs/example.com.pem
 
     bind *:443 ssl crt /etc/ssl/certs/example.com.pem
Строка 382: Строка 382:
 
     server api1 192.168.1.40:80 check
 
     server api1 192.168.1.40:80 check
 
     server api2 192.168.1.41:80 check
 
     server api2 192.168.1.41:80 check
</code>
+
</pre>
  
== 12. Устранение неполадок ===
+
== 12. Устранение неполадок ==
  
 
=== Частые проблемы ===
 
=== Частые проблемы ===
  
 
1. '''HAProxy не запускается''':
 
1. '''HAProxy не запускается''':
* Проверьте синтаксис конфигурации: <code>sudo haproxy -c -f /etc/haproxy/haproxy.cfg</code>
+
* Проверьте синтаксис конфигурации: <pre>sudo haproxy -c -f /etc/haproxy/haproxy.cfg</pre>
* Проверьте логи: <code>sudo journalctl -u haproxy</code>
+
* Проверьте логи: <pre>sudo journalctl -u haproxy</pre>
 
* Проверьте права доступа к файлам
 
* Проверьте права доступа к файлам
  
Строка 406: Строка 406:
  
 
1. '''Проверка статуса''':
 
1. '''Проверка статуса''':
<code>sudo systemctl status haproxy</code>
+
<pre>sudo systemctl status haproxy</pre>
  
 
2. '''Проверка портов''':
 
2. '''Проверка портов''':
<code>sudo netstat -tlnp | grep haproxy</code>
+
<pre>sudo netstat -tlnp | grep haproxy</pre>
  
 
3. '''Проверка логов''':
 
3. '''Проверка логов''':
<code>sudo tail -f /var/log/haproxy.log</code>
+
<pre>sudo tail -f /var/log/haproxy.log</pre>
  
 
4. '''Проверка статистики''':
 
4. '''Проверка статистики''':
<code>curl http://localhost:8404/stats</code>
+
<pre>curl http://localhost:8404/stats</pre>
  
 
== Заключение ==
 
== Заключение ==

Текущая версия на 10:36, 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

\# Статистика 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):

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