Merge "Rework mariadb recovery tasks"
This commit is contained in:
commit
437d232dc4
@ -3,17 +3,6 @@
|
|||||||
msg: "MariaDB cluster was not found. Is your inventory correct?"
|
msg: "MariaDB cluster was not found. Is your inventory correct?"
|
||||||
when: not has_cluster | bool
|
when: not has_cluster | bool
|
||||||
|
|
||||||
- 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
|
- name: Cleaning up temp file on mariadb hosts
|
||||||
file: path=/tmp/kolla_mariadb_grastate.dat state=absent
|
file: path=/tmp/kolla_mariadb_grastate.dat state=absent
|
||||||
changed_when: false
|
changed_when: false
|
||||||
@ -26,27 +15,61 @@
|
|||||||
run_once: true
|
run_once: true
|
||||||
|
|
||||||
- block:
|
- block:
|
||||||
- name: Copying grastate.dat file from mariadb container
|
- name: Stop MariaDB containers
|
||||||
command: docker cp mariadb:/var/lib/mysql/grastate.dat /tmp/kolla_mariadb_grastate.dat
|
kolla_docker:
|
||||||
changed_when: false
|
name: "mariadb"
|
||||||
|
action: "stop_container"
|
||||||
|
|
||||||
- name: Print the content of grastate.dat file
|
- name: Run MariaDB wsrep recovery
|
||||||
command: cat /tmp/kolla_mariadb_grastate.dat
|
vars:
|
||||||
register: cat_grastate
|
service_name: "mariadb"
|
||||||
changed_when: false
|
service: "{{ mariadb_services[service_name] }}"
|
||||||
|
kolla_docker:
|
||||||
|
action: "start_container"
|
||||||
|
common_options: "{{ docker_common_options }}"
|
||||||
|
environment:
|
||||||
|
KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}"
|
||||||
|
BOOTSTRAP_ARGS: "--wsrep-recover"
|
||||||
|
image: "{{ service.image }}"
|
||||||
|
labels:
|
||||||
|
BOOTSTRAP:
|
||||||
|
name: "{{ service.container_name }}"
|
||||||
|
restart_policy: "never"
|
||||||
|
volumes: "{{ service.volumes }}"
|
||||||
|
|
||||||
- name: Registering mariadb seqno variable
|
- name: Stop MariaDB containers
|
||||||
|
kolla_docker:
|
||||||
|
name: "{{ service.container_name }}"
|
||||||
|
action: "stop_container"
|
||||||
|
|
||||||
|
- name: Copying MariaDB log file to /tmp
|
||||||
|
shell: "docker cp {{ service.container_name }}:/var/log/kolla/mariadb/mariadb.log /tmp/mariadb_tmp.log"
|
||||||
|
|
||||||
|
- name: Get MariaDB wsrep recovery seqno
|
||||||
|
shell: "tail -n 200 /tmp/mariadb_tmp.log | grep Recovered | tail -1 | awk '{print $7}' | awk -F'\n' '{print $1}' | awk -F':' '{print $2}'"
|
||||||
|
register: wsrep_recovery_seqno
|
||||||
|
|
||||||
|
- name: Removing MariaDB log file from /tmp
|
||||||
|
file: path=/tmp/mariadb_tmp.log state=absent
|
||||||
|
changed_when: false
|
||||||
|
check_mode: no
|
||||||
|
|
||||||
|
- name: Registering MariaDB seqno variable
|
||||||
set_fact:
|
set_fact:
|
||||||
seqno: "{{ (cat_grastate.stdout|from_yaml).seqno }}"
|
seqno: "{{ wsrep_recovery_seqno.stdout_lines[0] }}"
|
||||||
changed_when: false
|
changed_when: false
|
||||||
|
|
||||||
- name: Comparing seqno value on all mariadb hosts
|
- name: Comparing seqno value on all mariadb hosts
|
||||||
shell: "if [[ {{ hostvars[inventory_hostname]['seqno'] }} -lt {{ hostvars[item]['seqno'] }} ]]; then echo {{ hostvars[item]['seqno'] }}; fi"
|
shell:
|
||||||
|
cmd: |
|
||||||
|
if [[ ! -z {{ hostvars[inventory_hostname]['seqno'] }} && ! -z {{ hostvars[item]['seqno'] }} &&
|
||||||
|
{{ hostvars[inventory_hostname]['seqno'] }} =~ ^[0-9]+$ && {{ hostvars[item]['seqno'] }} =~ ^[0-9]+$ &&
|
||||||
|
{{ hostvars[inventory_hostname]['seqno'] }} -lt {{ hostvars[item]['seqno'] }} ]]; then echo {{ hostvars[item]['seqno'] }}; fi
|
||||||
|
with_items: "{{ groups['mariadb'] }}"
|
||||||
|
register: seqno_compare
|
||||||
args:
|
args:
|
||||||
executable: /bin/bash
|
executable: /bin/bash
|
||||||
with_items: "{{ groups['mariadb'] }}"
|
|
||||||
changed_when: false
|
changed_when: false
|
||||||
register: seqno_compare
|
|
||||||
|
|
||||||
- name: Writing hostname of host with the largest seqno to temp file
|
- 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
|
local_action: copy content={{ inventory_hostname }} dest=/tmp/kolla_mariadb_recover_inventory_name mode=0644
|
||||||
@ -63,18 +86,104 @@
|
|||||||
bootstrap_host: "{{ mariadb_recover_inventory_name }}"
|
bootstrap_host: "{{ mariadb_recover_inventory_name }}"
|
||||||
master_host: "{{ mariadb_recover_inventory_name }}"
|
master_host: "{{ mariadb_recover_inventory_name }}"
|
||||||
changed_when: true
|
changed_when: true
|
||||||
notify:
|
|
||||||
- Starting first MariaDB container
|
|
||||||
- restart slave mariadb
|
|
||||||
- restart master mariadb
|
|
||||||
|
|
||||||
- name: Cleaning up temp file on mariadb hosts
|
- name: Copying grastate.dat file from MariaDB container in bootstrap host
|
||||||
file: path=/tmp/kolla_mariadb_grastate.dat state=absent
|
command: docker cp mariadb:/var/lib/mysql/grastate.dat /tmp/kolla_mariadb_grastate.dat
|
||||||
changed_when: false
|
changed_when: false
|
||||||
check_mode: no
|
when:
|
||||||
|
- bootstrap_host is defined
|
||||||
|
- bootstrap_host == inventory_hostname
|
||||||
|
|
||||||
- name: Cleaning up temp file on localhost
|
- name: Set grastate.dat file from MariaDB container in bootstrap host
|
||||||
local_action: file path=/tmp/kolla_mariadb_recover_inventory_name state=absent
|
lineinfile:
|
||||||
|
dest: /tmp/kolla_mariadb_grastate.dat
|
||||||
|
regexp: 'safe_to_bootstrap: 0'
|
||||||
|
line: 'safe_to_bootstrap: 1'
|
||||||
|
state: present
|
||||||
|
when:
|
||||||
|
- bootstrap_host is defined
|
||||||
|
- bootstrap_host == inventory_hostname
|
||||||
|
|
||||||
|
- name: Copying grastate.dat file to mariadb container
|
||||||
|
command: docker cp /tmp/kolla_mariadb_grastate.dat mariadb:/var/lib/mysql/grastate.dat
|
||||||
changed_when: false
|
changed_when: false
|
||||||
check_mode: no
|
when:
|
||||||
run_once: true
|
- bootstrap_host is defined
|
||||||
|
- bootstrap_host == inventory_hostname
|
||||||
|
|
||||||
|
- name: Starting first MariaDB container
|
||||||
|
vars:
|
||||||
|
service_name: "mariadb"
|
||||||
|
service: "{{ mariadb_services[service_name] }}"
|
||||||
|
kolla_docker:
|
||||||
|
action: "start_container"
|
||||||
|
common_options: "{{ docker_common_options }}"
|
||||||
|
environment:
|
||||||
|
KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}"
|
||||||
|
BOOTSTRAP_ARGS: "--wsrep-new-cluster"
|
||||||
|
image: "{{ service.image }}"
|
||||||
|
labels:
|
||||||
|
BOOTSTRAP:
|
||||||
|
name: "{{ service.container_name }}"
|
||||||
|
restart_policy: "never"
|
||||||
|
volumes: "{{ service.volumes }}"
|
||||||
|
when:
|
||||||
|
- bootstrap_host is defined
|
||||||
|
- bootstrap_host == inventory_hostname
|
||||||
|
|
||||||
|
- name: Wait for first MariaDB container
|
||||||
|
wait_for:
|
||||||
|
host: "{{ api_interface_address }}"
|
||||||
|
port: "{{ mariadb_port }}"
|
||||||
|
connect_timeout: 1
|
||||||
|
timeout: 60
|
||||||
|
search_regex: "MariaDB"
|
||||||
|
register: check_mariadb_port
|
||||||
|
until: check_mariadb_port | success
|
||||||
|
retries: 10
|
||||||
|
delay: 6
|
||||||
|
when:
|
||||||
|
- bootstrap_host is defined
|
||||||
|
- bootstrap_host == inventory_hostname
|
||||||
|
|
||||||
|
- name: Set first MariaDB container as primary
|
||||||
|
shell: "docker exec mariadb mysql -uroot -p{{ database_password }} -e \"SET GLOBAL wsrep_provider_options='pc.bootstrap=yes';\""
|
||||||
|
no_log: True
|
||||||
|
when:
|
||||||
|
- bootstrap_host is defined
|
||||||
|
- bootstrap_host == inventory_hostname
|
||||||
|
|
||||||
|
- name: Restart slave MariaDB container
|
||||||
|
vars:
|
||||||
|
service_name: "mariadb"
|
||||||
|
service: "{{ mariadb_services[service_name] }}"
|
||||||
|
kolla_docker:
|
||||||
|
action: "start_container"
|
||||||
|
common_options: "{{ docker_common_options }}"
|
||||||
|
environment:
|
||||||
|
KOLLA_CONFIG_STRATEGY: "{{ config_strategy }}"
|
||||||
|
BOOTSTRAP_ARGS: " "
|
||||||
|
image: "{{ service.image }}"
|
||||||
|
labels:
|
||||||
|
BOOTSTRAP:
|
||||||
|
name: "{{ service.container_name }}"
|
||||||
|
restart_policy: "never"
|
||||||
|
volumes: "{{ service.volumes }}"
|
||||||
|
when:
|
||||||
|
- bootstrap_host is defined
|
||||||
|
- bootstrap_host != inventory_hostname
|
||||||
|
|
||||||
|
- name: Wait for slave MariaDB
|
||||||
|
wait_for:
|
||||||
|
host: "{{ api_interface_address }}"
|
||||||
|
port: "{{ mariadb_port }}"
|
||||||
|
connect_timeout: 1
|
||||||
|
timeout: 60
|
||||||
|
search_regex: "MariaDB"
|
||||||
|
register: check_mariadb_port
|
||||||
|
until: check_mariadb_port | success
|
||||||
|
retries: 10
|
||||||
|
delay: 6
|
||||||
|
when:
|
||||||
|
- bootstrap_host is defined
|
||||||
|
- bootstrap_host != inventory_hostname
|
||||||
|
Loading…
Reference in New Issue
Block a user