[Linux34-1] HAProxy (registro, algoritmo, acceso a una máquina local o backend especificada, lista negra, redirección, control de acceso, separación de lectura y escritura)

1. Introducción a HAProxy


Sitio web oficial de HAProxy: https://www.haproxy.org/

1.1 HAProxy


HAProxy proporciona alta disponibilidad, balanceo de carga y proxy basado en aplicaciones TCP y HTTP, y soporta hosts virtuales, es una solución gratuita, rápida y confiable. HAProxy es especialmente adecuado para sitios web con cargas pesadas, que generalmente requieren retención de sesión o procesamiento de siete capas. HAProxy se ejecuta en hardware actual y puede admitir por completo decenas de miles de conexiones simultáneas. Y su modo de funcionamiento hace que sea fácil y seguro integrarse en su arquitectura actual, mientras protege su servidor web de estar expuesto a la red.

  • instalación:yum install -y haproxy

1.2 Parámetros del archivo de configuración


  • global :Establecer parámetros de configuración global, que pertenecen a la configuración del proceso, generalmente relacionados con el sistema operativo
  • valores predeterminados :Configure los parámetros predeterminados, estos parámetros se pueden usar en componentes frontend, backend, Listen
  • interfaz :El nodo virtual de front-end que recibe la solicitud, Frontend puede especificar directamente el uso específico del backend backend más reglas
  • backend :La configuración del clúster de servicios de backend es un servidor real y un backend corresponde a uno o más servidores físicos.
  • Escuche :Combinación de frontend y backend

1.3 Descripción del archivo de configuración


global : configuración de parámetros globales

log 127.0.0.1 local2#指定日志设备
chroot      /var/lib/haproxy#jail 目录
pidfile     /var/run/haproxy.pid#定义haproxy的pid 
maxconn 4000#定义每个haproxy进程的最大连接数
#由于每个连接包括一个客户端和一个服务器端,所以单个进程的TCP会话最大数目将是该值的两倍。
user haproxy# 设置运行haproxy的用户,也可用uid 
group haproxy# 设置运行haproxy的组,也可用gid 
daemon# 以守护进程的方式运行
#nbproc 16# 设置haproxy启动时的进程数
stats socket /var/lib/haproxy/stats#

predeterminados : la definición de la parte predeterminada

mode        http#mode {http|tcp|health}
#http是七层模式,tcp是四层模式,health是健康检测,返回OK
log         global#应用全局的日志配置
option      httplog#http 日志格式
option      dontlognull  #禁用空链接日志
option http-server-close#每次请求完毕后主动关闭http通道
option forwardfor       except 127.0.0.0/8
option      redispatch  #当 client 连接到挂掉的机器时,重新分配到健康的主机
retries 3#连接后端服务器的失败重连次数,连接失败次数超过此值后将会将对应后端服务器标记为不可用
timeout http-request    10s#http请求超时时间
timeout queue           1m#一个请求在队列里的超时时间
timeout connect         10s#连接超时
timeout client          1m#客户端超时
timeout server          1m#服务器端超时
timeout http-keep-alive 10s#设置http-keep-alive的超时时间
timeout check           10s#检测超时
maxconn 3000#定义每个haproxy进程的最大连接数
stats uri /status#haproxy 监控页面
stats auth admin:westos#设置统计页面认证的用户和密码

interfaz : extremo frontal

frontend  main *:80#前端,监听的实例名称main、地址、端口
#定义一个名叫url_static的acl,匹配路径以下面几个开头的
    acl url_static       path_beg       -i /static /images /javascript /stylesheets
#定义一个名叫url_static的acl,当请求的url末尾是以.jpg.gif等结尾的,将会被匹配到
    acl url_static       path_end       -i .jpg .gif .png .css .js 
# 如果满足策略url_static时,就将请求交予backend static
    use_backend static          if url_static
#默认后端,名称为app
    default_backend             app

backend : backend

backend app#定义一个名为app的后端
    balance     roundrobin# 设置haproxy的调度算法
#使用server关键字来设置后端服务器
#后端服务内部名称为app1,app2
#后端服务器的IP和端口
#check接受健康监测
    server  app1 192.168.17.2:80 check
    server  app2 192.168.17.3:80 check

Explicación detallada de otros parámetros de configuración y su escritura de frases



2. Configuración del registro HAProxy


  1. vim /etc/rsyslog.conf: Edita el archivo de configuración del registro

$ModLoad imudp
$UDPServerRun 514#开启日志端口
*.info;mail.none;authpriv.none;cron.none;local.none     /var/log/messages
local2.*                                                /var/log/haproxy.log

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

  1. systemctl restart rsyslog.service: Reiniciar el servicio de registro
  2. systemctl start haproxy.service: Servicio haproxy abierto
  3. cat /var/log/haproxy.log

Inserte la descripción de la imagen aquí



3. Configure haproxy y configure el acceso cifrado


  1. vim /etc/haproxy/haproxy.cfg

    stats uri /status#设置统计页面的uri为/status
    stats auth admin:westos#设置统计页面认证的用户和密码
frontend  main *:80#前端名称为main,端口号为80
#    acl url_static       path_beg       -i /static /images /javascript /stylesheets
#    acl url_static       path_end       -i .jpg .gif .png .css .js
#
#    use_backend static          if url_static
    default_backend             app#默认后端,名称为app
