Exemple HAProxy
HAProxy est un équilibreur de charge libre qui s'exécute sous Linux. Très puissant, il prend en charge de base les fonctionnalités de surveillance.
Pour plus d'informations sur sa configuration, consultez les rubriques suivantes :
Paramètres globaux
Les paramètres globaux sont appliqués sur les serveurs front-end et back-end et peuvent généralement être ignorés.
Par exemple :
#--------------------------------------------------------------------- #
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
Paramètres par défaut
Ces paramètres sont destinés aux configurations par défaut des serveurs back-end.
• log
Utilisez la journalisation configurée dans les paramètres globaux.
• mode
Détermine le mode d'analyse des requêtes. Dans cet exemple, nous utilisons le mode http.
• option
Par exemple :
#---------------------------------------------------------------------
# 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
Paramètres front-end
Il s'agit du front-end par lequel toutes les applications vont passer. Il contient les règles de routage qui déterminent le serveur back-end utilisé pour gérer la requête entrante.
• bind
Indique le port de réception des requêtes entrantes.
• capture
Inclut le cookie d'ID de session dans la journalisation des requêtes http HAProxy.
• acl
Crée une variable basée sur la condition en cours de vérification. Par exemple, -i -m beg <string> vérifie l'URI commençant par <string>.
• use_backend
Selon la valeur "vrai" ou "faux" définie pour les variables, procède à un routage vers un groupe spécifique de serveurs back-end.
• default
Serveur back-end utilisé en cas de non correspondance aux autres règles.
Par exemple :
#---------------------------------------------------------------------
# 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
Exemple pour 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
Exemple pour l'eMessage Connector
#---------------------------------------------------------------------
# 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
Paramètres de la plateforme back-end
Le back-end est un groupe de serveurs pouvant gérer les requêtes transmises depuis le front-end et toute configuration spécifique.
• balance
Algorithme d'équilibrage de charge. La valeur par défaut est round-robin. L'algorithme consulte les serveurs disponibles jusqu'à trouver la prochaine connexion disponible.
• cookie
Insère un cookie utilisé par l'équilibreur de charge pour router les requêtes ultérieures vers le même serveur.
Par exemple :
#---------------------------------------------------------------------
# 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
Paramètres du serveur de connexion back-end
Exemple :
#---------------------------------------------------------------------
# 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
Paramètres de l'eMessage Connector back-end
Exemple :
#---------------------------------------------------------------------
# BackEnd eMessage Connector Configuration
#---------------------------------------------------------------------
backend emessage
balance roundrobin
server emessage 10.0.10.21:443 check port 9009 check ssl verify none
Surveillance
HAProxy possède une interface utilisateur de surveillance qui peut être utilisée pour afficher le flux de trafic. Vous pouvez configurer le port entrant et les informations d'identification facultatives.
#---------------------------------------------------------------------
#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
Exemple complet
#---------------------------------------------------------------------
# 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
Configuration de SSL/TLS pour HAProxy
Pour configurer SSL/TLS pour HAProxy, consultez la rubrique
Configuration de SSL/TLS pour HAProxy.