HAProxy+nginx crea un clúster de equilibrio de carga

Tabla de contenido

1. Programadores de clústeres web comunes

2. Introducción al clúster HAProxy 

1. Las características de Haproxy:

2. Algoritmo de programación comúnmente utilizado por Haproxy 

① Ronda contra todos

② Número mínimo de conexiones (Menos conexiones)

③ Algoritmo de programación de acceso basado en fuente (Source Hashing)

④URi

⑤ URL_param

⑥ cookie-rdp (nombre)

⑦ fuente

⑧ estático -rr

3. ¿Cuál es la diferencia entre nginx, LVS y Haproxy?

 3. Experimento:

1. Haproxy crea un clúster web

2. Implementación del servidor Haproxy:

3. Configuración del servidor Haproxy

4. Agregar el servicio del sistema haproxy

 5. Implementación del servidor de nodo:

Otra operación es la misma que la anterior.

 --192.168.77.27---

  --192.168.77.28---

 6. Cree una conexión suave (los dos comandos son iguales)

 7. Inicie nginx

 8. Pruebe el clúster web

actualizar:

 8. Definición de registro (configurada en el servidor donde está instalado HAProxy)


1. Programadores de clústeres web comunes

El programador de clústeres web se divide en software y hardware

  • LVS, Haproxy , Nginx comúnmente utilizados por software

  • LVS tiene el mejor rendimiento, pero es relativamente complicado de construir. El módulo ascendente de Nginx admite funciones de clúster, pero la función de verificación de estado de los nodos del clúster no es sólida y la alta concurrencia no es tan buena como Haproxy.

  • F5 se usa generalmente para hardware y mucha gente usa productos domésticos como Barracuda y NSFOCUS.

2. Introducción al clúster HAProxy 

LVS tiene una gran capacidad para resistir cargas en las empresas, pero 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 es compleja y el costo de mantenimiento es relativamente alto.

Haproxy es un software que puede mejorar la disponibilidad, el equilibrio de carga y el proxy basado en aplicaciones TCP y HTTP. Es adecuado para sitios web muy cargados y puede admitir decenas de miles de solicitudes de conexión simultáneas que se ejecutan en hardware.

1. Las características de Haproxy:

1. La confiabilidad y estabilidad son muy buenas, comparables a las del equipo equilibrador de carga F5 a nivel de hardware.

2. Se pueden mantener hasta 40 000-50 000 conexiones simultáneas al mismo tiempo, el número máximo de solicitudes procesadas por unidad de tiempo es 20 000 y la capacidad máxima de procesamiento puede alcanzar 10 Git/t

3. Admite hasta 8 algoritmos de equilibrio de carga y también admite la persistencia de la sesión

4. Admite funciones únicas como rechazo de conexión y proxy totalmente transparente

5. Admite la función de host virtual para lograr un equilibrio de carga web más flexible

6. Fuerte soporte de ACL para control de acceso

7. Su estructura de datos de árbol binario elástico única aumenta la complejidad de la estructura de datos a 0 (1), es decir, la velocidad de consulta de datos no disminuirá con el aumento de las entradas de datos.

8. Admite la función keepalive del cliente, reduce el desperdicio de recursos causado por el protocolo de enlace de tres vías entre el cliente y haproxy y permite que se completen múltiples solicitudes en una conexión tcp.

9. Admite aceleración TCP, función de copia cero, similar al mecanismo mmap

10. Admite almacenamiento en búfer de respuesta

11. Admite protocolo RDP

12. La adherencia basada en el código fuente, similar a la función ip_hash de nginx, siempre envía solicitudes del mismo cliente al mismo servidor ascendente dentro de un cierto período de tiempo.

13. Mejor interfaz de datos estadísticos, su interfaz web muestra la información estadística de aceptación, transmisión, rechazo, error y otros datos de cada servidor en el backend Jiquanzhong.

14. Detección detallada del estado de salud, relacionada con el estado de detección de salud del servidor ascendente en la interfaz web, y proporciona ciertas funciones de administración

15. Mecanismo de evaluación de la salud basado en el tráfico

16. Basado en autenticación http

17. Interfaz de gestión basada en línea de comandos

18. Analizador de registros, que puede analizar registros.
 

2. Algoritmo de programación comúnmente utilizado por Haproxy 

Haproxy admite una variedad de algoritmos de programación, los más utilizados son 8

① Ronda contra todos

  • El algoritmo RR es el algoritmo más simple y más utilizado, que sondea y asigna solicitudes de acceso para lograr efectos de equilibrio de carga.

② Número mínimo de conexiones (Menos conexiones)

  • El algoritmo de número mínimo de conexión asigna dinámicamente solicitudes de front-end de acuerdo con el número de conexiones de nodos gruesos. En comparación con el algoritmo rr, este algoritmo ha mejorado mucho y es un algoritmo que se usa más.

