Directorio de artículos
- 1. Introducción a HAProxy
- 2. Configuración del registro HAProxy
- 3. Configure haproxy y configure el acceso cifrado
- 4. Programación del algoritmo de origen
- 5. Backend predeterminado y backend alternativo
- 6. Servidor de respaldo
- 7. Lista negra y lista blanca
- 8. Redirigir
- 9. Control de acceso
- 10. 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
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
systemctl restart rsyslog.service
: Reiniciar el servicio de registrosystemctl start haproxy.service
: Servicio haproxy abiertocat /var/log/haproxy.log
3. Configure haproxy y configure el acceso cifrado
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
- Reinicie el servicio:
systemctl restart haproxy.service
netstat -antlupe
: Puede ver que el número de puerto de haproxy es 80
- Prueba de acceso
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
vim /etc/haproxy/haproxy.cfg
- Reinicie el servicio:
systemctl restart haproxy.service
- prueba
- Después del experimento, vuelva al algoritmo rr, programe la encuesta y reinicie el servicio.
5. Backend predeterminado y backend alternativo
vim /etc/haproxy/haproxy.cfg
- Reinicie el servicio:
systemctl restart haproxy.service
- Cree un directorio de imágenes en el directorio de publicación del host del servidor2 back-end estático y pase una imagen
- Prueba 1 : visite http://192.168.17.1/status
- Prueba 2 : visite http://192.168.17.1/images
6. Servidor de respaldo
vim /etc/haproxy/haproxy.cfg
vim /etc/httpd/conf/httpd.conf
: Modifique el número de puerto de Apache a 8080 y habilite httpd
- 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
7. Lista negra y lista blanca
1 lista negra
vim /etc/haproxy/haproxy.cfg
- 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!
2 Lista blanca : configure solo el host de la lista negra para poder acceder a la lista blanca
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
vim /etc/haproxy/haproxy.cfg
acl blacklist src 192.168.17.250
block if blacklist
errorloc 403 http://www.baidu.com
- Reinicie el servicio:
systemctl restart haproxy.service
- prueba
8.2 Redireccionamiento directo
vim /etc/haproxy/haproxy.cfg
#全局重定向
redirect location http://www.westos.org
#仅黑名单重定向
redirect location http://www.westos.org if blacklist
- Reinicie el servicio:
systemctl restart haproxy.service
- prueba
9. Control de acceso
vim /etc/haproxy/haproxy.cfg
acl list src 192.168.17.250
acl denyjpg path /images/wsx.png
http-request deny if denyjpg list
- Reinicie el servicio:
systemctl restart haproxy.service
- prueba
10. Separación de lectura y escritura
10.1 Configuración del host HAProxy
vim /etc/haproxy/haproxy.cfg
acl write method PUT
acl write method POST#(HEAD为读)
use_backend static if write
- Reinicie el servicio:
systemctl restart haproxy.service
10.2 Leer la configuración del host back-end de llamadas
servidor3
yum install -y php
systemctl restart httpd.service
- Hay una carga de directorio y dos archivos php en el directorio de publicación predeterminado de server3
chmod 777 /var/www/html/upload/
scp upload_file.php [email protected]:/var/www/html/
: Pasa el archivo php al backend de lectura
- Prueba : visite http://192.168.17.1/index.php, pero no puede cargar imágenes .ipg
10.3 Configuración del host backend para la llamada de escritura
yum install -y php
systemctl restart httpd.service
- Prueba : visite http://192.168.17.1/index.php, cargue la imagen .jpg correctamente.