Utilice haproxy + nginx para crear un clúster web y la gestión de registros de Haproxy (para una alta concurrencia)

Prefacio

Programador de clústeres web común

En la actualidad, los programadores de clústeres web comunes se dividen en software y hardware. El software generalmente usa LVS, Haproxy y Nginx de código abierto. El hardware generalmente usa F5. Muchas personas usan algunos productos domésticos, como Barracuda, NSFOCUS, etc.

Aunque LVS tiene una gran capacidad anti-carga en aplicaciones empresariales, tiene deficiencias

LVS no admite el procesamiento regular y no puede lograr una separación dinámica y estática.
Para sitios web grandes, la implementación y configuración de LVS son complicadas y el costo de mantenimiento es relativamente alto.
Haproxy es un software que proporciona alta disponibilidad, equilibrio de carga y proxy basado en aplicaciones TCP y HTTP.

Especialmente adecuado para sitios web con una gran carga. Al
ejecutarse en el hardware actual, puede admitir decenas de miles de solicitudes de conexión simultáneas.

Uno: algoritmo de programación Haproxy

Haproxy admite una variedad de algoritmos de programación, y hay tres más comúnmente utilizados: RR (Round Robin), LC (Least Connections), SH (Source Hashing)

1.1 : RR (Round Robin)

El algoritmo RR es el algoritmo más simple y más utilizado, es decir, la programación
por turnos. Entendiendo, por ejemplo, que
hay tres nodos A, B y C. El primer acceso de usuario se asignará al nodo A y el segundo acceso de usuario se asignará al nodo B. , El acceso del tercer usuario se asignará al nodo C. El
acceso del cuarto usuario seguirá siendo asignado al nodo A, sondeando y asignando solicitudes de acceso para lograr el equilibrio de carga.

1.2 : LC (Conexiones mínimas)

El algoritmo LC es el algoritmo de número mínimo de conexiones, que asigna dinámicamente solicitudes de front-end de acuerdo con el número de conexiones de los nodos de back-end.
Comprenda que
hay tres nodos A, B y C, y que el número de conexiones de cada nodo es A: 4, B: 5 y C: 6, esto Si hay la primera solicitud de conexión de usuario, se asignará a A, el número de conexiones se convierte en A: 5, B: 5, C: 6 La
segunda solicitud de usuario continuará asignándose a A, la cantidad de conexiones se convierte en A6, B: 5, C: 6; Se asignará una nueva solicitud a B, y cada vez se asignará una nueva solicitud al cliente con la menor cantidad de conexiones.
Debido a la situación real, la cantidad de conexiones de A, B y C se liberará dinámicamente, lo cual es difícil Habrá el mismo número de conexiones, por lo que este algoritmo está muy mejorado en comparación con el algoritmo rr. Es un algoritmo que se usa más actualmente.
1.3: SH (Source Hashing)
SH se basa en el algoritmo de programación de acceso a la fuente. Este algoritmo se usa para algunos Existe un escenario en el que la sesión de sesión se registra en el lado del servidor y la programación del clúster se puede realizar en función de la IP de origen, la cookie, etc.
Entendiendo, por ejemplo, que
hay tres nodos A, B y C. El primer usuario se asigna a A para la primera visita y el segundo usuario es el primero El acceso se asigna a B.
Cuando el primer usuario visita por segunda vez, seguirá estando asignado a A y el segundo usuario seguirá siendo asignado a B para la segunda visita. Siempre que el programador de equilibrio de carga no se reinicie, el primer usuario El acceso se asignará a A y el segundo acceso de usuario se asignará a B. Para lograr la programación del clúster,
la ventaja de este algoritmo de programación es lograr la retención de la sesión, pero cuando algunos accesos IP son muy grandes, causará una carga desequilibrada y algunos accesos a nodos. Sobredimensionado, afectando el uso comercial

Dos: construcción de clúster haproxy

2.1: Preparación ambiental

