We regularly get questions about how to set up a Galera cluster with just 2 nodes.
The documentation clearly states you should have at least 3 Galera nodes to avoid network partitioning. But there are some valid reasons for considering a 2 node deployment, e.g., if you want to achieve database high availability but have a limited budget to spend on a third database node. Or perhaps you are running Galera in a development/sandbox environment and prefer a minimal setup.
Galera implements a quorum-based algorithm to select a primary component through which it enforces consistency. The primary component needs to have a majority of votes, so in a 2 node system, there would be no majority resulting in split brain. Fortunately, it is possible to add a garbd (Galera Arbitrator Daemon), which is a lightweight stateless daemon that can act as the odd node. Arbitrator failure does not affect the cluster operations and a new instance can be reattached to the cluster at any time. There can be several arbitrators in the cluster.
ClusterControl has support for deploying garbd on non-database hosts.
Normally a Galera cluster needs at least three hosts to be fully functional, however, at deploy time, two nodes would suffice to create a primary component. Here are the steps:
- Deploy a Galera cluster of two nodes,
- After the cluster has been deployed by ClusterControl, add garbd on the ClusterControl node.
You should end up with the below setup:
Deploy the Galera Cluster
Go to the ClusterControl Deploy section to deploy the cluster.
After selecting the technology that we want to deploy, we must specify User, Key or Password and port to connect by SSH to our hosts. We also need the name for our new cluster and if we want ClusterControl to install the corresponding software and configurations for us.
After setting up the SSH access information, we must select vendor/version and we must define the database admin password, datadir and port. We can also specify which repository to use.
Even though ClusterControl warns you that a Galera cluster needs an odd number of nodes, only add two nodes to the cluster.
Once deployment is complete, install garbd on the ClusterControl host. We have the option to deploy garbd from ClusterControl, but this option won’t work if we want to deploy it in the same ClusterControl server. This is to avoid some issue related to the database versions and package dependencies.
So, we must install it manually, and then import garbd to ClusterControl.
Let’s see the manual installation of Percona Garbd on CentOS 7.
Create the Percona repository file:
$ vi /etc/yum.repos.d/percona.repo [percona-release-$basearch] name = Percona-Release YUM repository - $basearch baseurl = http://repo.percona.com/release/$releasever/RPMS/$basearch enabled = 1 gpgcheck = 0 [percona-release-noarch] name = Percona-Release YUM repository - noarch baseurl = http://repo.percona.com/release/$releasever/RPMS/noarch enabled = 1 gpgcheck = 0 [percona-release-source] name = Percona-Release YUM repository - Source packages baseurl = http://repo.percona.com/release/$releasever/SRPMS enabled = 0 gpgcheck = 0
Then, install the Percona XtraDB Cluster garbd package:
$ yum install Percona-XtraDB-Cluster-garbd-57
Now, we need to configure garbd. For this, we need to edit the /etc/sysconfig/garb file:
$ vi /etc/sysconfig/garb # Copyright (C) 2012 Codership Oy # This config file is to be sourced by garb service script. # A comma-separated list of node addresses (address[:port]) in the cluster GALERA_NODES="192.168.100.192:4567,192.168.100.193:4567" # Galera cluster name, should be the same as on the rest of the nodes. GALERA_GROUP="Galera1" # Optional Galera internal options string (e.g. SSL settings) # see http://galeracluster.com/documentation-webpages/galeraparameters.html # GALERA_OPTIONS="" # Log file for garbd. Optional, by default logs to syslog # Deprecated for CentOS7, use journalctl to query the log for garbd # LOG_FILE=""
Change the GALERA_NODES and GALERA_GROUP parameter according to the Galera nodes configuration. We also need to remove the line # REMOVE THIS AFTER CONFIGURATION before starting the service.
And now, we can start the garb service:
$ service garb start Redirecting to /bin/systemctl start garb.service
Now, we can import the new garbd into ClusterControl.
Go to ClusterControl -> Select Cluster -> Add Load Balancer.
Then, select Garbd and Import Garbd section.
Here we only need to specify the hostname or IP Address and the port of the new Garbd.
Our minimal two-node Galera cluster is now ready!