introducción al servidor proxy haproxy

			第八章:部署haproxy代理 搭建nginx集群

Introducción a Haproxy
Haproxy es un proxy inverso de alto rendimiento de código abierto o uno de los software de servicio de equilibrio de carga. Admite copia de seguridad en caliente de dos máquinas, host virtual, proxy de aplicación basado en TCP y HTTP y otras funciones.
Su configuración es simple y tiene una buena función de verificación de estado para los nodos del servidor (equivalente a la verificación de salud keepalived). Cuando falla el servidor back-end de su proxy, Haproxy eliminará automáticamente el servidor fallido. Cuando el servidor falla
, recuperar Finalmente, Haproxy agregará automáticamente el servidor RS

Haproxy es particularmente útil para aquellos que tienen mucho tráfico. Pero requiere mantenimiento de sesión o servicios de aplicaciones de siete capas. Haproxy se ejecuta en hardware de servidor normal y puede admitir decenas de miles de conexiones simultáneas con sólo optimizaciones simples.
Y su modo operativo hace que sea fácil y seguro integrarse en la arquitectura de varios sitios web, al tiempo que evita que el servidor de aplicaciones quede expuesto a la red.
El software Haproxy presenta las funciones de frontend y backend. El frontend (coincidencia de reglas acl) permite a los gerentes de operación y mantenimiento hacer coincidencias de reglas basadas en cualquier encabezado de solicitud HTTP y luego dirigir la solicitud
al backend relevante (grupos de servidores que esperan que el front-end transferir la solicitud al grupo de servidores) ). A través de la interfaz y la copia de seguridad,
podemos implementar fácilmente la función de proxy de 7 capas de haproxy. haproxy es un software de servicio de proxy excelente y poco común.

Haproxy admite dos modos de proxy principales: el primero es un proxy tcp de 4 capas (por ejemplo: se puede utilizar para el servidor de comunicación del protocolo interno del servicio de correo, el servicio Mysql, etc.).
El segundo es un proxy de capa 7 (como un proxy HTTP). En el modo proxy tcp de capa 4, Haproxy solo reenvía el tráfico en ambas direcciones entre el cliente y el servidor.
Pero en el modo de 7 capas, Haproxy analizará el protocolo de la capa de aplicación y puede controlar el protocolo ejecutando, rechazando, intercambiando, agregando, modificando o eliminando el contenido especificado en la solicitud o respuesta.

Introducción al archivo de configuración principal de haproxy

vim /usr/src/haproxy-1.5.19/examples/haproxy.cfg

