Skip to content

Commit

Permalink
Full buster optim (#38)
Browse files Browse the repository at this point in the history
* Remove Stretch and Percona support
* Delete root password management (On Buster, it uses socket auth)
* Fix sync backups files master -> slave
* Cleanup legacy code on replication slave
* Use modern configuration
* Debian buster configuration style
* Drop logrotate management (useless)
* Add new default values in defaults/main.yml (according with MariaDB doc)
* Travis with Ansible 2.8+
* Drop feature "don't replicate mysql database"
* Fully compatible with python3
  • Loading branch information
HanXHX authored Dec 28, 2019
1 parent ba8477d commit 0b4983e
Show file tree
Hide file tree
Showing 34 changed files with 395 additions and 417 deletions.
24 changes: 8 additions & 16 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,20 +1,12 @@
env:
- PLATFORM='docker-stretch-default-master' ANSIBLE_VERSION='ansible>=2.6,<2.7'
- PLATFORM='docker-stretch-upstream-master' ANSIBLE_VERSION='ansible>=2.6,<2.7'
- PLATFORM='docker-stretch-default-galera-1' ANSIBLE_VERSION='ansible>=2.6,<2.7'
- PLATFORM='docker-stretch-upstream-galera-1' ANSIBLE_VERSION='ansible>=2.6,<2.7'
- PLATFORM='docker-buster-default-master' ANSIBLE_VERSION='ansible>=2.6,<2.7'
- PLATFORM='docker-buster-upstream-master' ANSIBLE_VERSION='ansible>=2.6,<2.7'
- PLATFORM='docker-buster-default-galera-1' ANSIBLE_VERSION='ansible>=2.6,<2.7'
- PLATFORM='docker-buster-upstream-galera-1' ANSIBLE_VERSION='ansible>=2.6,<2.7'
- PLATFORM='docker-stretch-default-master' ANSIBLE_VERSION='ansible>=2.7,<2.8'
- PLATFORM='docker-stretch-upstream-master' ANSIBLE_VERSION='ansible>=2.7,<2.8'
- PLATFORM='docker-stretch-default-galera-1' ANSIBLE_VERSION='ansible>=2.7,<2.8'
- PLATFORM='docker-stretch-upstream-galera-1' ANSIBLE_VERSION='ansible>=2.7,<2.8'
- PLATFORM='docker-buster-default-master' ANSIBLE_VERSION='ansible>=2.7,<2.8'
- PLATFORM='docker-buster-upstream-master' ANSIBLE_VERSION='ansible>=2.7,<2.8'
- PLATFORM='docker-buster-default-galera-1' ANSIBLE_VERSION='ansible>=2.7,<2.8'
- PLATFORM='docker-buster-upstream-galera-1' ANSIBLE_VERSION='ansible>=2.7,<2.8'
- PLATFORM='docker-buster-default-master' ANSIBLE_VERSION='ansible>=2.8,<2.9'
- PLATFORM='docker-buster-upstream-master' ANSIBLE_VERSION='ansible>=2.8,<2.9'
- PLATFORM='docker-buster-default-galera-1' ANSIBLE_VERSION='ansible>=2.8,<2.9'
- PLATFORM='docker-buster-upstream-galera-1' ANSIBLE_VERSION='ansible>=2.8,<2.9'
- PLATFORM='docker-buster-default-master' ANSIBLE_VERSION='ansible>=2.9,<2.10'
- PLATFORM='docker-buster-upstream-master' ANSIBLE_VERSION='ansible>=2.9,<2.10'
- PLATFORM='docker-buster-default-galera-1' ANSIBLE_VERSION='ansible>=2.9,<2.10'
- PLATFORM='docker-buster-upstream-galera-1' ANSIBLE_VERSION='ansible>=2.9,<2.10'

sudo: required

Expand Down
9 changes: 1 addition & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,6 @@ Install and configure MariaDB (Galera Cluster). Manage replication (master/slave

| OS | Origin | MariaDB versions |
| --------------- | --------- | ------------------------- |
| Debian Stretch | Debian | 10.1 |
| Debian Stretch | Upstream | 10.1 / 10.2 / 10.3 / 10.4 |
| Debian Buster | Debian | 10.3 |
| Debian Buster | Upstream | 10.3 / 10.4 |

Expand All @@ -18,12 +16,11 @@ Notes
* Galera Cluster is experimental
* Due to Vagrant + Docker limitation (private network), replication/galera can't be checked with Travis
* If you need to test this role with Vagrant, you must install hostmanager plugin: `vagrant plugin install vagrant-hostmanager`
* Percona Xtrabackup is not available in upstream repository. This feature is disabled in the role.

Requirements
------------

Ansible 2.5+
Ansible 2.8+

Role Variables
--------------
Expand All @@ -32,8 +29,6 @@ Role Variables

### Configuration

- `mariadb_root_password`: root password (should be protected with [vault](http://docs.ansible.com/playbooks_vault.html))

If you need a feature you can't configure, you can use this list. These config will go to `/etc/mysql/conf.d/01-extra`.

- `mariadb_extra_config`: key/value hash see [default vars file](defaults/main.yml)
Expand Down Expand Up @@ -64,8 +59,6 @@ Check "priv" syntax in [mysql\_user module documentation](http://docs.ansible.co

- `mariadb_version`: depends Debian version
- `mariadb_repository`: MariaDB upstream APT repository (see: [MariaDB repositories tool](https://downloads.mariadb.org/mariadb/repositories))
- `mariadb_percona_repository`: Percona upstream APT repository (see: [Percona APT doc](http://www.percona.com/doc/percona-server/5.5/installation/apt_repo.html))
- `mariadb_use_percona_apt`: Force using Percona APT repository (useful when you want to use latest version of percona toolkits, xtrabackup... etc)

Dependencies
------------
Expand Down
28 changes: 2 additions & 26 deletions Vagrantfile
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@

Vagrant.configure("2") do |config|

vbox_deb_stretch = 'debian/stretch64'
dk_deb_stretch = 'hanxhx/vagrant-ansible:debian9'
vbox_deb_buster = 'debian/buster64'
dk_deb_buster = 'hanxhx/vagrant-ansible:debian10'

Expand All @@ -17,39 +15,17 @@ Vagrant.configure("2") do |config|
config.hostmanager.include_offline = false

cases = [
# ========================
# Debian Stretch
# ========================

# Default replication
{ os_name: 'stretch', vbox: vbox_deb_stretch, docker: dk_deb_stretch, vars: {mariadb_origin: 'default' }, groups: ['master'] },
{ os_name: 'stretch', vbox: vbox_deb_stretch, docker: nil, vars: {mariadb_origin: 'default' }, groups: ['slave'] },

# Upstream replication
{ os_name: 'stretch', vbox: vbox_deb_stretch, docker: dk_deb_stretch, vars: {mariadb_origin: 'upstream' }, groups: ['master'] },
{ os_name: 'stretch', vbox: vbox_deb_stretch, docker: nil, vars: {mariadb_origin: 'upstream' }, groups: ['slave'] },

# Galera Debian
{ os_name: 'stretch', vbox: vbox_deb_stretch, docker: dk_deb_stretch, vars: {mariadb_origin: 'default' }, groups: ['galera', '1'] },
{ os_name: 'stretch', vbox: vbox_deb_stretch, docker: nil, vars: {mariadb_origin: 'default' }, groups: ['galera', '2'] },
{ os_name: 'stretch', vbox: vbox_deb_stretch, docker: nil, vars: {mariadb_origin: 'default' }, groups: ['galera', '3'] },

# Galera Upstream
{ os_name: 'stretch', vbox: vbox_deb_stretch, docker: dk_deb_stretch, vars: {mariadb_origin: 'upstream' }, groups: ['galera', '1'] },
{ os_name: 'stretch', vbox: vbox_deb_stretch, docker: nil, vars: {mariadb_origin: 'upstream' }, groups: ['galera', '2'] },
{ os_name: 'stretch', vbox: vbox_deb_stretch, docker: nil, vars: {mariadb_origin: 'upstream' }, groups: ['galera', '3'] },

# ========================
# Debian Buster
# ========================

# Default replication
{ os_name: 'buster', vbox: vbox_deb_buster, docker: dk_deb_buster, vars: {mariadb_origin: 'default' }, groups: ['master'] },
# { os_name: 'buster', vbox: vbox_deb_buster, docker: nil, vars: {mariadb_origin: 'default' }, groups: ['slave'] },
{ os_name: 'buster', vbox: vbox_deb_buster, docker: nil, vars: {mariadb_origin: 'default' }, groups: ['slave'] },

# Upstream replication
{ os_name: 'buster', vbox: vbox_deb_buster, docker: dk_deb_buster, vars: {mariadb_origin: 'upstream' }, groups: ['master'] },
# { os_name: 'buster', vbox: vbox_deb_buster, docker: nil, vars: {mariadb_origin: 'upstream' }, groups: ['slave'] },
{ os_name: 'buster', vbox: vbox_deb_buster, docker: nil, vars: {mariadb_origin: 'upstream' }, groups: ['slave'] },

# Galera Debian
{ os_name: 'buster', vbox: vbox_deb_buster, docker: dk_deb_buster, vars: {mariadb_origin: 'default' }, groups: ['galera', '1'] },
Expand Down
44 changes: 15 additions & 29 deletions defaults/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,62 +5,58 @@
# -------------------------------------
mariadb_origin: 'default'
mariadb_use_galera: false
mariadb_root_password: 'change_me_NOW'
mariadb_notify_restart: true
mariadb_upstream_apt_src: false
mariadb_manage_logrotate: true

# -------------------------------------
# Configuration
# -------------------------------------

# MariaDB configuration template
mariadb_config_template: 'etc/mysql/my.cnf.j2'

# MariaDB connection settings.
mariadb_port: "3306"
mariadb_bind_address: '127.0.0.1'
mariadb_datadir: '/var/lib/mysql'
mariadb_pid_file: '/var/run/mysqld/mysqld.pid'
mariadb_socket: '/var/run/mysqld/mysqld.sock'
mariadb_pid_file: '/run/mysqld/mysqld.pid'
mariadb_socket: '/run/mysqld/mysqld.sock'

# Slow query log settings.
mariadb_slow_query_log_enabled: false
mariadb_slow_query_log_file: '/var/log/mysql/mysql_slow.log'
mariadb_slow_query_time: 2

# Memory settings (default values optimized ~512MB RAM).
# Fine Tuning
mariadb_key_buffer_size: '256M'
mariadb_max_allowed_packet: '64M'
mariadb_table_open_cache: '256'
mariadb_sort_buffer_size: '1M'
mariadb_max_connections: 100
mariadb_thread_concurrency: "{{ ansible_processor_cores * 2 }}"


mariadb_table_open_cache: '2000'
mariadb_sort_buffer_size: '2M'
mariadb_read_buffer_size: '1M'
mariadb_read_rnd_buffer_size: '4M'
mariadb_myisam_sort_buffer_size: '64M'
mariadb_thread_cache_size: '8'
mariadb_read_rnd_buffer_size: '2M'
mariadb_myisam_sort_buffer_size: '128M'
mariadb_thread_cache_size: '256'
mariadb_query_cache_size: '16M'

# Other settings.
mariadb_wait_timeout: 28800

# Try number of CPU's * 2 for thread_concurrency.
mariadb_thread_concurrency: "{{ ansible_processor_cores * 2 }}"

# InnoDB settings.
mariadb_innodb_file_per_table: '1'
mariadb_innodb_buffer_pool_size: "{{ (ansible_memtotal_mb * 0.2) | round | int }}M"
mariadb_innodb_log_file_size: "64M" # If this setting changes on a running system, you will break it! http://dev.mysql.com/doc/refman/5.6/en/innodb-data-log-reconfiguration.html
mariadb_innodb_log_buffer_size: '8M'
mariadb_innodb_flush_log_at_trx_commit: '1'
mariadb_innodb_lock_wait_timeout: 50

# mysqldump settings.
mariadb_mysqldump_max_allowed_packet: '64M'

# Logging settings.
mariadb_log_error: '/var/log/mysql/mysql_error.log'
mariadb_syslog_tag: 'mysql'

# mysqldump settings.
mariadb_mysqldump_max_allowed_packet: '64M'

# -------------------------------------
# Extra configuration
# -------------------------------------
Expand Down Expand Up @@ -101,8 +97,6 @@ mariadb_slave_import_data: true
mariadb_slave_import_from: "{{ mariadb_replication_host }}"
# Delete dump after slave configuration (set false if you have many slaves to install, it avoids to create many dumps)
mariadb_slave_import_flush_dump: true
# Slave uses mysql database from master?
mariadb_slave_replicate_mysqldb: true
# Don't replicate these DBs/tables
mariadb_slave_ignore_db: []
mariadb_slave_ignore_table: []
Expand Down Expand Up @@ -139,11 +133,3 @@ mariadb_wsrep_node_address: false # Set primary node IP
mariadb_galera_members: []
mariadb_galera_primary_node: 'change_me' # See: https://github.com/ansible/ansible/issues/17453
mariadb_wsrep_stt_method: 'rsync'

# -------------------------------------
# Percona
# -------------------------------------
mariadb_percona_repository: 'http://repo.percona.com/apt'
mariadb_use_percona_apt: false
mariadb_install_xtrabackup_package: false
mariadb_xtrabackup_package: "{{ mariadb_default_xtrabackup_package }}"
4 changes: 1 addition & 3 deletions meta/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,10 @@ 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:
- stretch
- buster
galaxy_tags:
- database
Expand All @@ -19,6 +18,5 @@ galaxy_info:
- debian
- galera
- cluster
- stretch
dependencies: []

4 changes: 2 additions & 2 deletions tasks/galera/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

- name: TEMPLATE | Deploy Galera configuration
template:
src: etc/mysql/conf.d/09-galera.cnf.j2
dest: /etc/mysql/conf.d/09-galera.cnf
src: etc/mysql/mariadb.conf.d/20-galera.cnf.j2
dest: /etc/mysql/mariadb.conf.d/20-galera.cnf
register: galeraconfig

- name: INCLUDE | Bootstrap first node
Expand Down
9 changes: 0 additions & 9 deletions tasks/install/main.yml
Original file line number Diff line number Diff line change
@@ -1,9 +1,5 @@
---

- name: INCLUDE | Setup Percona repository
import_tasks: 'percona/apt.yml'
when: mariadb_use_percona_apt | bool

- name: INCLUDE | Setup MariaDB repository
import_tasks: 'mariadb/upstream.yml'
when: mariadb_origin == 'upstream'
Expand All @@ -15,8 +11,3 @@
apt:
pkg: "{{ mariadb_tools }}"
install_recommends: no

- name: APT | Install percona-xtrabackup if needed
apt:
pkg: "{{ mariadb_xtrabackup_package }}"
when: mariadb_install_xtrabackup_package | bool
21 changes: 0 additions & 21 deletions tasks/install/mariadb/default.yml
Original file line number Diff line number Diff line change
@@ -1,26 +1,5 @@
---

- name: SHELL | Get MariaDB target version
shell: "LANG=C apt-cache depends mariadb-server | awk -F '-' '/Depends/ { print $NF }'"
register: apt_mariadb_version
changed_when: false

- name: DEBCONF | Prepare MariaDB silent installation (root password)
debconf:
name: 'mariadb-server-{{ apt_mariadb_version.stdout }}'
question: 'mysql-server/root_password'
vtype: 'password'
value: '{{ mariadb_root_password }}'
when: not mariadb_exists.stat.exists

- name: DEBCONF | Prepare MariaDB silent installation (root password again)
debconf:
name: 'mariadb-server-{{ apt_mariadb_version.stdout }}'
question: 'mysql-server/root_password_again'
vtype: 'password'
value: '{{ mariadb_root_password }}'
when: not mariadb_exists.stat.exists

- name: APT | Install MariaDB server
apt:
pkg: mariadb-server
Expand Down
16 changes: 0 additions & 16 deletions tasks/install/percona/apt.yml

This file was deleted.

44 changes: 11 additions & 33 deletions tasks/main.yml
Original file line number Diff line number Diff line change
@@ -1,13 +1,5 @@
---

- block:

- name: SET_FACT | Bypass https://github.com/ansible/ansible/issues/19874
set_fact:
ansible_distribution_release: 'buster'

when: ansible_facts.distribution_major_version == "buster/sid"

- name: INCLUDE_VARS | Related to OS version
include_vars: "{{ ansible_distribution }}-{{ ansible_distribution_release }}.yml"

Expand All @@ -20,35 +12,27 @@
- name: INCLUDE | Install
import_tasks: install/main.yml

- name: TEMPLATE | Deploy configuration
- name: TEMPLATE | Deploy config files
template:
src: "{{ mariadb_config_template }}"
dest: /etc/mysql/my.cnf
src: "{{ item }}"
dest: "/{{ item | replace('.j2', '') }}"
loop:
- etc/mysql/my.cnf
- etc/mysql/conf.d/mysqldump.cnf.j2
- etc/mysql/mariadb.conf.d/10-extra.cnf.j2
- etc/mysql/mariadb.conf.d/50-client.cnf.j2
- etc/mysql/mariadb.conf.d/50-mysqld_safe.cnf.j2
- etc/mysql/mariadb.conf.d/50-server.cnf.j2
register: config

- name: TEMPLATE | Deploy extra configuration
template:
src: etc/mysql/conf.d/10-extra.cnf.j2
dest: /etc/mysql/conf.d/10-extra.cnf
register: extraconfig

- name: SERVICE | Restart now (prevent bugs)
service:
name: mysql
state: restarted
when:
(config.changed or extraconfig.changed) and
config.changed and
not mariadb_galera_resetup

- name: TEMPLATE Create .my.cnf for root
template:
src: root/my.cnf
dest: /root/.my.cnf
owner: root
group: root
mode: 0600
backup: yes

- name: INCLUDE | Galera
import_tasks: galera/main.yml
when: mariadb_use_galera
Expand Down Expand Up @@ -80,9 +64,3 @@
host_all: "{{ item.host_all | default(omit) }}"
state: present
loop: "{{ mariadb_users }}"

- name: TEMPLATE | Deploy logrotate configuration
template:
src: "etc/logrotate.d/mysql-server.j2"
dest: "/etc/logrotate.d/mysql-server"
when: mariadb_manage_logrotate | bool
4 changes: 2 additions & 2 deletions tasks/replication/master.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@

- name: TEMPLATE | Deploy master configuration
template:
src: etc/mysql/conf.d/50-master.cnf.j2
dest: /etc/mysql/conf.d/50-master.cnf
src: etc/mysql/mariadb.conf.d/40-master.cnf.j2
dest: /etc/mysql/mariadb.conf.d/40-master.cnf
notify: restart mariadb
Loading

0 comments on commit 0b4983e

Please sign in to comment.