В этом руководстве мы узнаем, как настроить балансировщик нагрузки HAProxy с SSL в Ubuntu 18.04 / Debian 10/9.
HAProxy – это де-факторное решение с открытым исходным кодом, обеспечивающее очень быструю и надежную высокую доступность, балансировку нагрузки и прокси для приложений на базе TCP и HTTP.
Таким образом, HAProxy подходит для веб-сайтов с очень высоким показателем трафика.
- Настройте балансировщик нагрузки HAProxy с помощью SSL в Ubuntu 18.04 / Debian 10/9
- Установите HAProxy в Ubuntu 18.04 / Debian 10 / Debian 9
- Создайте HAProxy репозиторий
- Настройте балансировщик нагрузки HAProxy в Ubuntu 18.04 / Debian 10/9
- Настройте HAProxy с SSL на Ubuntu 18.04 / Debian 10/9
- Создание самоподписанных сертификатов SSL для HAProxy
- Определите параметры конфигурации внешнего интерфейса HAProxy
- Определите настройки конфигурации HAProxy Backend
- Включить статистику HAProxy через Интернет
- Проверьте конфигурацию HAProxy
- Запуск HAProxy
- Проверьте балансировку нагрузки HAProxy
Настройте балансировщик нагрузки HAProxy с помощью SSL в Ubuntu 18.04 / Debian 10/9
В этом руководстве мы продемонстрируем, как HAProxy выполняет балансировку нагрузки с использованием трех веб-серверов, обслуживающих простые HTML-страницы.
Наша архитектура выглядит как показано на схеме ниже;
Установите HAProxy в Ubuntu 18.04 / Debian 10 / Debian 9
Запустите обновление системы.
apt update apt upgrade
После завершения обновления перейдите к установке HAProxy в ваших системах Ubuntu / Debian.
Создайте HAProxy репозиторий
Для каждой системы существуют разные пакеты HAProxy.
Следовательно, вам нужно создать отдельный репозиторий для каждой системы.
Прежде чем вы сможете создать репозитории, установите ключ подписи APT.
apt install curl -y curl https://haproxy.debian.net/bernat.debian.org.gpg | apt-key add -
Затем создайте репозитории HAProxy.
На Debian 10 Buster / Debian 9 Stretch выполните команду, показанную ниже, чтобы создать репо.
echo "deb http://haproxy.debian.net $(lsb_release -cs)-backports-2.0 main" | tee /etc/apt/sources.list.d/haproxy.list
В Ubuntu 18.04 вам нужно добавить репозитории vbernat haproxy PPA, как показано ниже;
apt install software-properties-common add-apt-repository ppa:vbernat/haproxy-2.0
Как только репозитории созданы в каждой системе, выполните обновление системы и установите HAProxy.
apt update apt install haproxy=2.0.\*
Чтобы проверить версию установленного HAProxy, выполните команду ниже;
haproxy -v
HA-Proxy version 2.0.1-1~bpo9+1 2019/06/27 - https://haproxy.org/
Настройте балансировщик нагрузки HAProxy в Ubuntu 18.04 / Debian 10/9
Конфигурация HAProxy – это все то, где он прослушивает запросы на соединение и куда направляет такие запросы.
Поэтому он состоит из системы внешнего интерфейса и одной или нескольких внутренних систем.
Внешняя система определяет IP-адрес и порт, который прослушивает прокси-сервер, а также внутренние системы для использования для конкретного прокси.
Основной файл конфигурации для HAProxy – /etc/haproxy/haproxy.cfg.
Файл конфигурации HAProxy состоит из четырех разделов;
global
раздел определяет настройки безопасности и производительности в рамках всего процесса, которые влияют на HAProxy на низком уровне.defaults
Раздел global определяет параметры конфигурации, которые применяются ко всем внешним и внутренним разделам. Вы можете определить несколько разделов по умолчанию, но последующие разделы по умолчанию переопределяют предшествующие ему.frontend
Когда HAProxy размещается в качестве обратного прокси-сервера, в разделе внешнего интерфейса определяются IP-адреса и порты, к которым могут подключаться клиенты.backend
Этот раздел определяет группу серверов, которые будут сбалансированы по нагрузке и назначены для обработки запросов.
Секции frontend и backend могут быть объединены с использованием секции listen.
Они также могут быть использованы для страницы статистики сервера HAProxy.
Чтобы узнать больше об объяснении разделов конфигурации HAProxy, посмотрите информацию тут.
Прежде чем мы сможем начать какую-либо настройку, давайте создадим резервную копию файла конфигурации.
cp /etc/haproxy/haproxy.cfg{,.bak}
Конфигурация HAProxy по умолчанию содержит параметры конфигурации по умолчанию для разделов global и default.
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
stats timeout 30s
user haproxy
group haproxy
daemon
# Default SSL material locations
ca-base /etc/ssl/certs
crt-base /etc/ssl/private
# Default ciphers to use on SSL-enabled listening sockets.
# For more information, see ciphers(1SSL). This list is from:
# https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
# An alternative list with additional directives can be obtained from
# https://mozilla.github.io/server-side-tls/ssl-config-generator/?server=haproxy
ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS
ssl-default-bind-options no-sslv3
## Add the line below
tune.ssl.default-dh-param 2048
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
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
Мы оставим эти настройки такими, какие они есть, и добавим наши конфигурации для разделов frontend и backend.
Однако вы можете добавить строку tune.ssl.default-dh-param 2048 в глобальный раздел, который устанавливает максимальный размер параметров Диффи-Хеллмана, используемых для генерации эфемерного / временного ключа Диффи-Хеллмана в случае обмена ключами DHE.
Настройте HAProxy с SSL на Ubuntu 18.04 / Debian 10/9
Как указано выше, раздел внешнего интерфейса определяет IP-адрес, на котором следует прослушивать запросы на подключение.
Поскольку мы настраиваем HAProxy с SSL, вам необходимо сгенерировать сертификаты SSL / TLS.
В этом руководстве используются самоподписанные сертификаты.
Вы можете получить свой собственный от доверенного CA.
Создание самоподписанных сертификатов SSL для HAProxy
Начните с генерации закрытого ключа.
openssl genrsa -out /etc/ssl/private/haproxy.key 2048
Затем сгенерируйте запрос на подпись сертификата (CSR).
openssl req -new -key /etc/ssl/private/haproxy.key -out /etc/ssl/certs/haproxy.csr
Создайте самоподписанный сертификат (CRT)
openssl x509 -req -days 365 -in /etc/ssl/certs/haproxy.csr -signkey /etc/ssl/private/haproxy.key -out /etc/ssl/certs/haproxy.crt
Создайте файл pem SSL, содержащий ключ и сертификат.
cat /etc/ssl/private/haproxy.key /etc/ssl/certs/haproxy.crt >> /etc/ssl/certs/haproxy.pem
Определите параметры конфигурации внешнего интерфейса HAProxy
Откройте файл конфигурации HAProxy и настройте параметры внешнего интерфейса, как показано ниже;
vim /etc/haproxy/haproxy.cfg
Это наши основные настройки конфигурации интерфейса.
frontend lb_01
bind 192.168.43.62:443 ssl crt /etc/ssl/certs/haproxy.pem
default_backend webapp_backends
- Параметр bind назначает слушателя для данного IP-адреса и порта. ssl crt инструктирует HAProxy использовать SSL.
- default_backend дает имя бэкенда для отправки трафика.
Определите настройки конфигурации HAProxy Backend
В базовой конфигурации настройки внешнего бэкенда определены ниже;
backend webapp_backends
balance roundrobin
server webapp_01.example.com 192.168.43.252:80
server webapp_02.example.com 192.168.43.174:80
server webapp_03.example.com 192.168.43.21:80
Настройка balance определяет алгоритм планирования балансировки нагрузки.
Roundrobin выбирает серверы по очереди.
Другие распространенные алгоритмы включаютe leastconn, которые позволяют балансировщику нагрузки пересылать запросы на серверы с наименьшим количеством соединений.
настройки server указывает серверы, доступные в бэкэнде.
Включить статистику HAProxy через Интернет
listen stats
bind 192.168.43.62:443 ssl crt /etc/ssl/certs/haproxy.pem
stats enable # enable statistics reports
stats hide-version # Hide the version of HAProxy
stats refresh 30s # HAProxy refresh time
stats show-node # Shows the hostname of the node
stats auth admin:P@ssword # Authentication for Stats page
stats uri /lb_stats # Statistics URL
Проверьте конфигурацию HAProxy
После завершения настройки вы можете выполнить команду ниже, чтобы проверить конфигурацию HAProxy на наличие ошибок.
haproxy -c -f /etc/haproxy/haproxy.cfg
Configuration file is valid
Запуск HAProxy
После установки HAProxy настроен на запуск по умолчанию.
Перезапустите и разрешите запуск HAProxy при загрузке системы;
systemctl restart haproxy systemctl enable haproxy
Проверьте статус;
systemctl status haproxy
● haproxy.service - HAProxy Load Balancer
Loaded: loaded (/lib/systemd/system/haproxy.service; enabled; vendor preset: enabled)
Active: active (running) since Fri 2019-07-12 23:22:58 EAT; 5s ago
Docs: man:haproxy(1)
file:/usr/share/doc/haproxy/configuration.txt.gz
Process: 10686 ExecStartPre=/usr/sbin/haproxy -f $CONFIG -c -q $EXTRAOPTS (code=exited, status=0/SUCCESS)
Main PID: 10687 (haproxy)
Tasks: 2 (limit: 2340)
CGroup: /system.slice/haproxy.service
├─10687 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -S /run/haproxy-master.sock
└─10688 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -S /run/haproxy-master.sock
Если UFW работает, откройте порт 443,
ufw allow 443
Проверьте балансировку нагрузки HAProxy
Теперь, когда настройка завершена, вы можете получить доступ к вашему HAProxy из Интернета, чтобы увидеть, выполняет ли он какую-либо циклическую балансировку нагрузки, используя адрес https://<haproxy-IP>.
Первая страница загрузки показывает контент-сервер из webapp_01.
Для этой демонстрации у нас есть три тестовых HTML-страницы.
При обновлении отображается содержимое с других серверов.
Как вы понимаете, страницы обслуживаются по порядку, одна за другой.
Вот и все, что касается нашего основного руководства по настройке HAProxy Load Balancer с самоподписанным сертификатом в Ubuntu 18.04 / Debian 10 / Debian 9.