Esempio di HAProxy
HAProxy è un servizio di bilanciamento del carico gratuito che viene eseguito in Linux. È molto potente e supporta funzionalità di monitoraggio pronte all'uso.
Per informazioni sulla configurazione, vedere:
HAProxy versione 2.0.28 - Manuale di configurazione per ThingWorx 9.4 e versioni precedenti.
HAProxy versione 2.7.9 - Manuale di configurazione per ThingWorx 9.5 e versioni successive.
Impostazioni globali
Le impostazioni globali vengono applicate nei server front-end e back-end e in genere possono essere ignorate.
Ad esempio:
#--------------------------------------------------------------------- #
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
Impostazioni di default
Queste impostazioni sono valide per le configurazioni di default dei server back-end.
log
Utilizzare la registrazione configurata nelle impostazioni globali.
mode
Determina la modalità di analisi delle richieste. In questo esempio viene utilizzata la gestione HTTP.
option
Ad esempio:
#---------------------------------------------------------------------
# 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
Impostazioni front-end
Si tratta del front-end attraverso il quale passano tutte le applicazioni. Contiene le regole di instradamento che determinano quale server back-end viene utilizzato per gestire la richiesta in entrata.
bind
Indica la porta su cui verranno ricevute le richieste in entrata.
capture
Include il cookie dell'ID di sessione nella registrazione della richiesta HTTP HAProxy.
acl
Crea una variabile in base alla condizione che viene controllata. Ad esempio, -i -m beg <string> controlla l'URI che inizia con <string>.
use_backend
In base al valore true o false delle variabili, instrada a un gruppo specifico di server back-end.
default
Il back-end utilizzato se non corrisponde alle altre regole.
Ad esempio:
#---------------------------------------------------------------------
# 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
Esempio per 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
Esempio per 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
Impostazioni della piattaforma back-end
Il back-end è un gruppo di server in grado di gestire le richieste passate dal front-end ed eventuali configurazioni specifiche.
balance
Algoritmo di bilanciamento del carico. Il valore di default effettua un round robin, che attraversa i server disponibili per la successiva connessione disponibile.
cookie
Inserisce un cookie utilizzato dal servizio di bilanciamento del carico per instradare le richieste future allo stesso server.
Ad esempio:
#---------------------------------------------------------------------
# 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
Impostazioni del server connessioni back-end
Esempio:
#---------------------------------------------------------------------
# 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
Impostazioni back-end di eMessage Connector
Esempio:
#---------------------------------------------------------------------
# BackEnd eMessage Connector Configuration
#---------------------------------------------------------------------
backend emessage
balance roundrobin
server emessage 10.0.10.21:443 check port 9009 check ssl verify none
Monitoraggio
HAProxy dispone di un'interfaccia utente di monitoraggio che può essere utilizzata per visualizzare il flusso di traffico. È possibile configurare la porta in arrivo e credenziali facoltative.
#---------------------------------------------------------------------
#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
Esempio 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
Configurazione di SSL/TLS per HAProxy
Per configurare SSL/TLS per HAProxy, vedere Configurazione di SSL/TLS per HAProxy.
È stato utile?