# La configuración global, utilizada para establecer parámetros globales, es una configuración a nivel de proceso, generalmente relacionada con la configuración del sistema operativo
global
#Definir registro global, configurado localmente, salida a través de local0, el valor predeterminado es el nivel de información,
se pueden configurar dos registros 127.0. 0.1 advertencia local0
#Defina el nivel de registro [depuración de información de advertencia de error]
#log 127.0.0.1 información local1
#Ruta de ejecución
chroot /usr/local/haproxy
#Ruta de almacenamiento de archivos
PID pidfile /var/run/haproxy.pid
#Establezca el proceso de cada proceso haproxy El número máximo de conexiones simultáneas, que es equivalente a la opción de línea de comando "-n"; el resultado calculado automáticamente de "ulimit -n" se refiere a esta configuración de parámetro maxconn 4096 #Ejecute el usuario haproxy o use la
palabra
clave uid
user haproxy
#Ejecute el grupo de usuarios de haproxy, o use la palabra clave gid
group haproxy
#Ejecute haproxy
daemon en segundo plano
#Establezca el número de procesos de haproxy a iniciar, que solo se puede usar para haproxy en modo demonio;
#Solo se inicia un proceso de forma predeterminada. En vista de varias razones, como la dificultad en la depuración, generalmente solo se usa en el modo multiproceso y se usa en escenarios donde un solo proceso solo puede abrir unos pocos descriptores de archivos
.
#Establezca el número máximo de descriptores de archivos que puede abrir cada proceso. De forma predeterminada, se calculará automáticamente, por lo que no se recomienda modificar esta opción.
#ulimit-n 819200
#Nivel de depuración, generalmente solo depura cuando hay un solo se inicia el proceso y en el entorno de producción está deshabilitado.
#debug
#haproxy no mostrará ninguna información relevante después del inicio, que es lo mismo que agregar el parámetro "-q" al iniciar haproxy desde la línea de comando
#quiet
#Definir la ubicación donde las estadísticas se guardan
stats socket /usr/local/haproxy/stats
# Configuración predeterminada
valores predeterminados
#Modo predeterminado [tcp: capa 4; http: capa 7; salud: solo devuelve OK]
modo http
#Heredar definición de registro global
registro de salida global
#Categoría de registro , httplog
#opción httplog
#Si el servidor back-end necesita registrar la IP real del cliente, debe agregar el campo "X-Forwarded-For" en la solicitud HTTP; #Pero
cuando el propio mecanismo de detección de salud de haproxy accede a la parte posterior -end server, el registro de acceso no debe registrarse. Puede usar excepto para excluir 127.0.0.0, que es el propio haproxy.
#opción forwardfor excepto 127.0.0.0/8
opción forwardfor
#Habilitar la función de apagado del lado del servidor en el protocolo http Y cierre activamente el canal http después de que se complete cada solicitud, de modo que se admitan conexiones largas, la sesión se pueda reutilizar y cada registro de registro se registrará.
opción httpclose
#Si se genera una conexión vacía, el registro de esta conexión vacía no se registrará.
opción dontlognull
#Cuando la sesión con el servidor backend falla (falla del servidor u otras razones), redistribuya la sesión a otros servidores en buen estado; cuando el servidor fallido se recupera, la sesión se dirige al servidor recuperado;
#También puede usar la palabra clave "reintentos" para establecer el número de intentos de conexión al determinar
la opción de falla de la sesión reintentos de redistribución
3
#Cuando haproxy tiene una carga pesada Cuando está alto, los enlaces que se han procesado en la cola actual durante mucho tiempo se finalizarán automáticamente
opción abortonclose
#Tiempo de espera de solicitud http predeterminado timeout
http-request 10s
#Tiempo de espera de cola predeterminado, cuando el servidor backend está bajo carga alta, la solicitud enviada por haproxy se cancelará automáticamente. ser puesto en una cola.timeout
queue 1m
#El tiempo de espera para la conexión entre haproxy y el servidor back-end.timeout
connect 5s
#Después de que el cliente se conecta a haproxy, la transmisión de datos se completa y no hay más transmisión de datos, es decir, el tiempo de espera para la conexión inactiva.timeout
client 1m
# El tiempo de espera para la conexión inactiva entre haproxy y el servidor back-
end.timeout server 1m
#El tiempo de espera predeterminado para el establecimiento de una nueva conexión de solicitud http.Si el tiempo es En resumen, los recursos se pueden liberar lo antes posible para ahorrar recursos.timeout
http-keep-alive 10s
#
Verificación del tiempo de espera de detección de latidos 10 s
#Número máximo de conexiones simultáneas
maxconn 2000
#Establecer el método de equilibrio de carga predeterminado
#equilibrar la fuente
#balnace lessconn
#Configuración de la página de estadísticas, la combinación de frontend y backend, el nombre del grupo de monitoreo se puede personalizar
escuchar según sea necesario admin_status
#Configurar el modo de operación de monitoreo
mode http
#Configurar el enlace del puerto de acceso a la página de estadísticas
0.0.0.0:1080
#Número máximo predeterminado de conexiones en la página de estadísticas
maxconn 10 #Opción
de formato de registro http httplog #Habilitar estadísticas habilitadas #Ocultar información de la versión de haproxy estadísticas en la página de estadísticas #Página de monitoreo tiempo de actualización automática estadísticas de actualización 30s #URL de acceso a la página de estadísticas uri de estadísticas /estadísticas #Cuadro de contraseña de la página de estadísticas texto emergente estadísticas reino mCloud\ Haproxy #Usuario y contraseña de la página de monitoreo: administrador, múltiples nombres de usuario se pueden configurar estadísticas authadmin:admin













