Ejemplo de HAProxy
HAProxy es un equilibrador de la carga gratuito que se ejecuta en Linux. Es muy eficaz y soporta funciones de supervisión de fábrica.
Para obtener información sobre su configuración, consulte:
Configuración global
La configuración global se aplica a todos los servidores front-end y back-end, y se puede desestimar.
Por ejemplo:
#--------------------------------------------------------------------- #
Global settings
#---------------------------------------------------------------------
global
# setup logging and force level to debug. Logs require rsyslog be setup.
chroot /var/lib/haproxy
log /dev/log local0 debug
# maximum number of connections allowed
maxconn 10000
# turn on stats unix socket
stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
stats timeout 30s
# user and group haproxy will run as
user haproxy
group haproxy
Configuración por defecto
Esta configuración se utiliza para las configuraciones por defecto de los servidores back-end.
• log
Utilice el registro configurado en Configuración global.
• mode
Permite determinar cómo se analizan las solicitudes. En este ejemplo, se utiliza la gestión de http.
• option
Por ejemplo:
#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
default-server init-addr last,libc,none
log global
mode http
option httplog
option redispatch
option forwardfor
timeout connect 10s
timeout client 60s
timeout server 60s
timeout tunnel 1h
Configuración de front-end
Este es el front-end a través del que pasarán todas las aplicaciones. Contiene las reglas de distribución que determinan qué servidor back-end se utiliza para gestionar la solicitud entrante.
• bind
Indica el puerto en el que se recibirán las solicitudes entrantes.
• capture
Incluye la cookie de ID de sesión en el registro de solicitudes HTTP de HAProxy.
• acl
Permite crear una variable en función de la condición que se está verificando. Por ejemplo, -i -m beg <string> permite comprobar el URI comenzando por <string>.
• use_backend
En función del valor verdadero o falso de las variables, se enruta a un grupo específico de servidores back-end.
• default
El back-end que se utiliza si no coincide con las otras reglas.
Por ejemplo:
#---------------------------------------------------------------------
# FrontEnd Configuration
#---------------------------------------------------------------------
frontend ft_web
bind *:8080 name web
# log the session cookie if passed
capture cookie JSESSIONID= len 32
## path based routing to connection server
acl path_cxserver path -i -m beg /Thingworx/WS
acl path_tunnelserver path -i -m beg /Thingworx/WSTunnelServer
acl path_tunnelclient path -i -m beg /Thingworx/WSTunnelClient
use_backend cxserver if path_cxserver or path_tunnelserver or path_tunnelclient
# default traffic to platform
default_backend platform
Ejemplo de ThingWorx Flow
#---------------------------------------------------------------------
# FrontEnd Configuration
#---------------------------------------------------------------------
frontend ft_web
bind *:8443 ssl crt /certs/haproxy.pem name sslweb
# log the session cookie if passed
capture cookie JSESSIONID= len 32
##path based routing to ThingWorx Flow
acl p_flow1 path -i -m beg /Thingworx/Composer/apps/flow
acl p_flow2 path -i -m beg /Thingworx/Flow
acl p_flow3 path -i -m beg /Thingworx/Triggers
acl p_flow4 path -i -m beg /Thingworx/Lookups
acl p_flow5 path -i -m beg /Thingworx/Oauths
acl p_flow6 path -i -m beg /Thingworx/Subsystems/EventProcessingSubsystem/Subscriptions
acl p_flow7 path -i -m beg /enterprise/v1/fetchconfig
use_backend flow if p_flow1 or p_flow2 or p_flow3 or p_flow4 or p_flow5 or p_flow6 or p_flow7
Ejemplo de conector de eMessage
#---------------------------------------------------------------------
# FrontEnd Configuration
#---------------------------------------------------------------------
frontend ft_web
bind *:8443 ssl crt /certs/haproxy.pem name sslweb
# log the session cookie if passed
capture cookie JSESSIONID= len 32
#path based routing to eMessage connector
acl emsg path_beg /eMessage /lwPing /upload /download
use_backend emessage if emsg
default_backend platform
Configuración de la plataforma back-end
El back-end es un grupo de servidores que pueden gestionar las solicitudes que se transmiten desde el front-end y cualquier configuración específica.
• balance
Algoritmo de equilibrio de la carga. El valor por defecto es de tipo Round Robin, que recorre los servidores disponibles para la siguiente conexión disponible.
• cookie
Se inserta una cookie utilizada por el equilibrador de la carga para distribuir las solicitudes futuras al mismo servidor.
Por ejemplo:
#---------------------------------------------------------------------
# BackEnd Platform Configuration
#---------------------------------------------------------------------
backend platform
balance roundrobin
# sticky sessions
cookie SERVER insert indirect nocache
http-request set-header X-Forwarded-Port %[dst_port]
http-request add-header X-Forwarded-Proto https if { ssl_fc }
# health check
option httpchk GET /Thingworx/health
# configure platform instances
server platform1 10.0.10.10:8080 check inter 1000 fastinter 1000 cookie twx1
server platform2 10.0.10.11:8080 check inter 1000 fastinter 1000 cookie twx2
Configuración de Connection Server back-end
Ejemplo:
#---------------------------------------------------------------------
# BackEnd Connection Server Configuration
#---------------------------------------------------------------------
backend cxserver
balance source
#hash-type consistent
option httpchk GET /
# configure connection server instances
server cxserver1 10.0.10.20:8080 check port 9009
server cxserver2 10.0.10.21:8080 check port 9009
Configuración del back-end del conector de eMessage
Ejemplo:
#---------------------------------------------------------------------
# BackEnd eMessage Connector Configuration
#---------------------------------------------------------------------
backend emessage
balance roundrobin
server emessage 10.0.10.21:443 check port 9009 check ssl verify none
Supervisión
HAProxy tiene una interfaz de usuario de supervisión que se puede utilizar para ver el flujo de tráfico. Es posible configurar el puerto de entrada y las credenciales opcionales.
#---------------------------------------------------------------------
#HAProxy Monitoring Config
#---------------------------------------------------------------------
listen stats
bind *:1936
mode http
option forwardfor
option httpclose
stats enable
stats uri /
stats refresh 5s
stats show-legends
stats realm Haproxy\ Statistics
Ejemplo completo
#---------------------------------------------------------------------
# Global settings
#---------------------------------------------------------------------
global
# setup logging and force level to debug. Logs require rsyslog be setup.
chroot /var/lib/haproxy
log /dev/log local0 debug
# maximum number of connections allowed
maxconn 10000
# turn on stats unix socket
stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
stats timeout 30s
# user and group haproxy will run as
user haproxy
group haproxy
#---------------------------------------------------------------------
# common defaults that all the 'listen' and 'backend' sections will
# use if not designated in their block
#---------------------------------------------------------------------
defaults
default-server init-addr last,libc,none
log global
mode http
option httplog
option redispatch
option forwardfor
timeout connect 10s
timeout client 60s
timeout server 60s
timeout tunnel 1h
#---------------------------------------------------------------------
# FrontEnd Configuration
#---------------------------------------------------------------------
frontend ft_web
bind *:8080 name web
# log the session cookie if passed
capture cookie JSESSIONID= len 32
## path based routing to connection server
acl path_cxserver path -i -m beg /Thingworx/WS
acl path_tunnelserver path -i -m beg /Thingworx/WSTunnelServer
acl path_tunnelclient path -i -m beg /Thingworx/WSTunnelClient
use_backend cxserver if path_cxserver or path_tunnelserver or path_tunnelclient
##path based routing to eMessage connector
acl emsg path_beg /eMessage /lwPing /upload /download
use_backend emessage if emsg
# default traffic to platform
default_backend platform
#---------------------------------------------------------------------
# BackEnd Platform Configuration
#---------------------------------------------------------------------
backend platform
balance roundrobin
# sticky sessions
cookie SERVER insert indirect nocache
http-request set-header X-Forwarded-Port %[dst_port]
http-request add-header X-Forwarded-Proto https if { ssl_fc }
# health check
option httpchk GET /Thingworx/health
# configure platform instances
server platform1 10.0.10.10:8080 check inter 1000 fastinter 1000" cookie twx1
server platform2 10.0.10.11:8080 check inter 1000 fastinter 1000" cookie twx2
#---------------------------------------------------------------------
# BackEnd Connection Server Configuration
#---------------------------------------------------------------------
backend cxserver
balance source
#hash-type consistent
option httpchk GET /
# configure connection server instances
server cxserver1 10.0.10.20:8080 check port 9009
server cxserver2 10.0.10.21:8080 check port 9009
#---------------------------------------------------------------------
# BackEnd eMessage Connector Configuration
#---------------------------------------------------------------------
backend emessage
balance roundrobin
server emessage 10.0.10.21:443 check port 9009 check ssl verify none#
#---------------------------------------------------------------------
#HAProxy Monitoring Config
#---------------------------------------------------------------------
listen stats
bind *:1936
mode http
option forwardfor
option httpclose
stats enable
stats uri /
stats refresh 5s
stats show-legends
stats realm Haproxy\ Statistics
Configuración de SSL o TLS para HAProxy
Para configurar SSL/TLS para HAProxy, consulte
Configuración de SSL/TLS para HAProxy.