Мастер-Тур(15):Балансировщик нагрузки HaProxy — различия между версиями
| [досмотренная версия] | [досмотренная версия] |
Gavrilov (обсуждение | вклад) |
Moism (обсуждение | вклад) |
||
| (не показаны 3 промежуточные версии 1 участника) | |||
| Строка 9: | Строка 9: | ||
** Архив дистрибутива https://vault.centos.org/7.7.1908/ | ** Архив дистрибутива https://vault.centos.org/7.7.1908/ | ||
** Актуальные версии дистрибутивов https://www.centos.org/download/ | ** Актуальные версии дистрибутивов https://www.centos.org/download/ | ||
| − | ** Официальная документация для установки https:// | + | ** Официальная документация для установки https://netpoint-dc.com/blog/centos-8-installation-guide/ <br /> |
* Установка пакета ''HaProxy'' | * Установка пакета ''HaProxy'' | ||
** '''yum install haproxy''' | ** '''yum install haproxy''' | ||
| Строка 113: | Строка 113: | ||
==Рекомендации по работе с HaProxy== | ==Рекомендации по работе с HaProxy== | ||
| − | Для работы с туроператором Мастер-Тур через API, используются методы [[Мастер-Тур(15):API для отдачи цен в поисковые системы#Поиск туров (GetTours)| | + | Для работы с туроператором Мастер-Тур через API, используются методы [[Мастер-Тур(15):API для отдачи цен в поисковые системы#Поиск туров (GetTours)|GetTours]] и [[Мастер-Тур(15):API для отдачи цен в поисковые системы#Поиск всех цен по туру (GetToursAllPrices) начиная с релиза 15.3|GetToursAllPrices]].<br /> |
| + | |||
| + | Также добавлена возможность работы в корзине с методами основного API для разработки поиска и бронирования: [[Мастер-Тур(15):API для разработки онлайн поиска и бронирования#Поиск туров (Tour)|Tour]] ([[Мастер-Тур(15):API для разработки онлайн поиска и бронирования#Поиск туров онлайн (TourForWeb)|Simple]]), [[Мастер-Тур(15):API для разработки онлайн поиска и бронирования#Выгрузка настройки отображения полей по туристам (TouristDataSettings)|TouristDataSettings]], [[Мастер-Тур(15):API для разработки онлайн поиска и бронирования#Выгрузка услуг доплат к авиаперелетам (GetFlightsAdditionalServices)|GetFlightsAdditionalServices]], [[Мастер-Тур(15):API для разработки онлайн поиска и бронирования#Выгрузка услуг доплат к отелям (GetHotelsAdditionalServices)|GetHotelsAdditionalServices]], [[Мастер-Тур(15):API для разработки онлайн поиска и бронирования#Расчет индивидуальных услуг (CalculateIndividualServiceCosts)|CalculateIndividualServiceCosts]], [[Мастер-Тур(15):API для разработки онлайн поиска и бронирования#Расчет путевки (CalculateReservation)|CalculateReservation]], [[Мастер-Тур(15):API для разработки онлайн поиска и бронирования#Бронирование путевки (CreateReservation)|CreateReservation]]. При последовательном вызове этих контроллеров – необходимо использовать единый ''nodeId'' во всей цепочке вызовов (полученный в предыдущем методе).<br /> | ||
| + | '''Важно:''' обработка реализована только в API (приложение ''Canary'' и ''TourSearchClient'' эти параметры пока не обрабатывает. | ||
| + | |||
Для корректной работы с HaProxy, рекомендуется настроить его для балансировки нагрузки между несколькими серверами, обрабатывающими запросы к API. | Для корректной работы с HaProxy, рекомендуется настроить его для балансировки нагрузки между несколькими серверами, обрабатывающими запросы к API. | ||
| − | При настройке | + | При настройке '''HaProxy''' для распределения запросов на несколько серверов следует использовать параметры '''acl''' и '''use_backend''', как показано в конфигурации. Например, запросы могут направляться на разные серверы в зависимости от значения параметра '''nodeid''': |
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 | ||
Текущая версия на 16:28, 13 ноября 2025
Введение
При увеличении потока запросов на поиск и бронирование на службы Мастер-Тур, пользователи и поисковики начинают сталкиваться с замедлением в работе поиска и/или c таймаутами. Что в итоге приводит к снижению продаж. Балансировщик позволяет произвести горизонтальное масштабирование (путем поднятия нескольких служб), равномерно перераспределяя нагрузку между поднятыми службами.
Статья описывает процесс настройки балансировщика нагрузки с использованием HaProxy (серверное программное обеспечение для обеспечения высокой доступности и балансировки нагрузки для TCP и HTTP приложений посредством распределения входящих запросов на несколько обслуживающих узлов). Этот инструмент включен в репозитории большинства Linux дистрибутивов и прост в установке и настройке.
Установка
Для установки и настройки HaProxy выполните следующие шаги:
- Скачивание дистрибутива. Выбор Linux дистрибутива остается на усмотрение пользователя. В примере рассмотрен CentOS 7
- Архив дистрибутива https://vault.centos.org/7.7.1908/
- Актуальные версии дистрибутивов https://www.centos.org/download/
- Официальная документация для установки https://netpoint-dc.com/blog/centos-8-installation-guide/
- Установка пакета HaProxy
- yum install haproxy
- Копирование оригинального файла конфигурации
- cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg_orig
- Редактирование файла конфигурации
- 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
Рекомендации по работе с HaProxy
Для работы с туроператором Мастер-Тур через API, используются методы GetTours и GetToursAllPrices.
Также добавлена возможность работы в корзине с методами основного API для разработки поиска и бронирования: Tour (Simple), TouristDataSettings, GetFlightsAdditionalServices, GetHotelsAdditionalServices, CalculateIndividualServiceCosts, CalculateReservation, CreateReservation. При последовательном вызове этих контроллеров – необходимо использовать единый nodeId во всей цепочке вызовов (полученный в предыдущем методе).
Важно: обработка реализована только в API (приложение Canary и TourSearchClient эти параметры пока не обрабатывает.
Для корректной работы с HaProxy, рекомендуется настроить его для балансировки нагрузки между несколькими серверами, обрабатывающими запросы к API. При настройке HaProxy для распределения запросов на несколько серверов следует использовать параметры acl и use_backend, как показано в конфигурации. Например, запросы могут направляться на разные серверы в зависимости от значения параметра nodeid:
acl node1 urlp_val(nodeid,?) 1 acl node2 urlp_val(nodeid,?) 2 use_backend service_1 if node1 use_backend service_2 if node2