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

Материал из Megatec
Перейти к: навигация, поиск
[досмотренная версия][досмотренная версия]
(Новая страница: «==Введение== Эта инструкция описывает процесс настройки простейшего балансировщика наг…»)
 
 
(не показаны 2 промежуточные версии 2 участников)
Строка 1: Строка 1:
 
==Введение==  
 
==Введение==  
Эта инструкция описывает процесс настройки простейшего балансировщика нагрузки с использованием HaProxy. Этот инструмент включен в репозитории большинства Linux-дистрибутивов и прост в установке и настройке.
+
При увеличении потока запросов на поиск и бронирование на службы Мастер-Тур, пользователи и поисковики начинают сталкиваться с замедлением в работе поиска и/или c таймаутами. Что в итоге приводит к снижению продаж. Балансировщик позволяет произвести горизонтальное масштабирование (путем поднятия нескольких служб), равномерно перераспределяя нагрузку между поднятыми службами.
 +
 
 +
Статья описывает процесс настройки балансировщика нагрузки с использованием [https://www.haproxy.com/ ''HaProxy''] (серверное программное обеспечение для обеспечения высокой доступности и балансировки нагрузки для TCP и HTTP приложений посредством распределения входящих запросов на несколько обслуживающих узлов). Этот инструмент включен в репозитории большинства Linux дистрибутивов и прост в установке и настройке.
  
 
==Установка==  
 
==Установка==  
Для установки и настройки HaProxy выполните следующие шаги:
+
Для установки и настройки ''HaProxy'' выполните следующие шаги:<br />
 
+
* Скачивание дистрибутива. Выбор Linux дистрибутива остается на усмотрение пользователя. В примере рассмотрен ''CentOS 7''
1. Скачивание дистрибутива:
+
** Архив дистрибутива https://vault.centos.org/7.7.1908/
 +
** Актуальные версии дистрибутивов https://www.centos.org/download/
 +
** Официальная документация для установки https://docs.centos.org/en-US/8-docs/standard-install/proc_performing-a-quick-install-with-gui/ <br />
 +
* Установка пакета ''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 адрес сервера со службой и порт, на котором работает служба для второго узла
  
Выбор Linux-дистрибутива остается на усмотрение пользователя. В примере рассмотрен CentOS 7.
 
Ссылки на дистрибутив: [https://vault.centos.org/7.7.1908/ Архив] и [https://www.centos.org/download/ Актуальные версии дистрибутивов]
 
Официальная документация для установки [https://docs.centos.org/en-US/8-docs/standard-install/proc_performing-a-quick-install-with-gui/ дистрибутива]<br />
 
2. Установка пакета HaProxy:<br />
 
yum install haproxy<br />
 
3. Копирование оригинального файла конфигурации:<br />
 
cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg_orig<br />
 
4. Редактирование файла конфигурации: <br />
 
vi /etc/haproxy/haproxy.cfg<br />
 
укажите свои параметры:<br />
 
frontend  main *:10000 - порт к которому будут обращаться клиенты для работы со службами<br />
 
IpdaddressNode1:PortNode1 - ip адрес сервера со службой и порт на котором работает служба для первого узла<br />
 
IpdaddressNode2:PortNode2 - ip адрес сервера со службой и порт на котором работает служба для второго узла<br />
 
 
==Конфигурация==  
 
==Конфигурация==  
 
Текст файла конфигурации для двух узлов TourSearchOwin:
 
Текст файла конфигурации для двух узлов TourSearchOwin:
 
  
 
  #---------------------------------------------------------------------
 
  #---------------------------------------------------------------------
Строка 31: Строка 31:
 
  #
 
  #
 
  #---------------------------------------------------------------------
 
  #---------------------------------------------------------------------
 
 
  #---------------------------------------------------------------------
 
  #---------------------------------------------------------------------
 
  # Global settings
 
  # Global settings
Строка 57: Строка 56:
 
     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
Строка 85: Строка 82:
 
     timeout check          10s
 
     timeout check          10s
 
     maxconn                3000
 
     maxconn                3000
 
 
  #---------------------------------------------------------------------
 
  #---------------------------------------------------------------------
 
  # main frontend which proxys to the backends
 
  # main frontend which proxys to the backends
Строка 92: Строка 88:
 
     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
Строка 105: Строка 98:
 
     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

Текущая версия на 15:37, 7 ноября 2024

Введение

При увеличении потока запросов на поиск и бронирование на службы Мастер-Тур, пользователи и поисковики начинают сталкиваться с замедлением в работе поиска и/или c таймаутами. Что в итоге приводит к снижению продаж. Балансировщик позволяет произвести горизонтальное масштабирование (путем поднятия нескольких служб), равномерно перераспределяя нагрузку между поднятыми службами.

Статья описывает процесс настройки балансировщика нагрузки с использованием HaProxy (серверное программное обеспечение для обеспечения высокой доступности и балансировки нагрузки для TCP и HTTP приложений посредством распределения входящих запросов на несколько обслуживающих узлов). Этот инструмент включен в репозитории большинства Linux дистрибутивов и прост в установке и настройке.

Установка

Для установки и настройки HaProxy выполните следующие шаги:

  • Скачивание дистрибутива. Выбор Linux дистрибутива остается на усмотрение пользователя. В примере рассмотрен CentOS 7
  • Установка пакета 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