Table of Contents
Ubuntu MariaDB Galera Cluster Install
We are going to set up a Galera Cluster with 3 nodes as shown here. Be aware 3 nodes is the minimum. If you are unsure if you need a Galera cluster or a just Primary Replica setup click [Here]
Install MariaDB
Run the following using sudo or root.
apt update apt install -y mariadb-server mariadb-client systemctl start mariadb.service systemctl enable mariadb.service mysql_secure_installation
Apply the following when running mysql_secure_installation
Enter current password for root (enter for none): press enter Switch to unix_socket authentication [Y/n] press n Change the root password? [Y/n] press y New password: enter new root password Re-enter new password: enter new root password again Remove anonymous users? press y Disallow root login remotely? press y Remove test database and access to it? press y Reload privilege tables now? press y
Configure Galera Cluster
Now we need to create the Galera configuration so that the nodes can communicate with each other.
vi /etc/mysql/conf.d/galera.cnf
Add the following lines.
Note At the present time only Binlog Format ROW is supported.
On Node 1
[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 = "galera_cluster" wsrep_cluster_address = "gcomm://node1_ip,node2_ip,node3_ip" # Galera Synchronization Configuration wsrep_sst_method = rsync # Galera Node Configuration wsrep_node_address = "node1_ip" wsrep_node_name = "node1"
On Node 2
Same as node 1 except for these 2 lines.
wsrep_node_address = "node2_ip" wsrep_node_name = "node2"
On Node 3
Same as node 1 except for these 2 lines.
wsrep_node_address = "node3_ip" wsrep_node_name = "node3"
Initialize The Galera Cluster
Stop MariaDB on all nodes.
systemctl stop mariadb.service
On the first node, initialize the MariaDB Galera cluster with the following command.
galera_new_cluster
Check the status of the cluster.
mysql -u root -p
SHOW STATUS LIKE 'wsrep_cluster_size';
You should get an output similar to this one.
+--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 1 | +--------------------+-------+
On the second node start MariaDB.
systemctl start mariadb.service
And again check the status.
mysql -u root -p
SHOW STATUS LIKE 'wsrep_cluster_size';
You should get an output similar to this one. Indicating we have 2 nodes running.
+--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 2 | +--------------------+-------+
Do the same for the rest of the nodes in the cluster.
Verify Cluster Replication
On the first node create some databases with the following command.
mysql -u root -p
CREATE DATABASE testdb1; CREATE DATABASE testdb2; exit
Now lets check if the databases are present on the rest of the nodes. On each node you can check like this.
mysql -u root -p
SHOW DATABASES;
You should see the databases we created on node 1 being replicated on the rest of the nodes.
+--------------------+ | Database | +--------------------+ | testdb1 | | testdb1 | | information_schema | | mysql | | performance_schema | +--------------------+