backend app#后端
    balance     roundrobin#调度算法
    server  app1 192.168.17.2:80 check
    server  app2 192.168.17.3:80 check

Inserte la descripción de la imagen aquí

  1. Reinicie el servicio:systemctl restart haproxy.service
  2. netstat -antlupe: Puede ver que el número de puerto de haproxy es 80

Inserte la descripción de la imagen aquí

  • Prueba de acceso

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí



4. Programación del algoritmo de origen


La dirección de origen de la solicitud se divide en hash y se divide por el peso total del servidor back-end antes de enviarse a un servidor coincidente. Esto puede hacer que la solicitud de la misma IP de cliente siempre se envíe a un servidor específico. Sin embargo, cuando el servidor cuando los cambios de peso total, si un servidor va abajo o una nueva se añade servidor, muchas solicitudes de los clientes pueden ser enviados a un servidor diferente de la anterior solicitud. protocolo que se utiliza a menudo para el equilibrio de carga sin función de cookies una basada en TCP. Su valor por defecto es Estático, pero también puede usar el tipo hash para modificar esta función


  1. vim /etc/haproxy/haproxy.cfg

Inserte la descripción de la imagen aquí

  1. Reinicie el servicio:systemctl restart haproxy.service
  2. prueba

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

  1. Después del experimento, vuelva al algoritmo rr, programe la encuesta y reinicie el servicio.


5. Backend predeterminado y backend alternativo


  1. vim /etc/haproxy/haproxy.cfg

Inserte la descripción de la imagen aquí

  1. Reinicie el servicio:systemctl restart haproxy.service
  2. Cree un directorio de imágenes en el directorio de publicación del host del servidor2 back-end estático y pase una imagen

Inserte la descripción de la imagen aquí

  • Prueba 1 : visite http://192.168.17.1/status

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

  • Prueba 2 : visite http://192.168.17.1/images

Inserte la descripción de la imagen aquí



6. Servidor de respaldo


  1. vim /etc/haproxy/haproxy.cfg

Inserte la descripción de la imagen aquí

  1. vim /etc/httpd/conf/httpd.conf: Modifique el número de puerto de Apache a 8080 y habilite httpd

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

  1. Reinicie el servicio:systemctl restart haproxy.service

  • Prueba : cuando el servidor back-end predeterminado server3 está inactivo, se accede automáticamente a la máquina con éxito

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí



7. Lista negra y lista blanca


1 lista negra

  1. vim /etc/haproxy/haproxy.cfg

Inserte la descripción de la imagen aquí

  1. Reinicie el servicio:systemctl restart haproxy.service

  • Prueba : use el host en la lista negra para acceder a 192.168.17.1 y el acceso falla. ¡Pero normalmente se puede acceder a otros hosts!

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

2 Lista blanca : configure solo el host de la lista negra para poder acceder a la lista blanca

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

3 Configure la lista negra para todo el segmento de red

#一个网段不能访问
acl blacklist src 192.168.17.0/24
block if blacklist


8. Redirigir


8.1 Redirigir después de un error


  1. vim /etc/haproxy/haproxy.cfg

acl blacklist src 192.168.17.250
block if blacklist
errorloc 403 http://www.baidu.com

Inserte la descripción de la imagen aquí

  1. Reinicie el servicio:systemctl restart haproxy.service

  • prueba

Inserte la descripción de la imagen aquí

8.2 Redireccionamiento directo


  1. vim /etc/haproxy/haproxy.cfg

#全局重定向
redirect location http://www.westos.org
#仅黑名单重定向
redirect location http://www.westos.org if blacklist

Inserte la descripción de la imagen aquí


  1. Reinicie el servicio:systemctl restart haproxy.service

  • prueba

Inserte la descripción de la imagen aquí



9. Control de acceso


  1. vim /etc/haproxy/haproxy.cfg

acl list src 192.168.17.250
acl denyjpg path /images/wsx.png
http-request deny if denyjpg list

Inserte la descripción de la imagen aquí

  1. Reinicie el servicio:systemctl restart haproxy.service

  • prueba

Inserte la descripción de la imagen aquí



10. Separación de lectura y escritura


10.1 Configuración del host HAProxy

  1. vim /etc/haproxy/haproxy.cfg

acl write method PUT
acl write method POST#(HEAD为读)
use_backend static          if write

Inserte la descripción de la imagen aquí

  1. Reinicie el servicio:systemctl restart haproxy.service

10.2 Leer la configuración del host back-end de llamadas


servidor3

  1. yum install -y php
  2. systemctl restart httpd.service
  3. Hay una carga de directorio y dos archivos php en el directorio de publicación predeterminado de server3
  4. chmod 777 /var/www/html/upload/
  5. scp upload_file.php [email protected]:/var/www/html/: Pasa el archivo php al backend de lectura

Inserte la descripción de la imagen aquí

  • Prueba : visite http://192.168.17.1/index.php, pero no puede cargar imágenes .ipg

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

10.3 Configuración del host backend para la llamada de escritura


  1. yum install -y php
  2. systemctl restart httpd.service

Inserte la descripción de la imagen aquí

  • Prueba : visite http://192.168.17.1/index.php, cargue la imagen .jpg correctamente.

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/weixin_46069582/article/details/112645230
Recomendado
Clasificación