Как настроить HAProxy в качестве балансировщика нагрузки для Nginx в CentOS 7
На этой странице
- Основная концепция HAProxy
- Уровень 4 и уровень 7
- Алгоритм балансировки
HAProxy или High Availability Proxy — это балансировщик нагрузки TCP и HTTP с открытым исходным кодом и программное обеспечение прокси-сервера. HAProxy был написан Вилли Тарро на C, он поддерживает SSL, сжатие, поддержку активности, настраиваемые форматы журналов и перезапись заголовков. HAProxy — это быстрый и легкий прокси-сервер и балансировщик нагрузки с небольшим объемом памяти и низкой загрузкой ЦП. Его используют такие крупные сайты, как Github, StackOverflow, Reddit, Tumblr, Twitter и другие. За последние годы он стал самым популярным программным балансировщиком нагрузки и прокси-сервером.
В этом руководстве я проведу вас через установку и настройку HAProxy для 3 серверов, одного балансировщика нагрузки и двух веб-серверов Nginx. Мы установим HAProxy на один сервер, а затем установим веб-сервер Nginx на другие серверы. HAProxy действует как балансировщик нагрузки для веб-серверов Nginx.
Основная концепция с HAProxy
Уровень 4 и Уровень 7
HAProxy может работать в двух режимах: режим TCP уровня 4 и режим HTTP уровня 7. В режиме TCP уровня 4 HAProxy пересылает необработанные TCP-пакеты от клиента на серверы приложений. В режиме HTTP уровня 7 HAProxy анализирует заголовок HTTP перед его пересылкой на серверы приложений. В этом руководстве мы будем использовать Nginx в качестве веб-сервера, который поддерживает только режим HTTP уровня 7.
Алгоритм баланса
Это алгоритм, который используется HAProxy для выбора сервера при балансировке нагрузки. Доступны следующие режимы:
По-круговой
Это самый простой алгоритм баланса. Каждое новое соединение будет обрабатываться следующим внутренним сервером. Если достигнут последний внутренний сервер в списке, он снова запустится с вершины внутреннего списка.
Ластконн
Новое подключение будет обрабатываться внутренним сервером с наименьшим количеством подключений. Это полезно, когда время и нагрузка запросов сильно различаются.
Источник
Это для липких сессий, IP-адрес клиента будет хэшироваться, чтобы определить внутренний сервер, который получил последний запрос с этого IP-адреса. Таким образом, IP A всегда будет обрабатываться backend1, а IP B всегда будет обрабатываться bankend2, чтобы не прерывать сеансы.
Есть и другой алгоритм — подробности смотрите на официальном сайте HAProxy.
Предпосылки
- 3 ОС CentOS 7
loadbalancer
192.168.1.102
nginx1
192.168.1.104
nginx2
> 192.168.1.105- Права root на всех трех серверах.
Шаг 1. Настройте файлы /etc/hosts.
Войдите на сервер балансировщика нагрузки и отредактируйте файл /etc/hosts.
ssh
sudo suvi /etc/hosts
Добавьте имена хостов nginx1 и nginx2:
192.168.1.104 nginx1.loadbalancer.me nginx1
192.168.1.105 nginx2.loadbalancer.me nginx2Сохраните файл и выйдите из редактора.
Затем отредактируйте файл hosts на серверах Nginx (nginx1 и nginx2):
ssh
Отредактируйте и добавьте новую строку для балансировщика нагрузки в файлы hosts:
vi /etc/host
Добавьте имя хоста балансировщика нагрузки на каждый сервер nginx:
192.168.1.102 loadbalancer
сделайте это на серверах nginx1 и nginx2.
Шаг 2 — Установите и настройте HAProxy
HAProxy доступен в репозитории CentOS 7, войдите на сервер балансировщика нагрузки и обновите списки пакетов:
ssh
yum -y updateТеперь установите HAProxy с помощью этой команды yum:
yum -y install haproxy
Когда установка будет завершена, перейдите в каталог \/etc/haproxy/\ и сделайте резервную копию исходного файла конфигурации:
cd /etc/haproxy/
mv haproxy.cfg haproxy.cfg.origЗатем добавьте новый файл конфигурации HAProxy \haproxy.cfg\ с помощью редактора vi:
vi haproxy.cfg
Вставьте конфигурацию ниже:
#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
log 127.0.0.1 local2 #Log configuration
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy #Haproxy running under user and group "haproxy"
group haproxy
daemon
# turn on stats unix socket
stats socket /var/lib/haproxy/stats
#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
mode http
log global
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.0/8
option redispatch
retries 3
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000
#---------------------------------------------------------------------
#HAProxy Monitoring Config
#---------------------------------------------------------------------
listen haproxy3-monitoring *:8080 #Haproxy Monitoring run on port 8080
mode http
option forwardfor
option httpclose
stats enable
stats show-legends
stats refresh 5s
stats uri /stats #URL for HAProxy monitoring
stats realm Haproxy\ Statistics
stats auth howtoforge:howtoforge #User and Password for login to the monitoring dashboard
stats admin if TRUE
default_backend app-main #This is optionally for monitoring backend
#---------------------------------------------------------------------
# FrontEnd Configuration
#---------------------------------------------------------------------
frontend main
bind *:80
option http-server-close
option forwardfor
default_backend app-main
#---------------------------------------------------------------------
# BackEnd roundrobin as balance algorithm
#---------------------------------------------------------------------
backend app-main
balance roundrobin #Balance algorithm
option httpchk HEAD / HTTP/1.1\r\nHost:\ localhost #Check the server application is up and healty - 200 status code
server nginx1 192.168.1.104:80 check #Nginx1
server nginx2 192.168.1.105:80 check #Nginx2Сохраните файл конфигурации и выйдите.
Затем настройте rsyslog для HAProxy.
Мы настроим демон rsyslog для регистрации статистики HAProxy. Отредактируйте файл rsyslog.conf, чтобы разрешить использование UDP-порта 514 программой rsyslog.
vi /etc/rsyslog.conf
Раскомментируйте эту строку, чтобы включить соединение UDP:
$ModLoad imudp
$UDPServerRun 514Если вы хотите использовать определенный IP-адрес, вы можете добавить новую строку, подобную приведенной ниже:
$UDPServerAddress 127.0.0.1
Сохраните файл и выйдите.
Затем создайте новый файл конфигурации haproxy для rsyslog:
cd /etc/rsyslog.d/
vi haproxy.confВставьте конфигурацию ниже:
local2.=info /var/log/haproxy-access.log #For Access Log
local2.notice /var/log/haproxy-info.log #For Service Info - Backend, loadbalancerСохранить и выйти.
Теперь перезапустите rsyslog и затем запустите haproxy:
systemctl restart rsyslog
systemctl start haproxyДобавьте haproxy для запуска при загрузке:
systemctl enable haproxy
Шаг 3 — Установите и настройте Nginx
В этом разделе мы установим Nginx из репозитория epel на серверы nginx1 и nginx2.
Авторизуйтесь на серверах:
ssh
Установите репозиторий epel с помощью команды yum ниже:
yum -y install epel-release
Теперь вы можете установить Nginx:
yum -y install nginx
Нгинкс установлен. Перейдите в веб-каталог и измените индексный файл, чтобы мы могли видеть, какой из двух серверов доставил html-файл:
cd /usr/share/nginx/html/
echo "<h1>nginx1.loadbalance.me</h1>" > index.html #For nginx1 server
echo "<h1>nginx2.loadbalance.me</h1>" > index.html #For nginx2 serverЗатем добавьте Nginx для запуска при загрузке, а затем запустите его:
systemctl enable nginx
systemctl start nginxУбедитесь, что вы делаете этот шаг на серверах nginx1 и nginx2.
Шаг 4 — Тестирование
Тестирование из браузера путем доступа к IP-адресу балансировщика нагрузки: 192.168.1.102
Тестирование с помощью команды curl:
curl 192.168.1.102
Тестирование для входа в веб-мониторинг HAProxy, работающий на порту 8080, с именем пользователя и паролем «howtoforge»:
http://192.168.1.102:8080/статистика
HAProxy успешно работает и действует как балансировщик нагрузки для наших двух веб-серверов Nginx.
Заключение
HAProxy или прокси-сервер высокой доступности — это программное обеспечение с открытым исходным кодом, которое обеспечивает высокую доступность для служб на основе TCP, оно работает как балансировщик нагрузки HTTP и прокси-сервер. Программное обеспечение написано на C и поддерживает SSL, поддержку активности и сжатие. HAProxy — правильный выбор для всех, кому нужен балансировщик нагрузки и прокси-сервер, быстрый и легкий, с небольшим объемом памяти и низкой загрузкой ЦП. Haproxy может работать в режиме TCP уровня 4 и в режиме HTTP уровня 7. Nginx поддерживает только режим HTTP уровня 7 с HAProxy. Если вы хотите использовать режим TCP уровня 4, вы можете использовать другие веб-серверы, такие как apache. В CentOS 7 HAProxy доступен в репозитории по умолчанию. Его легко установить и настроить.