Cet article est la suite de mon précédent article sur le sujet dans le but de pousser le concept un peu plus loin. C’est mon premier role Ansible donc je suis à peu près certain qu’il est possible de mieux faire.
Dans un premier temps, paramétrons le fichier /etc/ansible/hosts pour y lister nos serveurs.
[galera]
db1.morot.test
db2.morot.test
db3.morot.test
On créé notre rôle avec ansible-galaxy pour se faciliter le travail :
cd /etc/ansible/
mkdir roles
ansible-galaxy init galera
- galera was created successfully
On pousse notre template de configuration MariaDB dans /etc/ansible/roles/galera/templates/my.cnf.j2 :
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock
[mysqld_safe]
socket = /var/run/mysqld/mysqld.sock
nice = 0
[mysqld]
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc_messages_dir = /usr/share/mysql
lc_messages = en_US
skip-external-locking
bind-address=0.0.0.0
binlog_format=ROW
innodb_autoinc_lock_mode=2
innodb_flush_log_at_trx_commit=0
max_connections = 100
connect_timeout = 5
wait_timeout = 600
max_allowed_packet = 16M
thread_cache_size = 128
sort_buffer_size = 4M
bulk_insert_buffer_size = 16M
tmp_table_size = 32M
max_heap_table_size = 32M
myisam_recover_options = BACKUP
key_buffer_size = 128M
table_open_cache = 400
myisam_sort_buffer_size = 512M
concurrent_insert = 2
read_buffer_size = 2M
read_rnd_buffer_size = 1M
query_cache_limit = 128K
query_cache_size = 64M
log_warnings = 2
slow_query_log_file = /var/log/mysql/mariadb-slow.log
long_query_time = 10
log_slow_verbosity = query_plan
log_bin = /var/log/mysql/mariadb-bin
log_bin_index = /var/log/mysql/mariadb-bin.index
expire_logs_days = 10
max_binlog_size = 100M
default_storage_engine = InnoDB
innodb_buffer_pool_size = 256M
innodb_log_buffer_size = 8M
innodb_file_per_table = 1
Et donc on est prêt à éditer notre fichier /etc/ansible/galera/tasks/main.yml :
---
# tasks file for galera
- name: MAJ des depots
apt:
update_cache: yes
name: software-properties-common
state: latest
- name: Ajout de la cle des depots Galera
apt_key:
keyserver: 'keyserver.ubuntu.com'
id: '0xF1656F24C74CD1D8'
- apt_repository:
repo: 'deb [arch=amd64,i386,ppc64el] http://mariadb.mirrors.ovh.net/MariaDB/repo/10.2/ubuntu xenial main'
state: present
update_cache: yes
- name: MariaDB Root password
debconf:
question: "mysql-server/root_password"
name: "mariadb-server"
value: "secret"
vtype: "string"
- name: MariaDB Root password confirmation
debconf:
question: "mysql-server/root_password_again"
name: "mariadb-server"
value: "secret"
vtype: "string"
- name: Installation des paquets Galera
apt:
name: "{{ item }}"
with_items:
- rsync
- mariadb-server
- galera-3
- name: Configuration du serveur MariaDB pour Galera
template:
src: 'my.cnf.j2'
dest: '/etc/mysql/my.cnf'
owner: 'root'
group: 'root'
mode: '0644'
- name: Bootstrap du cluster
command: /usr/bin/galera_new_cluster
delegate_to: "{{ groups['galera'][0] }}"
run_once: true
Et enfin, notre playbook galera.yml :
---
- hosts: galera
gather_facts: True
pre_tasks:
- setup:
roles:
- galera
A partir de là, il n’y a plus qu’à jour le playbook sur le groupe d’hôtes pour lancer la configuration. A l’issue de cette étape, il reste à redémarrer les services MariaDB sur tous les nodes sauf le bootstrap. C’est un cas que je n’ai pas géré par Ansible.
ansible-playbook -l galera galera.yml --ask-become-pass
Original post of Morot.Votez pour ce billet sur Planet Libre.