Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adding variable and corresponding code for diverting percentage of requests which coming to a slave towards the master #530

Closed
wants to merge 3 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 30 additions & 0 deletions roles/confd/templates/haproxy.tmpl.j2
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,9 @@ listen master
bind {{ hostvars[inventory_hostname]['inventory_hostname'] }}:{{ haproxy_listen_port.master }}
{% endif %}
maxconn {{ haproxy_maxconn.master }}
default_backend master_backend

backend master_backend
option tcplog
option httpchk OPTIONS /primary
http-check expect status 200
Expand All @@ -53,6 +56,15 @@ listen replicas
bind {{ hostvars[inventory_hostname]['inventory_hostname'] }}:{{ haproxy_listen_port.replicas }}
{% endif %}
maxconn {{ haproxy_maxconn.replica }}
{% if haproxy_divert_to_master is defined and haproxy_divert_to_master > 0 and haproxy_divert_to_master < 100 %}
acl divert_to_master rand(100) lt {{ haproxy_divert_to_master }}
{% endif %}
default_backend replicas_backend
{% if haproxy_divert_to_master is defined and haproxy_divert_to_master > 0 and haproxy_divert_to_master < 100 %}
use_backend master_backend if divert_to_master
{% endif %}

backend replicas_backend
option tcplog
option httpchk OPTIONS /replica
balance roundrobin
Expand All @@ -75,6 +87,15 @@ listen replicas_sync
bind {{ hostvars[inventory_hostname]['inventory_hostname'] }}:{{ haproxy_listen_port.replicas_sync }}
{% endif %}
maxconn {{ haproxy_maxconn.replica }}
{% if haproxy_divert_to_master is defined and haproxy_divert_to_master > 0 and haproxy_divert_to_master < 100 %}
acl divert_to_master rand(100) lt {{ haproxy_divert_to_master }}
{% endif %}
default_backend replicas_sync_backend
{% if haproxy_divert_to_master is defined and haproxy_divert_to_master > 0 and haproxy_divert_to_master < 100 %}
use_backend master_backend if divert_to_master
{% endif %}

backend replicas_sync_backend
option tcplog
option httpchk OPTIONS /sync
balance roundrobin
Expand All @@ -97,6 +118,15 @@ listen replicas_async
bind {{ hostvars[inventory_hostname]['inventory_hostname'] }}:{{ haproxy_listen_port.replicas_async }}
{% endif %}
maxconn {{ haproxy_maxconn.replica }}
{% if haproxy_divert_to_master is defined and haproxy_divert_to_master > 0 and haproxy_divert_to_master < 100 %}
acl divert_to_master rand(100) lt {{ haproxy_divert_to_master }}
{% endif %}
default_backend replicas_async_backend
{% if haproxy_divert_to_master is defined and haproxy_divert_to_master > 0 and haproxy_divert_to_master < 100 %}
use_backend master_backend if divert_to_master
{% endif %}

backend replicas_async_backend
option tcplog
option httpchk OPTIONS /async
balance roundrobin
Expand Down
30 changes: 30 additions & 0 deletions roles/haproxy/templates/haproxy.cfg.j2
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,9 @@ listen master
bind {{ hostvars[inventory_hostname]['inventory_hostname'] }}:{{ haproxy_listen_port.master }}
{% endif %}
maxconn {{ haproxy_maxconn.master }}
default_backend master_backend

backend master_backend
option tcplog
option httpchk OPTIONS /primary
http-check expect status 200
Expand All @@ -54,6 +57,15 @@ listen replicas
bind {{ hostvars[inventory_hostname]['inventory_hostname'] }}:{{ haproxy_listen_port.replicas }}
{% endif %}
maxconn {{ haproxy_maxconn.replica }}
{% if haproxy_divert_to_master is defined and haproxy_divert_to_master > 0 and haproxy_divert_to_master < 100 %}
acl divert_to_master rand(100) lt {{ haproxy_divert_to_master }}
{% endif %}
default_backend replicas_backend
{% if haproxy_divert_to_master is defined and haproxy_divert_to_master > 0 and haproxy_divert_to_master < 100 %}
use_backend master_backend if divert_to_master
{% endif %}

backend replicas_backend
option tcplog
option httpchk OPTIONS /replica
balance roundrobin
Expand All @@ -77,6 +89,15 @@ listen replicas_sync
bind {{ hostvars[inventory_hostname]['inventory_hostname'] }}:{{ haproxy_listen_port.replicas_sync }}
{% endif %}
maxconn {{ haproxy_maxconn.replica }}
{% if haproxy_divert_to_master is defined and haproxy_divert_to_master > 0 and haproxy_divert_to_master < 100 %}
acl divert_to_master rand(100) lt {{ haproxy_divert_to_master }}
{% endif %}
default_backend replicas_sync_backend
{% if haproxy_divert_to_master is defined and haproxy_divert_to_master > 0 and haproxy_divert_to_master < 100 %}
use_backend master_backend if divert_to_master
{% endif %}

backend replicas_sync_backend
option tcplog
option httpchk OPTIONS /sync
balance roundrobin
Expand All @@ -100,6 +121,15 @@ listen replicas_async
bind {{ hostvars[inventory_hostname]['inventory_hostname'] }}:{{ haproxy_listen_port.replicas_async }}
{% endif %}
maxconn {{ haproxy_maxconn.replica }}
{% if haproxy_divert_to_master is defined and haproxy_divert_to_master > 0 and haproxy_divert_to_master < 100 %}
acl divert_to_master rand(100) lt {{ haproxy_divert_to_master }}
{% endif %}
default_backend replicas_async_backend
{% if haproxy_divert_to_master is defined and haproxy_divert_to_master > 0 and haproxy_divert_to_master < 100 %}
use_backend master_backend if divert_to_master
{% endif %}

backend replicas_async_backend
option tcplog
option httpchk OPTIONS /async
balance roundrobin
Expand Down
1 change: 1 addition & 0 deletions vars/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ haproxy_maxconn:
haproxy_timeout:
client: "60m"
server: "60m"
haproxy_divert_to_master: 0 # diverting percentage (from 0 to 99) of requests which coming to a slave towards the master

# keepalived (if 'cluster_vip' is specified and 'with_haproxy_load_balancing' is 'true')
keepalived_virtual_router_id: "{{ cluster_vip.split('.')[3] | int }}" # The last octet of 'cluster_vip' IP address is used by default.
Expand Down