Basic Docker Swarm for mysql cluster

in mysql •  6 months ago 

I have created a very basic docker swarm project for mysql HA and Replication
It can be used in any OS

Please find more details here https://gitlab.com/krishiv-g/docker-swarm-mysql-8

Docker Swarm Setup Guide

This guide outlines the steps needed to set up a Docker Swarm environment for a MySQL database cluster.

Step 1: Create a Docker Overlay Network

Run the following command on the Docker Swarm manager node to create an overlay network named swarmnet:

docker network create --driver overlay swarmnet

Step 2: Label the Nodes

docker node update --label-add mydb1=true node01
docker node update --label-add mydb2=true node02
docker node update --label-add mydb3=true node03

Step 3: Create Storage Volumes

docker volume create dbdata
docker volume create dblog

Step 4: MySQL Configuration Files on each node

mydb1.cnf (for node01):

nano mydb1.cnf 
[mysqld]
server-id=1
binlog-format=ROW
log-bin=mysql-bin
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys
binlog-do-db=mydb

mydb2.cnf (for node02):

nano mydb2.cnf 
[mysqld]
server-id=2
log-bin=mysql-bin
relay-log=mysql-relay-bin
relay-log-index=mysql-relay-bin.index
log-slave-updates=1
read-only=1
replicate-ignore-db=mysql
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
replicate-ignore-db=sys
replicate-do-db=mydb

mydb3.cnf (for node03):

nano mydb3.cnf 
[mysqld]
server-id=3
log-bin=mysql-bin
relay-log=mysql-relay-bin
relay-log-index=mysql-relay-bin.index
log-slave-updates=1
read-only=1
replicate-ignore-db=mysql
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
replicate-ignore-db=sys
replicate-do-db=mydb

Step 4 : Deploy Containers and Services

docker stack deploy -c docker-compose.yml db

Step 5 : Setup MySQL instances

Create a “replica” user on the Primary instance mydb1

SSH inside the Docker container on node01

docker ps -a

get the container ID from the output , then ssh in the container

docker exec -it 2b9de7807a6e /bin/bash

from inside the container login as mysql root

mysql -u root -p 
CREATE USER 'repli'@'%' IDENTIFIED WITH mysql_native_password BY 'SECURE_REPLI_PASSWORD';
GRANT REPLICATION SLAVE ON *.* TO 'repli'@'%';

create database

CREATE DATABASE mydb;

Get the replication checkpoint from the Primary instance mydb1

SHOW MASTER STATUS;

The output should look something like below. We’ll need the file name and position to setup mydb2 and mydb3:

File: mysql-bin.000003
Position: 573
Binlog_Do_DB: mydb
Binglog_IgnoreDB: mysql,information_schema,performance_schema,sys

step 6: Create the database on the Replica instances

CREATE DATABASE mydb;

Step 7 : Setup Replication on both nodes

STOP REPLICA;
CHANGE REPLICATION SOURCE TO
SOURCE_HOST = 'mydb1',
SOURCE_USER = 'repli',
SOURCE_PASSWORD = 'SECURE_REPLI_PASSWORD',
SOURCE_LOG_FILE = 'mysql-bin.000003',
SOURCE_LOG_POS = 573; 
START REPLICA;

Follow me for more tutorials and guides

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!