a239b29baf
This commit uses a keepalived role, available in ansible galaxy, to configure keepalived for haproxy Keepalived makes the haproxy truely HA, by having haproxy's VIP highly available between the hosts defined in the inventory. The keepalived role configuration is fully documented on the upstream role. To configure keepalived on your host, you only have to give it a variable (dict). A template handles the generation of the configuration of keepalived. By default, the variable files defined in vars/configs/ are enough to have a keepalived working for haproxy, with a master-backup configuration. You can define other variable files by setting haproxy_keepalived_(master|backup)_vars in your user_variables. This should point to a "variable template" file like the one you can find in vars/configs/* The haproxy playbook has been changed to rely on the dynamic generation script. It will use the env.d to have haproxy hosts. The first host from the generated inventory will be considered as master, while the others are slaves. The keepalived role will only run if more than haproxy host is found in the inventory. This behaviour can be changed and keepalived can be disabled by the variable: haproxy_use_keepalived. The implemented variables are the following: * haproxy_keepalived_(ext|int)ernal_vip_cidr * haproxy_keepalived_(ext|int)ernal_interface * haproxy_keepalived_(ext|int)ernal_virtual_router_id * haproxy_keepalived_priority_backup * haproxy_keepalived_priority_master * haproxy_keepalived_vars_file In these variables, only the following variables are necessary: keepalived_(ext|int)ernal_vip_cidr However, it's recommended to also configure the keepalived_(ext|int)ernal_interface (to know which interface the vips can bind on) Closes-Bug: 1414397 Change-Id: Ib87a3bb70d6f4b7ac9356e8a28fe4b5936eb9334
91 lines
4.1 KiB
YAML
91 lines
4.1 KiB
YAML
---
|
|
# Copyright 2015, Jean-Philippe Evrard <jean-philippe@evrard.me>
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
keepalived_global_sync_groups:
|
|
haproxy:
|
|
instances:
|
|
- external
|
|
- internal
|
|
notify_script: /etc/keepalived/haproxy_notify.sh
|
|
##if a src_*_script is defined, it will be uploaded from src_*_script on the deploy host to the *_script location. Make sure *_script is a location in that case.
|
|
#src_notify_script: /opt/os-ansible-deployment/playbooks/vars/configs/keepalived_haproxy_notifications.sh
|
|
src_notify_script: vars/configs/keepalived_haproxy_notifications.sh
|
|
|
|
# Master and backup sync groups should normally be the same.
|
|
keepalived_master_sync_groups: "{{ keepalived_global_sync_groups }}"
|
|
keepalived_backup_sync_groups: "{{ keepalived_global_sync_groups }}"
|
|
|
|
keepalived_global_scripts:
|
|
haproxy_check_script:
|
|
check_script: "killall -0 haproxy"
|
|
pingable_check_script:
|
|
check_script: "ping -c 1 193.0.14.129 1>&2"
|
|
interval: 10
|
|
fall: 2
|
|
rise: 4
|
|
|
|
# Master and backup scripts should be the same.
|
|
# The two variables (master/backup) are kept if the deployer wants different checks for backup and master.
|
|
keepalived_master_scripts: "{{ keepalived_global_scripts }}"
|
|
keepalived_backup_scripts: "{{ keepalived_global_scripts }}"
|
|
|
|
keepalived_master_instances:
|
|
external:
|
|
interface: "{{ haproxy_keepalived_external_interface | default(management_bridge) }}"
|
|
state: MASTER
|
|
virtual_router_id: "{{ haproxy_keepalived_external_virtual_router_id | default ('10') }}"
|
|
priority: "{{ haproxy_keepalived_priority_master | default('100') }}"
|
|
authentication_password: "{{ haproxy_keepalived_authentication_password }}"
|
|
vips:
|
|
- "{{ haproxy_keepalived_external_vip_cidr }} dev {{ haproxy_keepalived_external_interface | default(management_bridge) }}"
|
|
track_scripts:
|
|
- haproxy_check_script
|
|
- pingable_check_script
|
|
internal:
|
|
interface: "{{ haproxy_keepalived_internal_interface | default(management_bridge) }}"
|
|
state: MASTER
|
|
virtual_router_id: "{{ haproxy_keepalived_internal_virtual_router_id | default ('11') }}"
|
|
priority: "{{ haproxy_keepalived_priority_master | default('100') }}"
|
|
authentication_password: "{{ haproxy_keepalived_authentication_password }}"
|
|
track_scripts:
|
|
- haproxy_check_script
|
|
- pingable_check_script
|
|
vips:
|
|
- "{{ haproxy_keepalived_internal_vip_cidr }} dev {{ haproxy_keepalived_internal_interface | default(management_bridge) }}"
|
|
|
|
keepalived_backup_instances:
|
|
external:
|
|
interface: "{{ haproxy_keepalived_external_interface | default(management_bridge) }}"
|
|
state: BACKUP
|
|
virtual_router_id: "{{ haproxy_keepalived_external_virtual_router_id | default ('10') }}"
|
|
priority: "{{ haproxy_keepalived_priority_backup | default('20') }}"
|
|
authentication_password: "{{ haproxy_keepalived_authentication_password }}"
|
|
vips:
|
|
- "{{ haproxy_keepalived_external_vip_cidr }} dev {{ haproxy_keepalived_external_interface | default(management_bridge) }}"
|
|
track_scripts:
|
|
- haproxy_check_script
|
|
- pingable_check_script
|
|
internal:
|
|
interface: "{{ haproxy_keepalived_internal_interface | default(management_bridge) }}"
|
|
state: BACKUP
|
|
virtual_router_id: "{{ haproxy_keepalived_internal_virtual_router_id | default ('11') }}"
|
|
priority: "{{ haproxy_keepalived_priority_backup | default('20') }}"
|
|
authentication_password: "{{ haproxy_keepalived_authentication_password }}"
|
|
track_scripts:
|
|
- haproxy_check_script
|
|
- pingable_check_script
|
|
vips:
|
|
- "{{ haproxy_keepalived_internal_vip_cidr }} dev {{ haproxy_keepalived_internal_interface | default(management_bridge) }}"
|