#Inicie/deshabilite manualmente el servidor back-end, puede usar el
administrador de estadísticas del nodo de administración web si es VERDADERO
#Establezca la página de error de haproxy
errorfile 400 /usr/local/haproxy/errorfiles/400.http
errorfile 403 /usr/local/haproxy /errorfiles/403.http
archivo de error 408 /usr/local/haproxy/errorfiles/408.http
archivo de error 500 /usr/local/haproxy/errorfiles/500.http
archivo de error 502 /usr/local/haproxy/errorfiles/502.http
archivo de error 503 /usr/local/ haproxy/errorfiles/503.http
errorfile 504 /usr/local/haproxy/errorfiles/504.http
#Monitorear el estado de monitoreo del servidor back-end de haproxy
escuchar site_status
bind 0.0.0.0:1081 #Escuchar
modo de puerto http #http registro de modo de capa 7
127.0.0.1 local2 err #[err advertencia información depuración]
monitor-uri /site_status #URL de detección de estado del sitio web, utilizada para comprobar si el sitio web administrado por HAProxy se puede utilizar. Devuelve 200 normalmente y 503 anormalmente.
acl site_dead nbsrv(php_server) lt 1 #Define la estrategia cuando el sitio web no funciona. Devuelve verdadero cuando el número de máquinas efectivas en el backend especificado colgado en el balanceador de carga es menor que 1 acl site_dead nbsrv(html_server) lt 1 acl site_dead nbsrv (backend_default
)
lt 1
monitor falla si site_dead #Cuando se cumple la política, se devuelve 503. El documento en línea dice 500, pero la prueba real es 503
monitor-net 192.168.4.171/32 #La información de registro de 192.168.4.152 no será registrado y reenviado
monitor-net 192.168.4.172/32
#frontend, nombre
frontend personalizado HAproxy_Cluster
#Defina el puerto de escucha de front-end, se recomienda utilizar el formato bind:80; de lo contrario, habrá problemas al hacer que el clúster tenga alta disponibilidad , y el VIP no podrá acceder cuando cambie a otras máquinas. bind
0.0.0.0 :80
#acl va seguido del nombre de la regla. Cuando la URL solicitada termina en .php, la coincidencia activa la regla php_web. Ambos Los siguientes métodos de escritura son aceptables.
#Cuando la URL solicitada termina con .css, .jpg, .png, cuando termina .jpeg, .js, .gif, coincide y activa las reglas static_web.
#acl static_web path_end .gif .png .jpg. css .js .jpeg
#acl static_web url_reg /.(css|jpg|png|jpeg|js| gif)$
#-i ignora mayúsculas y minúsculas. Cuando el host solicitado es un host que comienza con www.test.com, la regla dns_name coincide y se activa.
acl html_web hdr_beg(host) -i www.haproxytest.com
#acl html_web hdr_beg(host) 10.11 .4.152
#Cuando la IP del cliente es xxxx, haga coincidir y active la regla src_ip
#acl src_ip src xxxx
#Si la regla acl php_web coincide, la solicitud se reenviará al grupo php_server para su procesamiento; si la regla acl html_web coincide , la solicitud se reenviará al grupo html_server Procesando.
use_backend php_server if php_web
use_backend html_server if html_web
#Si ninguna de las reglas anteriores coincide, transfiera la solicitud al grupo default_backend para su procesamiento.
default_backend backend_default
#Configuración del backend, configure el grupo php_server y el
backend del grupo html_server php_server
#Defina el método de equilibrio de carga como método roundrobin, es decir, un algoritmo de programación round-robin basado en el peso, que se recomienda cuando el rendimiento del servidor se distribuye relativamente uniformemente. #También existen varios métodos de equilibrio de carga como los
siguientes :
#-- static-rr: también es una programación por turnos basada en el peso, pero es un método estático, ajustar el peso de la unidad backend en tiempo de ejecución no utilizará el nuevo peso; #-- fuente: realiza operación hash
basada en la IP de origen de la solicitud para que coincida con el grupo de servidores backend;
#-- lessconn: No apto para entornos con sesiones cortas, como aplicaciones basadas en http;
#-- uri: operación hash en todo el URI;
#-- uri_param: parámetros de reenvío en el URI;
#-- hdr() : Reenvío basado en el encabezado http. Si no existe tal encabezado, se utiliza roundrobin en su lugar.
equilibre
el modo roundrobin http
#Permitir que el ID del servidor se inserte en la cookie.
Las cookies se pueden definir después del ID del servidor. SERVERID
#El método de detección de latidos es detectar el archivo index.html del servidor back-end, y también hay otras formas
de la opción httpchk GET /index.html
#Definición del servidor backend, maxconn 1024 representa el número máximo de conexiones al servidor, la cookie 1 representa el serverid 1, el peso representa el peso ( predeterminado 1, máximo 265, 0 significa no participar en el equilibrio de carga),
#check inter 1500 es para detectar la frecuencia de los latidos, subir 2 son 2 tiempos correctos y el servidor se considera disponible, caer 3 son 3 fallas y el servidor está no disponible
servidor php1 192.168.4.171:80 maxconn 1024 cookie 1 peso 3 comprobar inter 1500 subida 2 caída 3
backend html_server
equilibrio
modo fuente http
servidor html1 192.168.4.172:80 maxconn 1024 cookie 1 peso 3 check inter 1500 rise 2 fall 3
backend backend_default
balance
modo fuente servidor http
default1 192.168.4.171:80 maxconn 1024 cookie 1 peso 3 check inter 1500 rise 2 fall 3


