Мастер-Тур(15):Балансировщик нагрузки HaProxy

Материал из Megatec
Версия от 13:37, 7 ноября 2024; Petrov (обсуждение | вклад) (Конфигурация)
Перейти к: навигация, поиск

Введение

При увеличении потока запросов на поиск и бронирование на службы Мастер тур, пользователи и поисковики начинают сталкиваться с замедлением в работе поиска и/или 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