Consider a requirement where you want to implement both high availability and url mapping.
Here you want your service to be exposed as yourserver.com/yourservice however actual service is running in your DMZ in yourserver:8280/yourservice (i.e with a port). And also you want to implement higha vailability by maintaining a standby node (yourserver-standby:8280/yourservice). Following text describes how to achive this using HAProxy.
HAproxy is a lightweight open source proxy/load balancer which you can easily configure for your needs. Described below are the minimal steps required to implement a scenario like above.
Install HAproxy.
sudo apt-get install haproxy
sudo apt-get install haproxy
Enable HAproxy.
Open /etc/default/haproxy file and set the ENABLED value to 1.
ENABLED=1
Configure HAproxy.
Open /etc/haproxy/haproxy.cfg file and add the following configuration at the bottom.
frontend haproxyfrontend
# replace XXX.XXX.XXX.XXX with the ip address of haproxy
bind XXX.XXX.XXX.XXX:80
option http-server-close
acl url_esbapi path_beg /myapi
use_backend esb-backend if url_esbapi
backend esb-backend
reqrep ^([^\ :]*)\ /myapi/(.*) \1\ /\2
#replace xxx.xxx.xxx.xxx with your actual backend server ip addresses.
server esb-1 xxx.xxx.xxx.xx1:8280 check
server esb-2 xxx.xxx.xxx.xx2:8280 backup check
listen stats :1936
stats enable
stats scope esb-backend
stats uri /
stats realm Haproxy\ Statistics
stats auth admin:admin
Start the HAproxy
sudo service haproxy start {stop, restart, status}
Definitions of the configs
Frontend named "haproxyfrontend", is use to handle incoming traffic, and it is bind/listen to port 80.
acl url_esbapi path_beg /myapi
use_backend esb-backend if url_esbapi
Any request comes to path begins with "/myapi" would map to esb-backend, esb-backend configs are defined under backend esb-backend.
server esb-2 xxx.xxx.xxx.xx2:8280 backup check
This says that esb-2 server is a loadbalance member and 'backup' says that this act as the passive node.
config under listen stats :1936 defines how HAproxy status is defined. This is optional, however by enabling this you will be able to see the status of nodes in localhost(or ip of haproxy):1936 as follows
No comments:
Post a Comment