# Ansible-HAProxy-Failover Ansible playbook that provisions a group of servers to run HAProxy with a shared hosting IP from keepalived. ## 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_listen_ports | Yes | 22/tcp, 80/tcp, 443/tcp, 9999/tcp | | The firewall ports/protocols that should be opened on the firewall | | 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_password | No | | | Optional password that should be used for the keepalived authentication | | 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 | ## Example Execute playbook with needed variables `ansible-playbook -i hosts site.yml --ask-pass --ask-become-pass` Inventory File: ```yaml --- # 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.