HAProxy is a very fast and reliable solution offering high availability, load balancing, and proxying for TCP and HTTP-based applications. It is particularly suited for web sites crawling under very high loads while needing persistence or Layer 7 processing. Supporting tens of thousands of connections is clearly realistic with today’s hardware.
For installing HAproxy on your nodes, you should consider its official documentation. Also, you have to consider that this service should not be a single point of failure, so you need at least two nodes running HAproxy.
Here is an example for HAproxy configuration file:
global chroot /var/lib/haproxy daemon group haproxy maxconn 4000 pidfile /var/run/haproxy.pid user haproxy defaults log global maxconn 8000 option redispatch retries 3 timeout http-request 10s timeout queue 1m timeout connect 10s timeout client 1m timeout server 1m timeout check 10s listen dashboard_cluster bind <Virtual IP>:443 balance source option tcpka option httpchk option tcplog server controller1 10.0.0.1:443 check inter 2000 rise 2 fall 5 server controller2 10.0.0.2:443 check inter 2000 rise 2 fall 5 listen galera_cluster bind <Virtual IP>:3306 balance source option httpchk server controller1 10.0.0.4:3306 check port 9200 inter 2000 rise 2 fall 5 server controller2 10.0.0.5:3306 check port 9200 inter 2000 rise 2 fall 5 server controller3 10.0.0.6:3306 check port 9200 inter 2000 rise 2 fall 5 listen glance_api_cluster bind <Virtual IP>:9292 balance source option tcpka option httpchk option tcplog server controller1 10.0.0.1:9292 check inter 2000 rise 2 fall 5 server controller2 10.0.0.2:9292 check inter 2000 rise 2 fall 5 listen glance_registry_cluster bind <Virtual IP>:9191 balance source option tcpka option tcplog server controller1 10.0.0.1:9191 check inter 2000 rise 2 fall 5 server controller2 10.0.0.2:9191 check inter 2000 rise 2 fall 5 listen keystone_admin_cluster bind <Virtual IP>:35357 balance source option tcpka option httpchk option tcplog server controller1 10.0.0.1:35357 check inter 2000 rise 2 fall 5 server controller2 10.0.0.2.42:35357 check inter 2000 rise 2 fall 5 listen keystone_public_internal_cluster bind <Virtual IP>:5000 balance source option tcpka option httpchk option tcplog server controller1 10.0.0.1:5000 check inter 2000 rise 2 fall 5 server controller2 10.0.0.2:5000 check inter 2000 rise 2 fall 5 listen nova_ec2_api_cluster bind <Virtual IP>:8773 balance source option tcpka option tcplog server controller1 10.0.0.1:8773 check inter 2000 rise 2 fall 5 server controller2 10.0.0.2:8773 check inter 2000 rise 2 fall 5 listen nova_compute_api_cluster bind <Virtual IP>:8774 balance source option tcpka option httpchk option tcplog server controller1 10.0.0.1:8774 check inter 2000 rise 2 fall 5 server controller2 10.0.0.2:8774 check inter 2000 rise 2 fall 5 listen nova_metadata_api_cluster bind <Virtual IP>:8775 balance source option tcpka option tcplog server controller1 10.0.0.1:8775 check inter 2000 rise 2 fall 5 server controller2 10.0.0.2:8775 check inter 2000 rise 2 fall 5 listen cinder_api_cluster bind <Virtual IP>:8776 balance source option tcpka option httpchk option tcplog server controller1 10.0.0.1:8776 check inter 2000 rise 2 fall 5 server controller2 10.0.0.2:8776 check inter 2000 rise 2 fall 5 listen ceilometer_api_cluster bind <Virtual IP>:8777 balance source option tcpka option httpchk option tcplog server controller1 10.0.0.1:8774 check inter 2000 rise 2 fall 5 server controller2 10.0.0.2:8774 check inter 2000 rise 2 fall 5 listen spice_cluster bind <Virtual IP>:6082 balance source option tcpka option tcplog server controller1 10.0.0.1:6080 check inter 2000 rise 2 fall 5 server controller2 10.0.0.2:6080 check inter 2000 rise 2 fall 5 listen neutron_api_cluster bind <Virtual IP>:9696 balance source option tcpka option httpchk option tcplog server controller1 10.0.0.1:9696 check inter 2000 rise 2 fall 5 server controller2 10.0.0.2:9696 check inter 2000 rise 2 fall 5 listen swift_proxy_cluster bind <Virtual IP>:8080 balance source option tcplog option tcpka server controller1 10.0.0.1:8080 check inter 2000 rise 2 fall 5 server controller2 10.0.0.2:8080 check inter 2000 rise 2 fall 5
After each change of this file, you should restart HAproxy.