③ Algoritmo de programación de acceso basado en fuente (Source Hashing)

  • Se utiliza en algunos escenarios donde los registros de sesión se registran en el lado del servidor y la programación del clúster se puede realizar en función de la IP de origen, las cookies, etc.
  • Ejemplo: cuando el servidor tiene tres nodos, cuando el primer usuario accede al nodo A, el segundo usuario accede al nodo B. Si el primer usuario descarga y visita nuevamente, aún estará asignado al nodo A, y el segundo usuario también será asignado al nodo B. Mientras el balanceador de carga no se reinicie, siempre se asignará de esta manera.
  • La ventaja del algoritmo de subprogramación es lograr la retención de sesiones, pero cuando algunos accesos de IP son muy grandes, provocará un equilibrio de carga desigual y algunos nodos tendrán grandes volúmenes de acceso, lo que afectará el uso comercial.

④URi

  • Indica que de acuerdo con el URI solicitado, se debe utilizar CDN

⑤ URL_param

  • Indica que cada solicitud HTTP está bloqueada según el encabezado de la solicitud HTTP

⑥ cookie-rdp (nombre)

  • Indica que cada solicitud TCP está bloqueada y codificada según la cookie (nombre)

⑦ fuente

  • Indica que según la IP de origen de la solicitud, es similar al mecanismo de hash de IP de Nginx.

⑧ estático -rr

  • Indica que según el peso, la asignación por turnos

3. ¿Cuál es la diferencia entre nginx, LVS y Haproxy?

LVS

  • Equilibrio de carga suave basado en aplicaciones de terceros
  • Solo puede implementar la tecnología de equilibrio de carga IP de la capa 4 y la función de monitoreo de estado es única, pero el rendimiento general del equilibrio de carga es el más sólido.

nginx

  • Equilibrio de carga suave basado en aplicaciones de terceros

  • Puede implementar tecnología de 4 y 7 capas.

  • Se utiliza principalmente para servidores web o servidores de caché. Aunque el módulo ascendente de nginx también admite funciones de clúster, no tiene una función de verificación de estado sólida para los nodos del clúster y su rendimiento no es tan bueno como el de Haproxy.

Haproxy

  • Realice un equilibrio de carga suave basado en el kernel del sistema operativo Linux
  • Puede proporcionar una solución integral de equilibrio de carga para aplicaciones TCP y HTTP.
  • En términos de monitoreo de estado, las funciones son más ricas y poderosas y pueden admitir varios métodos de monitoreo de estado, como puertos, URL y scripts.

Resumir:

Resumido desde tres aspectos, ① basado en el kernel del sistema o aplicaciones de terceros, ② trabajando en la capa 4 o la capa 7, ③ estado de monitoreo

  • LVS implementa un equilibrio de carga suave basado en el kernel del sistema operativo, y nginx y haproxy se implementan en función de aplicaciones de terceros.
  • LVS puede implementar tecnología de equilibrio de carga IP de 4 capas, el equilibrio de carga LVS es el más ligero en 4 capas, nginx y haproxy pueden realizar 4 y 7 capas.
  • LVS tiene una función de monitoreo de estado único, Haproxy tiene potentes funciones de monitoreo de estado y puede admitir el monitoreo de puerto, URL y estado de script. Nginx es principalmente un servidor web o servidor de caché. Aunque también hay módulos uostream que admiten funciones de agrupación, el estado La verificación de los nodos no es sólida.

 3. Experimento:

1. Haproxy crea un clúster web

servidor dirección IP
servidor haproxy 192.168.77.26
servidor nginx1 192.168.77.27
servidor nginx2 192.168.77.28
cliente Accede localmente

2. Implementación del servidor Haproxy:

1. Apague el firewall y transfiera el paquete de software necesario para instalar Haproxy al directorio /opt
systemctl stop firewalld
setenforce 0

 2. Compile e instale Haproxy

  • yum install -y pcre-devel bzip2-devel gcc gcc-c++ make #Install entorno dependiente
  • tar zxvf haproxy-1.5.19.tar.gz #Descompresión
  • cd haproxy-1.5.19/
  • haga TARGET=linux2628 ARCH=x86_64 #TARGET=linux26 #versión del kernel,
  • #Use uname -r para ver el kernel, como por ejemplo: 2.6.18-371.el5, luego use TARGET=linux26 para este parámetro; use TARGET=linux2628 si el kernel es mayor que 2.6.28
  • hacer instalar #instalación

 

3. Configuración del servidor Haproxy

mkdir /etc/haproxy
cp examples/haproxy.cfg /etc/haproxy/

