Ubuntu MariaDB Galera Cluster Install
In this guide we will add two nodes node 4 and 5 to an existing Galera Cluster consisting of 3 nodes as shown here.
And end up with a cluster consisting of 5 nodes as shown here.
Prerequisites
We will be adding two more nodes (node 4 and 5) simultaneously and a little preparation is needed on the existing Galera cluster.
On The Existing Cluster
On every node on the existing cluster add the new ip addresses of the new nodes we are adding.
vi /etc/mysql/conf.d/galera.cnf
Add the ips so the lhe line looks like this.
wsrep_cluster_address = "gcomm://node1_ip,node2_ip,node3_ip,node4_ip,node5_ip"
And then restart mariadb on all nodes on the existing cluster in order for the changes to take effect.
On The New Nodes
On the new nodes (node 4 and 5) that we are adding 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
Configuring the new nodes
On node 4
vi /etc/mysql/conf.d/galera.cnf
Add the following lines.
[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,node4_ip,node5_ip" # Galera Synchronization Configuration wsrep_sst_method = rsync # Galera Node Configuration wsrep_node_address = "node4_ip" wsrep_node_name = "node4" wsrep_sst_donor = "node3"
On node 5
vi /etc/mysql/conf.d/galera.cnf
Add the following lines.
[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,node4_ip,node5_ip" # Galera Synchronization Configuration wsrep_sst_method = rsync # Galera Node Configuration wsrep_node_address = "node5_ip" wsrep_node_name = "node5" wsrep_sst_donor = "node3"
Important as you can see we are using a specific donor “node3” you need to use the name of the donor node and not the ip address. If we were not using a specific donor node the Galera cluster would select one as random as donor node. Donor nodes are beeing set to “Read Only” so it makes sense to specify a specifik donor node.
Once the configuration is in place restart mariadb on node 4 and node 5. They should start replicating using node 3 as donor.
Note it is also possible to use more than 1 donor node this can be done like this.
wsrep_sst_donor = "node3,node2"
Optional Once everything is up and running you can delete the “wsrep_sst_donor” line in /etc/mysql/conf.d/galera.cnf
Verify the cluster size
mysql -u root -p
SHOW STATUS LIKE 'wsrep_cluster_size';
+--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 5 | +--------------------+-------+