Ansible playbook that provisions a group of servers to run HAProxy with a shared hosting IP from keepalived.
Find a file
2021-09-25 08:41:14 -06:00
roles/haproxy Adding variable for managing firewall ports 2021-09-25 08:41:14 -06:00
haproxy.yml Initial commit 2021-09-23 09:54:34 -06:00
hosts.yml Initial commit 2021-09-23 09:54:34 -06:00
LICENSE Initial commit 2021-09-23 09:52:51 -06:00
README.md Adding variable for managing firewall ports 2021-09-25 08:41:14 -06:00
site.yml Initial commit 2021-09-23 09:54:34 -06:00

Ansible-HAProxy-Failover

Ansible playbook that provisions a group of servers to run HAProxy with a shared hosting IP from kepalived.

Variables

Variable Required Default Choices Description
haproxy_bind_adapter Yes eth0 Interface to use for the Shared IP
haproxy_config_file Yes example.haproxy.cfg.j2 File name to use for the haproxy config file
haproxy_keepalived_adapter Yes eth0 Interface to use for the keepalived communication
haproxy_keepalived_adapter_vlan No When specified, this will setup the given vlan and use that for the keepalived communication to keep the traffic out of the primary network
haproxy_keepalived_ip Yes 172.16.10.1/24 IP to use for the keepalived communication
haproxy_keepalived_process_weight Yes 10 Weight used for tracking the haproxy process on the server
haproxy_shared_ip Yes Shared IP that will be used by the group
haproxy_shared_ip_subnet Yes /24 Subnet for the shared IP
haproxy_shared_priority Yes 100 Keepalived priority for the host - this will
haproxy_shared_state Yes MASTER MASTER/BACKUP What state the keepalived configuration will start with for the desired host - After config starts it will determine if other members exist and adjust based on priority
haproxy_shared_virtual_router_id Yes 25 Virtual Router ID for the keepalived configuration - This should be the same for the group
haproxy_listen_ports Yes 22/tcp, 80/tcp, 443/tcp, 9999/tcp The firewall ports/protocols that should be opened on the firewall

Example

Execute playbook with needed variables

ansible-playbook -i hosts site.yml --ask-pass --ask-become-pass

Inventory File:

---
# file: hosts

haproxy:
  hosts:
    dev-ha01:
      ansible_host: 10.1.1.3
      haproxy_shared_state: MASTER
      haproxy_shared_priority: 101
      haproxy_bind_adapter: "eth0"
      haproxy_keepalived_adapter: "eth0"
      haproxy_keepalived_adapter_vlan: "100"
      haproxy_keepalived_ip: 172.16.10.1/24
    
    dev-ha02:
      ansible_host: 10.1.1.4
      haproxy_shared_state: BACKUP
      haproxy_shared_priority: 100
      haproxy_bind_adapter: "eth0"
      haproxy_keepalived_adapter: "eth0"
      haproxy_keepalived_adapter_vlan: "100"
      haproxy_keepalived_ip: 172.16.10.2/24

    dev-ha03:
      ansible_host: 10.1.1.5
      haproxy_shared_state: BACKUP
      haproxy_shared_priority: 99
      haproxy_bind_adapter: "eth0"
      haproxy_keepalived_adapter: "eth0"
      haproxy_keepalived_adapter_vlan: "100"
      haproxy_keepalived_ip: 172.16.10.3/24

  vars:
    haproxy_shared_ip: "10.10.2.60"
    haproxy_shared_ip_subnet: "/24"
    haproxy_shared_virtual_router_id: 25
    

License

See LICENSE file for full license information.