cd /etc/haproxy/
vim haproxy.cfg
global		#全局配置,主要用于定义全局参数,属于进程级的配置,通常和操作系统配置有关
--4~5行--修改,定义haproxy日志输出设置和日志级别,local0为日志设备,默认存放到系统日志
		log /dev/log   local0 info		#修改
        log /dev/log   local0 notice	#修改
        #log loghost    local0 info
        maxconn 4096			#最大连接数,需考虑ulimit -n限制,推荐使用10240
--8行--注释,chroot运行路径,为该服务自设置的根目录,一般需将此行注释掉
        #chroot /usr/share/haproxy
        uid 99					#用户UID
        gid 99					#用户GID
        daemon					#守护进程模式
		nbproc 1				#添加,设置并发进程数,建议与当前服务器CPU核数相等或为其2倍

defaults   	#配置默认参数,这些参数可以被用到Listen,frontend,backend组件     
		log     global			#引入global定义的日志格式
        mode    http			#模式为http(7层代理http,4层代理tcp)
        option  httplog			#日志类别为http日志格式
        option  dontlognull		#不记录健康检查日志信息
        retries 3				#检查节点服务器失败次数,连续达到三次失败,则认为节点不可用
        redispatch				#当服务器负载很高时,自动结束当前队列处理比较久的连接
        maxconn 2000			#最大连接数,“defaults”中的值不能超过“global”段中的定义
        #contimeout 5000        #设置连接超时时间,默认单位是毫秒
        #clitimeout 50000       #设置客户端超时时间,默认单位是毫秒
        #srvtimeout 50000       #设置服务器超时时间,默认单位是毫秒
        timeout http-request 10s 	#默认http请求超时时间
        timeout queue 1m   		#默认队列超时时间
        timeout connect 10s		#默认连接超时时间,新版本中替代contimeout,该参数向后兼容
        timeout client 1m		#默认客户端超时时间,新版本中替代clitimeout,该参数向后兼容
        timeout server 1m		#默认服务器超时时间,新版本中替代srvtimeout,该参数向后兼容
        timeout http-keep-alive 10s		#默认持久连接超时时间
        timeout check 10s		#设置心跳检查超时时间


--删除下面所有listen项--,添加
listen  webcluster 0.0.0.0:80	#haproxy实例状态监控部分配置,定义一个名为webcluster的应用
        option httpchk GET /test.html	#检查服务器的test.html文件
        balance roundrobin				#负载均衡调度算法使用轮询算法roundrobin
        server inst1 192.168.77.27:80 check inter 2000 fall 3		#定义在线节点
        server inst2 192.168.77.28:80 check inter 2000 fall 3

 


4. Agregar el servicio del sistema haproxy

cp /opt/haproxy-1.5.19/examples/haproxy.init /etc/init.d/haproxy
chmod +x haproxy
chkconfig --add /etc/init.d/haproxy

ln -s /usr/local/sbin/haproxy /usr/sbin/haproxy
service haproxy start	或	/etc/init.d/haproxy start

 

 5. Implementación del servidor de nodo:

systemctl stop firewalld
setenforce 0

yum install -y pcre-devel zlib-devel gcc gcc-c++ make 

useradd -M -s /sbin/nologin nginx

cd /opt
tar zxvf nginx-1.22.0.tar.gz -C /opt/

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

make && make install

--192.168.77.27---
echo "this is kgc web" > /usr/local/nginx/html/test.html

--192.168.77.28---
echo "this is benet web" > /usr/local/nginx/html/test.html

ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

nginx      #启动nginx 服务

Otra operación es la misma que la anterior.

 --192.168.77.27---

  --192.168.77.28---

 6. Cree una conexión suave (los dos comandos son iguales)

 7. Inicie nginx

 8. Pruebe el clúster web

Abra http://192.168.77.26/test.html con un navegador en el cliente y actualice constantemente el navegador para probar el efecto de equilibrio de carga.

actualizar:

 

 8. Definición de registro (configurada en el servidor donde está instalado HAProxy)

vim /etc/haproxy/haproxy.cfg
global
	log /dev/log local0 info
	log /dev/log local0 notice

service haproxy restart   #重启服务

#需要修改rsyslog配置,为了便于管理。将haproxy相关的配置独立定义到haproxy.conf,并放到/etc/rsyslog.d/下,rsyslog启动时会自动加载此目录下的所有配置文件。
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
&~

#说明:
这部分配置是将haproxy的info日志记录到/var/log/haproxy/haproxy-info.log下,将notice日志记录到/var/log/haproxy/haproxy-notice.log下。“&~”表示当日志写入到日志文件后,rsyslog停止处理这个信息。

systemctl restart rsyslog.service

tail -f /var/log/haproxy/haproxy-info.log		#查看haproxy的访问请求日志信息

 Ver los registros divididos:

 El error reportado aquí es que necesitamos actualizar 192.168.77.26/test.html con el cliente:

Supongo que te gusta

Origin blog.csdn.net/ZWH9991/article/details/132422461
Recomendado
Clasificación