ambiente de laboratorio:

  1. servidor proxy haproxy linux-1
    192.168.10.1

2.linux-2 nginx-1

192.168.10.2

3.linux-3 nginx-2

192.168.10.3

procedimiento del experimento:

1. Compile e instale el servidor Nginx (nginx-1, nginx-2)

1.servidor nginx-1

[root@localhost ~]# yum -y instalar pcre-devel zlib-devel

[root@localhost ~]# tar xf nginx-1.12.0.tar.gz -C /usr/src/

[root@localhost ~]# cd /usr/src/nginx-1.12.0

[root@localhost ~]# useradd -M -s /sbin/nologin nginx

[root@localhost ~]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx &&make &&make instalar

[raíz@localhost ~]# eco “

servidor 192.168.10.3

" >/usr/local/nginx/html/index.html

[raíz@localhost ~]# /usr/local/nginx/sbin/nginx

[root@localhost ~]# netstat -anput |grep nginx


Si necesita cerrar el servicio /usr/local/nginx/sbin/nginx -s stop


Servidor 2.nginx-2 (puede usar un script para instalarlo y confirmar que el software del código fuente se haya almacenado en el directorio /root)

[root@localhost ~]# vim nginx-install.sh

#!/bin/bash
read -p "Ingrese el contenido de la página de inicio:" índice

yum -y instalar pcre-devel zlib-devel

tar zxvf nginx-1.12.0.tar.gz -C /usr/src/

disco compacto /usr/src/nginx-1.12.0

usuarioadd -M -s /sbin/nologin nginx

./configure --prefix=/usr/local/nginx --user=nginx --group=nginx && make && make install

eco “$índice” > /usr/local/nginx/html/index.html

/usr/local/nginx/sbin/nginx

netstat -anput|grep nginx &>/dev/null

if [$? -eq 0]; luego
haga eco "el servicio nginx se inició correctamente";
de lo contrario,
haga eco "el servicio nginx no se inició correctamente, verifique el proceso de instalación"
fi

[root@localhost ~]# chmod +x nginx-install.sh

[root@localhost ~]# ./nginx-install.sh

2. Servidor proxy Haproxy
1. Compile e instale haproxy

[root@localhost ~]# yum -y instalar pcre-devel bzip2-devel

[root@localhost ~]# tar xf haproxy-1.5.19.tar.gz -C /usr/src/

[root@localhost ~]# cd /usr/src/haproxy-1.5.19/

## sistema de 64 bits
[root@localhost ~]# make TARGET=linux26

[root@localhost ~]# realizar instalación

2.配置Haproxy
[root@localhost haproxy-1.5.19]# vim /usr/src/haproxy-1.5.19/examples/haproxy.cfg


k Nota:
global --global part
log /dev/log local0 info
log /dev/log local1 aviso ----Almacene los registros de información y avisos por separado para verlos
maxconn 4096 ----Número máximo de conexiones
uid 99
gid 99 — ID de usuario y grupo
# pidfile /var/run/haproxy.pid: la ruta y el nombre del archivo del
demonio del archivo pid, que se ejecuta en segundo plano

valores predeterminados ----
Registro de configuración predeterminado global ——Aplicar la parte global del
modo de configuración de registro http ——El modo es la opción http
opción httplog
dontlognull
reintentos 3 ---------Verifique el número de fallas del nodo Si llega 3 veces seguidas, el nodo se considera no disponible. Utilice
maxconn 2000-----número máximo de conexiones
contimeout 5000-tiempo de espera de conexión 5000
clitimeout 50000
srvtimeout 50000----el tiempo de espera del cliente y del servidor es 50000

# option httpclose ----关闭客户端请求

escuchar webcluster 0.0.0.0:80 ----opción de clúster web (dirección e interfaz de escucha)
httpchk GET /index.html ----comprobar
el equilibrio del archivo http roundrobin - algoritmo de programación de equilibrio de carga sondeo del
servidor roundrobin inst1 192.168.10.2 :80 comprobar inter 2000 fall 3
server inst2 192.168.10.3:80 check inter 2000 fall 3: la dirección, el nombre, el puerto, el intervalo de verificación y el número de verificación de estado del nodo del servidor se consideran fallidos después de 3 veces

