From 03cd7eb3563788ca1ffd7b19130f18614887a546 Mon Sep 17 00:00:00 2001 From: Scott Solkhon Date: Tue, 13 Aug 2019 15:27:50 +0000 Subject: [PATCH] Wait for MariaDB to be accessible via HAProxy Explicitly wait for the database to be accessible via the load balancer. Sometimes it can reject connections even when all database services are up, possibly due to the health check polling in HAProxy. Closes-Bug: #1840145 Change-Id: I7601bb710097a78f6b29bc4018c71f2c6283eef2 --- ansible/roles/mariadb/tasks/recover_cluster.yml | 2 ++ ansible/roles/mariadb/tasks/register.yml | 2 ++ .../mariadb/tasks/wait_for_loadbalancer.yml | 16 ++++++++++++++++ 3 files changed, 20 insertions(+) create mode 100644 ansible/roles/mariadb/tasks/wait_for_loadbalancer.yml diff --git a/ansible/roles/mariadb/tasks/recover_cluster.yml b/ansible/roles/mariadb/tasks/recover_cluster.yml index 1d1c340feb..12012a39de 100644 --- a/ansible/roles/mariadb/tasks/recover_cluster.yml +++ b/ansible/roles/mariadb/tasks/recover_cluster.yml @@ -190,3 +190,5 @@ when: - bootstrap_host is defined - bootstrap_host != inventory_hostname + +- import_tasks: wait_for_loadbalancer.yml diff --git a/ansible/roles/mariadb/tasks/register.yml b/ansible/roles/mariadb/tasks/register.yml index bdcd12eb2e..a2984397e2 100644 --- a/ansible/roles/mariadb/tasks/register.yml +++ b/ansible/roles/mariadb/tasks/register.yml @@ -13,6 +13,8 @@ priv: "*.*:USAGE" run_once: True +- import_tasks: wait_for_loadbalancer.yml + - name: Creating the Percona XtraBackup database kolla_toolbox: module_name: mysql_db diff --git a/ansible/roles/mariadb/tasks/wait_for_loadbalancer.yml b/ansible/roles/mariadb/tasks/wait_for_loadbalancer.yml new file mode 100644 index 0000000000..da6bd55c2e --- /dev/null +++ b/ansible/roles/mariadb/tasks/wait_for_loadbalancer.yml @@ -0,0 +1,16 @@ +--- +# Explicitly wait for the database to be accessible via the load balancer. +# Sometimes it can reject connections even when all database services are up, +# due to the health check polling in HAProxy. +- name: wait for MariaDB to be available via HAProxy + wait_for: + host: "{{ database_address }}" + port: "{{ database_port }}" + connect_timeout: 1 + timeout: 60 + search_regex: "MariaDB" + register: check_mariadb_port + until: check_mariadb_port is success + retries: 10 + delay: 6 + run_once: True