How to setup mysql galera cluster on ubuntu18.04

LORY
3 min readSep 20, 2020

--

setup mysql on all 3 vm

Prepare 3 vm

First_node : 192.168.115.128

Second_node : 192.168.115.129

Third_node : 192.168.115.130

Install mysql on all 3 vm

sudo apt-key adv — keyserver keyserver.ubuntu.com — recv BC19DDBA

sudo nano /etc/apt/sources.list.d/galera.list

deb http://releases.galeracluster.com/mysql-wsrep-5.7/ubuntu bionic main

deb http://releases.galeracluster.com/galera-3/ubuntu bionic main

sudo nano /etc/apt/preferences.d/galera.pref

# Prefer Codership repository

Package: *

Pin: origin releases.galeracluster.com

Pin-Priority: 1001

sudo apt update

sudo apt install galera-3 mysql-wsrep-5.7

Disable apparmor and remove mysql definition loaded in kernel

sudo ln -s /etc/apparmor.d/usr.sbin.mysqld /etc/apparmor.d/disable/

sudo apparmor_parser -R /etc/apparmor.d/usr.sbin.mysqld

prepare configuration on all 3 node

sudo nano /etc/mysql/conf.d/galera.cnf

[mysqld]

binlog_format=ROW

default-storage-engine=innodb

innodb_autoinc_lock_mode=2

bind-address=0.0.0.0

# Galera Provider Configuration

wsrep_on=ON

wsrep_provider=/usr/lib/galera/libgalera_smm.so

# Galera Cluster Configuration

wsrep_cluster_name=”test_cluster”

wsrep_cluster_address=”gcomm://{first_ip},{second_ip},{third_ip}”

# Galera Synchronization Configuration

wsrep_sst_method=rsync

# Galera Node Configuration

wsrep_node_address=”{ip_address}”

wsrep_node_name=”{node name}”

Replace value wrapped with ‘{}’ with your node values

Ufw config on 3 node

sudo ufw status

If status inactive then is fine

If active , add below ports in ufw

sudo ufw allow 3306,4567,4568,4444/tcp

sudo ufw allow 4567/udp

Start first node — 192.168.115.128

sudo mysqld_bootstrap

Check cluster size

mysql -u root -p -e “SHOW STATUS LIKE ‘wsrep_cluster_size’”

Join second node 192.168.115.129 into cluster

sudo systemctl start mysql

Check cluster size again

mysql -u root -p -e “SHOW STATUS LIKE ‘wsrep_cluster_size’”

Join third node 192.168.115.130 into cluster

sudo systemctl start mysql

Check cluster size again

mysql -u root -p -e “SHOW STATUS LIKE ‘wsrep_cluster_size’”

Configure Start on boot on each node

sudo systemctl enable mysql

Test

Login to first_node 192.168.115.128

Run

mysql -u root -p -e ‘CREATE DATABASE test;

CREATE TABLE test.person ( id INT NOT NULL AUTO_INCREMENT, name VARCHAR(50) ,PRIMARY KEY(id));

INSERT INTO test.person (name) VALUES (“jeo”);’

Login on second_node 192.168.115.129

mysql -u root -p -e ‘SELECT * FROM test.person;’

should see the data inserted from first node

Now Insert row from second node (192.168.115.129)

mysql -u root -p -e ‘INSERT INTO test.person (name) VALUES (“mark”);’

Login on third node 192.168.115.130

mysql -u root -p -e ‘SELECT * FROM test.person;’

should see the data inserted from first and second node

Now insert row from third node (192.168.115.130)

mysql -u root -p -e ‘INSERT INTO test.person (name) VALUES (“peter”);’

Login on first node (192.168.115.128) again

mysql -u root -p -e ‘SELECT * FROM test.person;’

should see the newly inserted data from 3rd node

Data is synchronizing correctly between 3 nodes

Done!

--

--

LORY
LORY

Written by LORY

A channel which focusing on developer growth and self improvement

No responses yet