LXD offers a quick-to-deploy, highly-efficient environment in which we can host a fault-resistant Galera cluster. In this hands-on lab, we’ll do just that by creating and configuring an initial container, then using that as a basis for a three-node Galera cluster.
Learning Objectives
Successfully complete this lab by achieving the following learning objectives:
- Configure the Initial Cluster Containers
Create the container:
lxc launch ubuntu:18.04 galera01
Access the container and run initial updates:
lxc exec galera01 -- bash apt update apt upgrade
Add the MariaDB repository:
apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8 add-apt-repository 'deb [arch=amd64,ppc64el] http://ftp.utexas.edu/mariadb/repo/10.1/ubuntu bionic main' apt update
Install MariaDB:
apt install mariadb-server -y
Run
mysql_secure_installation
:mysql_secure_installation
Update the
innodb_buffer_pool_size
for the MariaDB configuration:vim /etc/mysql/my.cnf
innodb_buffer_pool_size = 16M
Configure the firewall:
ufw enable ufw allow 3306/tcp ufw allow 4444/tcp ufw allow 4567/tcp ufw allow 4568/tcp ufw allow 4567/udp ufw status
Exit the container and take a snapshot:
exit lxc snapshot galera01 init
Create the two additional containers and start them:
lxc copy galera01/init galera02 lxc copy galera01/init galera03 lxc start galera02 lxc start galera03
- Configure Galera
View all containers and make note of each IP address:
lxc list
Open the
galera.cnf
configuration in thecloud_user
‘s home directory and update thewsrep_cluster_address
to list all IP addresses. Update thewsrep_node_address
andwsrep_node_name
for thegalera01
node:vim 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="galera_cluster" wsrep_cluster_address="gcomm://<IP_ADDRESS>,<IP_ADDRESS>,<IP_ADDRESS>" # Galera Synchronization Configuration wsrep_sst_method=rsync # Galera Node Configuration wsrep_node_address="<IP_ADDRESS>" wsrep_node_name="galera01"
Push to the first container:
lxc file push galera.cnf galera01/etc/mysql/conf.d/galera.cnf
Update the configuration file again, changing the
address
andname
so it works withgalera02
:vim galera.cnf
wsrep_node_address="<IP_ADDRESS>" wsrep_node_name="galera02"
lxc file push galera.cnf galera02/etc/mysql/conf.d/galera.cnf
Do the same for
galera03
:vim galera.cnf
wsrep_node_address="<IP_ADDRESS>" wsrep_node_name="galera03"
lxc file push galera.cnf galera03/etc/mysql/conf.d/galera.cnf
- Start the Cluster
Stop MySQL on all nodes:
lxc exec galera01 -- systemctl stop mysql lxc exec galera02 -- systemctl stop mysql lxc exec galera03 -- systemctl stop mysql
Start the Galera cluster:
lxc exec galera01 -- galera_new_cluster lxc exec galera02 -- systemctl start mysql lxc exec galera03 -- systemctl start mysql
To confirm that everything is working, view the cluster size on all containers:
lxc exec galera01 -- mysql -u root -p -e "show status like 'wsrep_cluster_size'" lxc exec galera02 -- mysql -u root -p -e "show status like 'wsrep_cluster_size'" lxc exec galera03 -- mysql -u root -p -e "show status like 'wsrep_cluster_size'"