haproxy.cfg.in 1.97 KB
{% set server_check_path = parameter_dict['server-check-path'] -%}
global
  maxconn 4096
  stats socket {{ parameter_dict['socket-path'] }} level admin

defaults
  mode http
  retries 1
  option redispatch
  maxconn 2000
  cookie SERVERID rewrite
  balance roundrobin
  stats uri /haproxy
  stats realm Global\ statistics
  # it is useless to have timeout much bigger than the one of apache.
  # By default apache use 300s, so we set slightly more in order to
  # make sure that apache will first stop the connection.
  timeout server 305s
  # Stop waiting in queue for a zope to become available.
  # If no zope can be reached after one minute, consider the request will
  # never succeed.
  timeout queue 60s
  # The connection should be immediate on LAN,
  # so we should not set more than 5 seconds, and it could be already too much
  timeout connect 5s
  # As requested in haproxy doc, make this "at least equal to timeout server".
  timeout client 305s
  # Use "option httpclose" to not preserve client & server persistent connections
  # while handling every incoming request individually, dispatching them one after
  # another to servers, in HTTP close mode. This is really needed when haproxy
  # is configured with maxconn to 1, without this option browsers are unable
  # to render a page
  option httpclose

{% for name, (port, backend_list) in sorted(parameter_dict['backend-dict'].iteritems()) -%}
listen {{ name }}
  bind {{ parameter_dict['ip'] }}:{{ port }}
  http-request set-header X-Balancer-Current-Cookie SERVERID
{%   set has_webdav = [] -%}
{%   for address, connection_count, webdav in backend_list -%}
{%     if webdav %}{% do has_webdav.append(None) %}{% endif -%}
{%     set server_name = name ~ '-' ~ loop.index0 -%}
  server {{ server_name }} {{ address }} cookie {{ server_name }} check inter 3s rise 1 fall 2 maxqueue 5 maxconn {{ connection_count }}
{%   endfor -%}
{%-  if not has_webdav and server_check_path %}
  option httpchk GET {{ server_check_path }}
{%   endif -%}
{% endfor %}