VMware软件
两台centos7虚拟机作为NGINX   
IP地址:192.168.100.3    PC-3
IP地址:192.168.100.4     pc -4
一台centos7虚拟机作为Haproxy(IP地址:192.168.100.20)     pc-2

2.2: Instalación y puesta en marcha de Nginx

Instale Nginx en los dos servidores web e inicie el servicio

Instalar software de entorno

yum install -y  gcc  gcc-c++   make  pcre-devel  expat-devel  perl  bzip2 zlib-devel  pcre
useradd -M -s /sbin/nologin nginx     // 创建程序账户
 [root@pc-3 opt]# tar zxvf nginx-1.12.2.tar.gz
[root@pc-3 opt]# cd nginx-1.12.2/
[root@pc-4 nginx-1.12.2]# ./configure \
> --prefix=/usr/local/nginx\
> --user=nginx\
> --group=nginx


[root@pc-4 nginx-1.12.2]# make && make install

Establecer página de inicio

[root@pc-4 nginx-1.12.2]# cd /usr/local/nginx/html/
[root@pc-4 html]# echo "this is  monkey" > test.html
[root@pc-4 html]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/


PC3操作和PC4之前都一样
只不过这步不一样
[root@pc-3 html]# echo "this is  yellowdog" > test.html

2.3 Configuración operativa de PC1

2.3.1 Instalar haproxy

[root@pc-2 opt]# yum install -y \
> pcre-devel \
> bzip2-devel \     //开启压缩功能
> gcc \
> gcc-c++ \
> make
tar zxvf haproxy-1.5.19.tar.gz
[root@pc-2 opt]# cd haproxy-1.5.19/
[root@pc-2 haproxy-1.5.19]# make TARGET=linux26
[root@pc-2 haproxy-1.5.19]# make install

2.3.2 Configurar haproxy

[root@pc-2 examples]# cp haproxy.cfg /etc/haproxy/
[root@pc-2 examples]# cd /etc/haproxy
[root@pc-2 haproxy]# vim haproxy.cfg

Inserte la descripción de la imagen aquí

global
        log 127.0.0.1   local0
        log 127.0.0.1   local1 notice
        #log loghost    local0 info
        maxconn 4096
        #chroot /usr/share/haproxy        // 取消禁锢目录
        uid 99
        gid 99
        daemon
        #debug
        #quiet

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        retries 3
        #redispatch     //  取消对宕机的设备发送任务
        maxconn 2000
        contimeout      5000
        clitimeout      50000
        srvtimeout      50000

listen   webcluster 0.0.0.0:80
           option httpchk GET /test.html
           balance roundrobin
           server inst1 192.168.100.3:80 check inter 2000 fall 3
           server inst2 192.168.100.4:80 check inter 2000 fall 3

2.4: Explicación detallada del archivo de configuración de Haproxy

Haproxy配置文件通常分为三个部分
global:为全局配置
defaults:为默认配置
listen:为应用组件配置
global配置参数
log127.0.0.1 lcal0:配置日志记录,local0为日志设备,默认存放到系统日志
log127.0.0.1 loca1 notice:notice为日志级别,通常有24个级别
maxconn4096:最大连接数
uid 99:用户uid
gid 99:用户gid
defaults配置项配置默认参数,一般会被应用组件继承,如果在应用组件中没有特别声明,将安装默认配置参数设置
log global:定义日志为global配置中的日志定义
mode http:模式为http
option httplog:采用http日志格式记录日志
retries 3:检查节点服务器失败连续达到三次则认为节点不可用
maxconn2000:最大连接数
contimeout5000:连接超时时间
clitimeout50000:客户端超时时间
srvtimeout50000:服务器超时时间
listen配置项目一般为配置应用模块参数
listen appli4- backup 0.0.0.0:10004:定义一个appli4- backup的应用
option httpchk /index.html检查服务器的index.html文件
option persist:强制将请求发送到已经down掉的服务器
balance roundrobin:负载均衡调度算法使用轮询算法
server inst1 192.168.100.3:80 check inter 2000 fall 3:定义节点1
server inst2 192.168 100.4:80 check inter 2000 fall 3 backup:定义节点2

