Мастер-Тур(15):Балансировщик нагрузки HaProxy — различия между версиями
[непроверенная версия] | [досмотренная версия] |
Gavrilov (обсуждение | вклад) (→Введение) |
Petrov (обсуждение | вклад) (→Конфигурация) |
||
Строка 33: | Строка 33: | ||
# | # | ||
#--------------------------------------------------------------------- | #--------------------------------------------------------------------- | ||
− | |||
#--------------------------------------------------------------------- | #--------------------------------------------------------------------- | ||
# Global settings | # Global settings | ||
Строка 59: | Строка 58: | ||
daemon | daemon | ||
tune.bufsize 163840 | tune.bufsize 163840 | ||
− | |||
# turn on stats unix socket | # turn on stats unix socket | ||
stats socket /var/lib/haproxy/stats | stats socket /var/lib/haproxy/stats | ||
− | |||
#--------------------------------------------------------------------- | #--------------------------------------------------------------------- | ||
# common defaults that all the 'listen' and 'backend' sections will | # common defaults that all the 'listen' and 'backend' sections will | ||
Строка 87: | Строка 84: | ||
timeout check 10s | timeout check 10s | ||
maxconn 3000 | maxconn 3000 | ||
− | |||
#--------------------------------------------------------------------- | #--------------------------------------------------------------------- | ||
# main frontend which proxys to the backends | # main frontend which proxys to the backends | ||
Строка 94: | Строка 90: | ||
acl node1 urlp_val(nodeid,?) 1 | acl node1 urlp_val(nodeid,?) 1 | ||
acl node2 urlp_val(nodeid,?) 2 | acl node2 urlp_val(nodeid,?) 2 | ||
− | |||
use_backend service_1 if node1 | use_backend service_1 if node1 | ||
use_backend service_2 if node2 | use_backend service_2 if node2 | ||
− | |||
default_backend service_all | default_backend service_all | ||
− | |||
#--------------------------------------------------------------------- | #--------------------------------------------------------------------- | ||
# static backend for serving up images, stylesheets and such | # static backend for serving up images, stylesheets and such | ||
Строка 107: | Строка 100: | ||
http-check expect rstring ^.*true.*$ | http-check expect rstring ^.*true.*$ | ||
server nodeid1 IpdaddressNode1:PortNode1 check | server nodeid1 IpdaddressNode1:PortNode1 check | ||
− | |||
− | |||
backend service_2 | backend service_2 | ||
option httpchk GET /toursearchowin/cacheready | option httpchk GET /toursearchowin/cacheready | ||
http-check expect rstring ^.*true.*$ | http-check expect rstring ^.*true.*$ | ||
server nodeid2 IpdaddressNode2:PortNode2 check | server nodeid2 IpdaddressNode2:PortNode2 check | ||
− | |||
#--------------------------------------------------------------------- | #--------------------------------------------------------------------- | ||
# round robin balancing between the various backends | # round robin balancing between the various backends |
Версия 13:37, 7 ноября 2024
Введение
При увеличении потока запросов на поиск и бронирование на службы Мастер тур, пользователи и поисковики начинают сталкиваться с замедлением в работе поиска и/или c таймаутами. Что в итоге приводит к снижению продаж. Балансировщик позволяет произвести горизонтальное масштабирование (путем поднятия нескольких служб), равномерно перераспределяя нагрузку между поднятыми службами.
Статья описывает процесс настройки балансировщика нагрузки с использованием HaProxy(серверное программное обеспечение для обеспечения высокой доступности и балансировки нагрузки для TCP- и HTTP-приложений посредством распределения входящих запросов на несколько обслуживающих узлов). Этот инструмент включен в репозитории большинства Linux-дистрибутивов и прост в установке и настройке.
Установка
Для установки и настройки HaProxy выполните следующие шаги:
1. Скачивание дистрибутива:
Выбор Linux-дистрибутива остается на усмотрение пользователя. В примере рассмотрен CentOS 7.
Ссылки на дистрибутив: Архив и Актуальные версии дистрибутивов
Официальная документация для установки дистрибутива
2. Установка пакета HaProxy:
yum install haproxy
3. Копирование оригинального файла конфигурации:
cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg_orig
4. Редактирование файла конфигурации:
vi /etc/haproxy/haproxy.cfg
укажите свои параметры:
frontend main *:10000 - порт к которому будут обращаться клиенты для работы со службами
IpdaddressNode1:PortNode1 - ip адрес сервера со службой и порт на котором работает служба для первого узла
IpdaddressNode2:PortNode2 - ip адрес сервера со службой и порт на котором работает служба для второго узла
Конфигурация
Текст файла конфигурации для двух узлов TourSearchOwin:
#--------------------------------------------------------------------- # Example configuration for a possible web application. See the # full configuration options online. # # http://haproxy.1wt.eu/download/1.4/doc/configuration.txt # #--------------------------------------------------------------------- #--------------------------------------------------------------------- # Global settings #--------------------------------------------------------------------- global # to have these messages end up in /var/log/haproxy.log you will # need to: # # 1) configure syslog to accept network log events. This is done # by adding the '-r' option to the SYSLOGD_OPTIONS in # /etc/sysconfig/syslog # # 2) configure local2 events to go to the /var/log/haproxy.log # file. A line like the following can be added to # /etc/sysconfig/syslog # # local2.* /var/log/haproxy.log # log 127.0.0.1 local2 chroot /var/lib/haproxy pidfile /var/run/haproxy.pid maxconn 4000 user haproxy group haproxy daemon tune.bufsize 163840 # 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 stats enable # turns on stats module stats refresh 10s # set auto-refresh rate stats uri /stats 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 #--------------------------------------------------------------------- # main frontend which proxys to the backends #--------------------------------------------------------------------- frontend main *:10000 acl node1 urlp_val(nodeid,?) 1 acl node2 urlp_val(nodeid,?) 2 use_backend service_1 if node1 use_backend service_2 if node2 default_backend service_all #--------------------------------------------------------------------- # static backend for serving up images, stylesheets and such #--------------------------------------------------------------------- backend service_1 option httpchk GET /toursearchowin/cacheready http-check expect rstring ^.*true.*$ server nodeid1 IpdaddressNode1:PortNode1 check backend service_2 option httpchk GET /toursearchowin/cacheready http-check expect rstring ^.*true.*$ server nodeid2 IpdaddressNode2:PortNode2 check #--------------------------------------------------------------------- # round robin balancing between the various backends #--------------------------------------------------------------------- backend service_all balance roundrobin option httpchk GET /toursearchowin/cacheready http-check expect rstring ^.*true.*$ server nodeid1 IpdaddressNode1:PortNode1 check server nodeid2 IpdaddressNode2:PortNode2 check