Local MariaDB Galera Cluster with docker-compose
Hands-on setting up local MariaDB Galera Cluster with docker-compose
Objective
In this post, we’ll walk through the process of deploying MariaDB Galera Cluster using Docker Compose.
Prerequisites
A bit ofknowledge about docker, docker-compose, and MariaDB(MySQL).
My Environment
Software Version colima 0.8.1 docker CLI 27.5.1 docker-compose 2.33.0
Overview
What is the Galera Cluster?
MariaDB Galera Cluster is a virturally synchronous multi-leader cluster for MariaDB. It provides a high-availability (HA) database system.
MariaDB Galera Cluster is powered by:
- Multipule MariaDB servers
- Libraries are developed by Codership
Simple Image
architecture-beta group cluster[Galera Cluster] group client[Client] service app(server)[Application] in client service node1(database)[Node1] in cluster service node2(database)[Node2] in cluster service node3(database)[Node3] in cluster node1:B <--> T:node2 node1:B <--> T:node3 node2:L <--> R:node3 app{group}:R <--> L:node1{group}
Deploy Using docker-compose
File Structure1
1
2
3
4
5
6
7
8
.
├──docker
│ └──db
│ └──conf
│ ├──node1.cnf
│ ├──node2.cnf
│ └──node3.cnf
└── compose.yml
compose.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
services:
node1:
container_name: node1
hostname: node1 # to connect each node
build: ./docker/db
volumes:
- ./docker/db/conf/node1.cnf:/etc/mysql/conf.d/my.cnf # mount confing
environment:
MARIADB_ROOT_PASSWORD: root
MARIADB_DATABASE: root
command: --wsrep-new-cluster # Start as a starter of Galera Cluster
node2:
container_name: node2
hostname: node2
build: ./docker/db
volumes:
- ./docker/db/conf/node2.cnf:/etc/mysql/conf.d/my.cnf
environment:
MARIADB_ROOT_PASSWORD: root
MARIADB_DATABASE: root
depends_on:
- node1
node3:
container_name: node3
hostname: node3
build: ./docker/db
volumes:
- ./docker/db/conf/node3.cnf:/etc/mysql/conf.d/my.cnf
environment:
MARIADB_ROOT_PASSWORD: root
MARIADB_DATABASE: root
depends_on:
- node1
- node2
node1.cnf
1
2
3
4
5
6
7
8
9
10
[mysqld]
binlog_format=ROW
[galera]
wsrep_on=ON
wsrep_cluster_name=my_galera
wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_node_name=node1
wsrep_node_address=node1
wsrep_cluster_address=gcomm://node1,node2,node3
Dockerfile
1
2
FROM mariadb:latest
RUN apt-get update && apt-get install -y vim galera-4
Start the Cluster
To start the cluster, run the following commands:
1
2
3
4
5
6
7
8
# 1. Build containers
docker-compose build
# 2. Run containers
docker-compose up -d
# 3. Login to DB container
docker-compose exec node1 bash # or node2, node3
Check Status
To check the cluster status, login to MariaDB and run the following query:
1
2
3
4
5
6
7
8
9
10
# 1. Login to MariaDB
mariadb -uroot -proot
# 2. Check Galera Cluster Status
MariaDB [(none)]> SHOW GLOBAL STATUS LIKE 'wsrep_cluster_size';
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| wsrep_cluster_size | 3 |
+--------------------+-------+
Now you’re ready!
If you can see wsrep_cluster_size = 3, now you are ready to use local MariaDB Galera Cluster! You can test how MariaDB Galera Cluster work with this environment!
If you saw value is not 3, please check logs with the following command.
1
2
# You can specify container with node1 or node2 or node3
docker-compose logs -f
Next Plan: Set up for DevOps
Now we have a very simple local MariaDB Galera Cluster. Next plan is to add Proxy & Monitor services for DevOps.