2.5 Abra el servicio nginx de los dos nodos

[root@pc-3 nginx-1.12.2]# nginx
[root@pc-3 nginx-1.12.2]# netstat -ntap | grep 80
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      22646/nginx: master

2.6 Acceder a la prueba 192.168.100.20/test.html en el cliente

Inserte la descripción de la imagen aquí

Tres: gestión de registros haproxy

El registro de Haproxy se envía al syslog del sistema de forma predeterminada, que generalmente se define por separado en el entorno de producción.

Pasos definidos del método

3.1 Modifique las opciones de configuración del registro en el archivo de configuración de Haproxy y agregue la configuración:

log /dev/log local0 info
log /dev/log local0 notice
修改 rsyslog配置,将 Haproxy相关的配置独立定义到
haproxy.conf,并放到/etc/rsyslog.d/下
保存配置文件并重启 rsyslog服务,完成 rsyslog配置
vim /etc/haproxy/haproxy.cfg

Inserte la descripción de la imagen aquí

global
        log /dev/log   local0 info
        log /dev/log   local0 notice
        #log loghost    local0 info
        maxconn 4096
        #chroot /usr/share/haproxy

3.2 Reinicie el servicio y agregue archivos de configuración

root@pc-2 /]# service haproxy  restart
Restarting haproxy (via systemctl):                        [  确定  ]
[root@pc-2 /]# touch /etc/rsyslog.d/haproxy.conf
[root@pc-2 /]# vim /etc/rsyslog.d/haproxy.conf
if ($programname == 'haproxy' and $syslogseverity-text =='info' )
then -/var/log/haproxy/haproxy-info.log
&~
if ($programname == 'haproxy' and $syslogseverity-text == 'notice' )
then -/var/log/haproxy/haproxy-notice.log
&~
~
~

~

systemctl restart rsyslog.service

3.3 Visite el navegador para ver el archivo de registro generado

[root@pc-2 log]# systemctl restart rsyslog.service
[root@pc-2 log]# cd /var/log

Inserte la descripción de la imagen aquí

Cuatro: Explicación detallada de los parámetros que puede optimizar Haproxy

Con el aumento de la carga del sitio web corporativo, la optimización de los parámetros
haproxy es muy importante maxconn: el número máximo de conexiones, ajustado de acuerdo con la situación real de la aplicación, se recomienda usar
10240 daemon: modo daemon, Haproxy se puede iniciar en modo no daemon, se recomienda usar el modo daemon para comenzar
nbproc: la cantidad de procesos simultáneos para el equilibrio de carga. Se recomienda que sea igual o dos veces la cantidad de núcleos de CPU del servidor actual.
reintentos: la cantidad de reintentos, que se utilizan principalmente para verificar los nodos del clúster. Si hay muchos nodos y la cantidad de simultaneidad es grande, establézcalo en 2 veces O 3 veces la
opción http-server-close: cierre activamente la opción de solicitud http, se recomienda utilizar esta opción en el entorno de producción
timeout http-keep-alive: tiempo de espera de conexión largo, establezca el tiempo de espera de conexión largo, se puede configurar en 10s
timeout http-request : Tiempo de espera de solicitud Http, se recomienda establecer este tiempo en 5 ~ 10 s para aumentar la velocidad de liberación de la conexión http.
Timeout cliente: tiempo de espera del cliente, si el tráfico es demasiado grande y la respuesta del nodo es lenta, puede establecer este tiempo más corto, se recomienda configurarlo en Aproximadamente 1 minuto está bien

Supongo que te gusta

Origin blog.csdn.net/BIGmustang/article/details/108369418
Recomendado
Clasificación