1bcb139392
When all mariadb nodes are stopped gracefully, mariadb galera will write it's last executed position into the grastate.dat file. Need find the node with largest seqno number in that file and recovery from that node. Closes-Bug: #1627717 Change-Id: I6e97c190eec99c966bffde0698f783e519ba14bd
95 lines
3.2 KiB
YAML
95 lines
3.2 KiB
YAML
---
|
|
- fail:
|
|
msg: "MariaDB cluster was not found. Is your inventory correct?"
|
|
when: delegate_host == 'None'
|
|
|
|
- name: Checking if and mariadb containers are running
|
|
kolla_docker:
|
|
name: "mariadb"
|
|
action: "get_container_state"
|
|
register: container_state
|
|
|
|
- fail:
|
|
msg: "There are running MariaDB nodes, please stop them first."
|
|
when: container_state.Running | bool
|
|
any_errors_fatal: True
|
|
|
|
- name: Cleaning up temp file on mariadb hosts
|
|
file: path=/tmp/kolla_mariadb_grastate.dat state=absent
|
|
changed_when: false
|
|
always_run: true
|
|
|
|
- name: Cleaning up temp file on localhost
|
|
local_action: file path=/tmp/kolla_mariadb_recover_inventory_name state=absent
|
|
changed_when: false
|
|
always_run: true
|
|
run_once: true
|
|
|
|
- block:
|
|
- name: Copying grastate.dat file from mariadb container
|
|
command: docker cp mariadb:/var/lib/mysql/grastate.dat /tmp/kolla_mariadb_grastate.dat
|
|
changed_when: false
|
|
|
|
- name: Print the content of grastate.dat file
|
|
command: cat /tmp/kolla_mariadb_grastate.dat
|
|
register: cat_grastate
|
|
changed_when: false
|
|
|
|
- name: Registering mariadb seqno variable
|
|
set_fact:
|
|
seqno: "{{ (cat_grastate.stdout|from_yaml).seqno }}"
|
|
changed_when: false
|
|
|
|
- name: Comparing seqno value on all mariadb hosts
|
|
shell: "if [[ {{ hostvars[inventory_hostname]['seqno'] }} -lt {{ hostvars[item]['seqno'] }} ]]; then echo {{ hostvars[item]['seqno'] }}; fi"
|
|
with_items: "{{ groups['mariadb'] }}"
|
|
changed_when: false
|
|
register: seqno_compare
|
|
|
|
- name: Writing hostname of host with the largest seqno to temp file
|
|
local_action: copy content={{ inventory_hostname }} dest=/tmp/kolla_mariadb_recover_inventory_name mode=0644
|
|
changed_when: false
|
|
when: seqno_compare.results | map(attribute='stdout') | join('') == ""
|
|
|
|
- name: Registering mariadb_recover_inventory_name from temp file
|
|
set_fact:
|
|
mariadb_recover_inventory_name: "{{ lookup('file', '/tmp/kolla_mariadb_recover_inventory_name') }}"
|
|
when:
|
|
- mariadb_recover_inventory_name is not defined
|
|
|
|
- name: Cleaning up temp file on mariadb hosts
|
|
file: path=/tmp/kolla_mariadb_grastate.dat state=absent
|
|
changed_when: false
|
|
always_run: true
|
|
|
|
- name: Cleaning up temp file on localhost
|
|
local_action: file path=/tmp/kolla_mariadb_recover_inventory_name state=absent
|
|
changed_when: false
|
|
always_run: true
|
|
run_once: true
|
|
|
|
- name: Starting first MariaDB container
|
|
kolla_docker:
|
|
action: "start_container"
|
|
common_options: "{{ docker_common_options }}"
|
|
environment:
|
|
KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}"
|
|
BOOTSTRAP_ARGS: "--wsrep-new-cluster"
|
|
image: "{{ mariadb_image_full }}"
|
|
labels:
|
|
BOOTSTRAP:
|
|
name: "mariadb"
|
|
restart_policy: "never"
|
|
volumes:
|
|
- "{{ node_config_directory }}/mariadb/:{{ container_config_directory }}/:ro"
|
|
- "/etc/localtime:/etc/localtime:ro"
|
|
- "kolla_logs:/var/log/kolla/"
|
|
- "mariadb:/var/lib/mysql"
|
|
when:
|
|
- (mariadb_recover_inventory_name is not defined and inventory_hostname == groups['mariadb'][0]) or
|
|
(mariadb_recover_inventory_name is defined and inventory_hostname == mariadb_recover_inventory_name)
|
|
|
|
- name: Reset bootstrap fact
|
|
set_fact:
|
|
delegate_host: "None"
|