ansible-mariadb-galera-cluster
An Ansible role to deploy and manage a MariaDB Galera Cluster for high-availability MySQL.
Ansible Galaxy
ansible-galaxy install mrlesmithjr.mariadb_galera_cluster
Features
- Automatic cluster bootstrap and node joining
- TLS encryption for MySQL client, WSREP, and SST connections
- Multiple SST methods:
rsync,mariabackup - InnoDB tuning with automatic memory calculations
- Slow query logging and email notifications for cluster events
- Database and user management via variables
Supported Platforms
| Platform | Versions |
|---|---|
| Ubuntu | 20.04, 22.04, 24.04 |
| Debian | 11, 12, 13 |
| Rocky Linux / RHEL | 8, 9, 10 |
| Fedora | 39+ |
Requirements
Ansible Collections
ansible-galaxy collection install community.mysql
Minimum Ansible Version
Ansible 9.1+
Quick Start
1. Inventory
[galera-cluster-nodes]
node1 ansible_host=192.168.1.10
node2 ansible_host=192.168.1.11
node3 ansible_host=192.168.1.12
[galera-cluster-nodes:vars]
galera_cluster_bind_interface=eth0
2. Playbook
---
- hosts: galera-cluster-nodes
become: true
vars:
mariadb_version: "10.11"
galera_cluster_name: "my-galera-cluster"
mariadb_mysql_root_password: "secure_password_here"
roles:
- role: mrlesmithjr.mariadb_galera_cluster
3. Run
ansible-playbook -i inventory playbook.yml
Key Variables
MariaDB Settings
| Variable | Default | Description |
|---|---|---|
mariadb_version |
"10.11" |
MariaDB version to install |
mariadb_mysql_root_password |
"root" |
MySQL root password |
mariadb_mysql_port |
3306 |
MySQL listen port |
galera_enable_mariadb_repo |
true |
Use official MariaDB repositories |
Cluster Settings
| Variable | Default | Description |
|---|---|---|
galera_cluster_name |
"vagrant-test" |
Galera cluster name |
galera_cluster_nodes_group |
"galera-cluster-nodes" |
Ansible group containing cluster nodes |
galera_cluster_bind_interface |
"eth0" |
Network interface for cluster communication |
galera_sst_method |
"rsync" |
State snapshot transfer method |
TLS Configuration
galera_wsrep_tls_enabled: true
galera_sst_tls_enabled: true
mariadb_tls_files:
ca_cert:
name: "ca.pem"
content: "{{ lookup('file', 'certs/ca.pem') }}"
server_key:
name: "server-key.pem"
content: "{{ lookup('file', 'certs/server-key.pem') }}"
server_cert:
name: "server-cert.pem"
content: "{{ lookup('file', 'certs/server-cert.pem') }}"
Database and User Management
mariadb_databases:
- name: myapp
- name: analytics
init_script: files/init_analytics.sql
mariadb_mysql_users:
- name: myapp_user
password: "secret"
hosts:
- "%"
- "localhost"
priv: "myapp.*:ALL"
See defaults/main.yml for all available variables.
Cluster Operations
Reconfigure an existing cluster
galera_reconfigure_galera: true
Upgrade MariaDB version
mariadb_upgrade: true
Testing
pip install molecule molecule-docker
molecule test
Support This Project
If your organization runs this role in production, consider sponsoring its maintenance. Enterprise tiers with priority support and 48-hour issue triage are available.
License
MIT
Author
Larry Smith Jr. — everythingshouldbevirtual.com · [email protected]