El archivo de registro en el directorio /dev/log es un socket. Es el sitio de una línea de comunicación y existe una red de comunicación de datos entre estos puntos finales (enchufes).
Su proceso de comunicación es:
el programa accede a la dirección del socket de la computadora remota y se establece una línea de comunicación entre la dirección del socket de la computadora a la que se accede y la dirección del socket de la computadora remota.

[raíz@localhost ~]# cd

[raíz@localhost ~]# mkdir /etc/haproxy

Edite el archivo de configuración de la siguiente manera

[root@localhost ~]# vim /etc/haproxy/haproxy.cfg registro
global
/dev/log local0 registro de información
/dev/log local1 aviso
maxconn 4096
uid 99
gid 99
demonio

valores predeterminados
registro modo global opción
http opción
httplog
dontlognull
reintentos 3
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000

escuche webcluster 0.0.0.0:80
opción httpchk GET /index.html
equilibre
el servidor roundrobin inst1 192.168.10.2:80 verifique inter 2000 otoño 3
servidor inst2 192.168.10.3:80 verifique inter 2000 otoño 3

[root@localhost ~]# cp /usr/src/haproxy-1.5.19/examples/haproxy.init /etc/init.d/haproxy

[root@localhost ~]# chmod +x /etc/init.d/haproxy

[root@localhost ~]# ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy

[root@localhost ~]# /etc/init.d/haproxy reiniciar

3. Verificación:
El cliente abre 2 navegadores IE y accede a: http://192.168.10.1

Compruebe si puede obtener contenido web diferente y será exitoso.

4. Gestión de registros de haproxy:
los registros de Haproxy se envían al syslog del sistema de forma predeterminada, lo que no es muy conveniente de ver. Para facilitar la gestión de los registros de haproxy, se definen por separado en el entorno de producción.

[raíz@localhost ~]# cd /etc/rsyslog.d/

[root@localhost ~]# vim haproxy.conf

local0.* /var/log/haproxy/ha-info.log
local1.* /var/log/haproxy/ha-notice.log

#Si no agrega la siguiente configuración, además de escribir registros en /var/log/haproxy.log, también se escribirá el archivo de mensajes.

[root@localhost ~]# vi /etc/sysconfig/rsyslog

Añadir:

SYSLOGD_OPTIONS="-r -m 0 -c 2"

:wq

#-c 2 Utilice el modo de compatibilidad, el valor predeterminado es -c 5
#-r Habilitar registros remotos
#-m 0 Marcar marca de tiempo. La unidad es minutos, cuando es 0 significa que la función está deshabilitada.

[root@localhost ~]# systemctl reiniciar rsyslog

[root@localhost ~]# /etc/init.d/haproxy reiniciar

[raíz@localhost ~]# vim /etc/haproxy/haproxy.cfg

registro global
/dev/log local0 registro de información
/dev/log local1 aviso

Al verificar la configuración, se ha configurado haproxy.cfg

Prueba de verificación:
[root@localhost ~]# tail /var/log/haproxy/ha-info.log

Compruebe si se han generado registros

...
La configuración de rsyslog relevante en el libro de texto está escrita en lenguaje rainerscript y es adecuada para entornos complejos. Omitido: solo use el método anterior para lograr

vim /etc/rsyslog.d/haproxy.conf

Contenido editado:

si ($programname == 'haproxy' y $syslogserverity-text == 'info') entonces -/var/log/haproxy/haproxy-info.log

& ~

si ($programname == 'haproxy' y $syslogserverity-text == 'notice') entonces -/var/log/haproxy/haproxy-notice.log

& ~

Optimización de parámetros de Haproxy
maxconn Se recomienda utilizar el demonio 10240 para el número máximo de conexiones.
El modo de proceso del demonio puede usar el nbproc predeterminado no demonio
. Se recomienda que el número de procesos simultáneos para el equilibrio de carga sea igual o 2 veces el Núcleo de la CPU del servidor actual.
El número de reintentos es para verificar los nodos del clúster. Si hay muchos nodos, es concurrente. La cantidad es grande, establecida en 2 o 3 veces. La opción
http-server-close cierra activamente la opción de solicitud http Utilice esta opción en el entorno de producción para evitar la acumulación de conexiones http debido a una configuración de tiempo de espera demasiado larga.
timeout http-keep-alive tiempo de espera de conexión largo (10 s)
timeout http-request tiempo de espera de solicitud http (5 ~ 10 s) Aumente el velocidad de conexión http
tiempo de espera de liberación cliente tiempo de espera del cliente

Supongo que te gusta

Origin blog.csdn.net/m0_57207884/article/details/119669120
Recomendado
Clasificación