diff --git a/README.md b/README.md index 723e78f..e136c17 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ Notes Requirements ------------ -Ansible 2.5+ +Ansible 2.8+ Role Variables -------------- diff --git a/meta/main.yml b/meta/main.yml index 9f248bc..8ea72f6 100644 --- a/meta/main.yml +++ b/meta/main.yml @@ -4,7 +4,7 @@ galaxy_info: description: Install and configure MariaDB (and Galera Cluster) on Debian company: license: GPLv2 - min_ansible_version: 2.5 + min_ansible_version: 2.8 platforms: - name: Debian versions: diff --git a/tasks/replication/slave.yml b/tasks/replication/slave.yml index 3eb9bd9..f47c30a 100644 --- a/tasks/replication/slave.yml +++ b/tasks/replication/slave.yml @@ -18,27 +18,16 @@ ignore_errors: yes register: slave_status -- name: INCLUDE | Transfert /etc/mysql/debian.cnf from master - import_tasks: slave/ssh.yml - when: mariadb_slave_replicate_mysqldb or ((slave_status.failed is defined or not slave_status.Is_Slave) and mariadb_slave_import_data) - - name: INCLUDE | Import data import_tasks: slave/import_data.yml - when: (slave_status.failed is defined or not slave_status.Is_Slave) and mariadb_slave_import_data + when: (slave_status.failed or not slave_status.Is_Slave) and mariadb_slave_import_data -- name: INCLUDE | Configure replication - import_tasks: slave/replication.yml - when: (slave_status.failed is defined or not slave_status.Is_Slave) or mariadb_slave_force_setup - -- name: INCLUDE | Transfert /etc/mysql/debian.cnf from master - import_tasks: slave/debiancnf.yml - when: mariadb_slave_replicate_mysqldb +- name: Configure GTID Recplication + import_tasks: slave/gtid.yml + when: slave_status.failed or not slave_status.Is_Slave or mariadb_slave_force_setup - name: MYSQL_REPLICATION | Get slave status mysql_replication: mode: getslave ignore_errors: yes register: slave_status - -- name: Configure GTID - import_tasks: slave/gtid.yml diff --git a/tasks/replication/slave/debiancnf.yml b/tasks/replication/slave/debiancnf.yml deleted file mode 100644 index efc90ea..0000000 --- a/tasks/replication/slave/debiancnf.yml +++ /dev/null @@ -1,25 +0,0 @@ ---- - -- name: FETCH | Get /etc/mysql/debian.cnf on master - fetch: - src: /etc/mysql/debian.cnf - dest: /tmp/{{ mariadb_slave_import_from }}/debian.cnf - flat: yes - changed_when: false - delegate_to: "{{ mariadb_slave_import_from }}" - -- name: LOCAL_ACTION FILE | Secure fetched file - local_action: - module: file - path: "/tmp/{{ mariadb_slave_import_from }}/debian.cnf" - mode: 0600 - become: no - -- name: COPY | Fetched file to /etc/mysql/debian.cnf - copy: - src: "/tmp/{{ mariadb_slave_import_from }}/debian.cnf" - dest: /etc/mysql/debian.cnf - owner: root - group: root - mode: 0600 - notify: restart mariadb diff --git a/tasks/replication/slave/gtid.yml b/tasks/replication/slave/gtid.yml index f1b1197..73ab399 100644 --- a/tasks/replication/slave/gtid.yml +++ b/tasks/replication/slave/gtid.yml @@ -1,15 +1,25 @@ --- -# Need this hack before: -# - https://github.com/ansible/ansible/issues/29214 -# - https://mariadb.com/kb/en/mariadb/global-transaction-id/#switching-an-existing-old-style-slave-to-use-gtid - - name: MYSQL_REPLICATION | Stop slave mysql_replication: mode: stopslave -- name: COMMAND | Migrate to MariaDB GTID +- name: MYSQL_REPLICATION | Configure master host + mysql_replication: + mode: changemaster + master_host: "{{ mariadb_replication_host }}" + master_port: "{{ mariadb_replication_port }}" + master_user: "{{ mariadb_replication_user }}" + master_password: "{{ mariadb_replication_password }}" + +# -- Wait this PR in Ansible released version (https://github.com/ansible/ansible/pull/62648) +# name: MYSQL_REPLICATION | Setup replication with GTID +# mysql_replication: +# master_use_gtid: current_pos + +- name: COMMAND | Configure GTID command: mariadb -e "CHANGE MASTER TO master_use_gtid=current_pos"; + changed_when: true - name: MYSQL_REPLICATION | Start slave mysql_replication: diff --git a/tasks/replication/slave/import_data.yml b/tasks/replication/slave/import_data.yml index 578b318..5995409 100644 --- a/tasks/replication/slave/import_data.yml +++ b/tasks/replication/slave/import_data.yml @@ -1,12 +1,24 @@ --- -- name: WAIT_FOR | source data (prevent rsync bug) - TODO find another hack - wait_for: - host: "{{ mariadb_slave_import_from }}" - port: 22 +- name: FILE | Create SSH client dir + file: + path: "{{ ansible_env.HOME }}/.ssh" + state: directory + mode: 0700 + +- name: OPENSSH_KEYPAIR | Create SSH key + openssh_keypair: + path: "{{ ansible_env.HOME }}/.ssh/id_rsa" + register: gen_ssh - block: + - name: AUTHORIZED_KEY | Auth slave to backup host + authorized_key: + user: "{{ mariadb_backup_user }}" + state: present + key: "{{ gen_ssh.public_key }}" + - name: FILE | Create backup directory file: path: "{{ mariadb_backup_dir }}" @@ -37,10 +49,9 @@ variable: datadir register: datadir -- name: SET_FACT | related to mysql datadir +- name: SET_FACT | Get MariaDB datadir set_fact: mariadb_datadir: "{{ datadir.msg }}" - mariadb_binlog_info: "{{ datadir.msg }}/xtrabackup_binlog_info" - name: SERVICE | Stop MariaDB before importing data service: @@ -64,30 +75,13 @@ shell: "rm -f {{ mariadb_datadir }}/ib_logfile*" args: removes: "{{ mariadb_datadir }}/ib_logfile0" + warn: false - name: SERVICE | Start MariaDB service: name: mysql state: started -- name: SHELL | Get master_log_file - command: "awk '{ print $1 }' {{ mariadb_binlog_info }}" - register: master_log_file - -- name: SHELL | Get master_log_pos - command: "awk '{ print $2 }' {{ mariadb_binlog_info }}" - register: master_log_pos - -- name: SHELL | Get master GTID - command: "awk '{ print $3 }' {{ mariadb_binlog_info }}" - register: master_gtid - -- name: SET_FACT | master_log_file - set_fact: - mariadb_master_log_file: "{{ master_log_file.stdout }}" - mariadb_master_log_pos: "{{ master_log_pos.stdout }}" - mariadb_master_gtid: "{{ master_gtid.stdout }}" - - name: FILE | Delete dump file: path: "{{ mariadb_backup_dir }}" diff --git a/tasks/replication/slave/ssh.yml b/tasks/replication/slave/ssh.yml deleted file mode 100644 index fdce042..0000000 --- a/tasks/replication/slave/ssh.yml +++ /dev/null @@ -1,19 +0,0 @@ ---- - -- name: SHELL | Create SSH key if needed on slave - shell: "ssh-keygen -b 2048 -t rsa -f {{ ansible_env.HOME }}/.ssh/id_rsa -q -N ''" - args: - creates: "{{ ansible_env.HOME }}/.ssh/id_rsa" - -- name: COMMAND | Get pub key - command: cat {{ ansible_env.HOME }}/.ssh/id_rsa.pub - register: pub_key - changed_when: false - -- name: AUTHORIZED_KEY | Auth slave to backup host - authorized_key: - user: "{{ mariadb_backup_user }}" - state: present - key: "{{ pub_key.stdout }}" - delegate_to: "{{ mariadb_slave_import_from }}" - become: yes