I am going to show you on how to install MariaDB Cluster (with Galera) in Ubuntu Precise (12.04) LTS 64bit. You need at least 3 hosts running together to form a reliable cluster.
Hosts list:
maria1 – 192.168.10.101
maria2 – 192.168.10.102
maria3 – 192.168.10.103
Prepare Hosts
In all hosts, this is my /etc/hosts definition:
192.168.10.101 maria1 maria1.mycluster.com 192.168.10.102 maria2 maria2.mycluster.com 192.168.10.103 maria3 maria3.mycluster.com |
Install MariaDB Cluster
1. Install the GPG key required by apt:
$ sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 1BB943DB |
2. Add the apt repository:
$ sudo add-apt-repository 'deb http://mirror.stshosting.co.uk/mariadb/repo/5.5/ubuntu precise main' |
3. Get the latest repo:
4. Install MariaDB Cluster and related packages:
$ sudo apt-get install -y galera mariadb-galera-server-5.5 mariadb-client-5.5 libmariadbclient18 mariadb-client-core-5.5 rsync netcat-openbsd |
** Make sure you put the same MySQL root password on all hosts
Install Percona Xtrabackup
1. We are going to use Xtrabackup to perform State Snapshot Transfer (SST). Install GPG key for Percona:
$ sudo apt-key adv --keyserver keys.gnupg.net --recv-keys 1C4CBDCDCD2EFD2A |
2. Add the apt repository for Percona:
$ sudo add-apt-repository 'deb http://repo.percona.com/apt precise main' |
3. Update and install Percona Xtrabackup:
$ sudo apt-get update && sudo apt-get -y install percona-toolkit percona-xtrabackup |
Configure MariaDB Cluster
1. Once the installation completed, you need to comment following lines in /etc/mysql/my.cnf:
#bind-address #default_storage_engine #query_cache_limit #query_cache_size |
2. Add following lines for wsrep configuration options in /etc/mysql/my.cnf under [mysqld] directive:
binlog_format=ROW default_storage_engine=innodb innodb_autoinc_lock_mode=2 innodb_locks_unsafe_for_binlog=1 innodb_doublewrite=1 |
3. Add following lines into specific node under [mysqld] directive:
maria1:
# wsrep provider configuration wsrep_provider=/usr/lib/galera/libgalera_smm.so wsrep_provider_options="gcache.size=256M; gcache.page_size=128M" wsrep_cluster_address=gcomm:// wsrep_cluster_name="MariaDB_Cluster" wsrep_node_address="maria1" wsrep_node_name="maria1" wsrep_sst_method=xtrabackup wsrep_sst_auth="root:MyR00tPasswd" wsrep_node_incoming_address=192.168.10.101 wsrep_sst_receive_address=192.168.10.101 wsrep_slave_threads=16 |
maria2:
# wsrep provider configuration wsrep_provider=/usr/lib/galera/libgalera_smm.so wsrep_provider_options="gcache.size=256M; gcache.page_size=128M" wsrep_cluster_address=gcomm://maria1 wsrep_cluster_name="MariaDB_Cluster" wsrep_node_address="maria2" wsrep_node_name="maria2" wsrep_sst_method=xtrabackup wsrep_sst_auth="root:MyR00tPasswd" wsrep_node_incoming_address=192.168.10.102 wsrep_sst_receive_address=192.168.10.102 wsrep_slave_threads=16 |
maria3:
# wsrep provider configuration wsrep_provider=/usr/lib/galera/libgalera_smm.so wsrep_provider_options="gcache.size=256M; gcache.page_size=128M" wsrep_cluster_address=gcomm://maria1 wsrep_cluster_name="MariaDB_Cluster" wsrep_node_address="maria3" wsrep_node_name="maria3" wsrep_sst_method=xtrabackup wsrep_sst_auth="root:MyR00tPasswd" wsrep_node_incoming_address=192.168.10.103 wsrep_sst_receive_address=192.168.10.103 wsrep_slave_threads=16 |
Initialize the Cluster
1. Login to maria1 to initialize the cluster by restarting the service:
$ sudo service mysql restart |
2. Login to maria2 and maria3 and restart MySQL. This will allow maria2 and maria3 to perform SST from maria1:
$ sudo service mysql restart |
3. Login to MariaDB console and check for following values:
MariaDB [(none)]> show status like 'wsrep_%'; |
And you should see following output:
| wsrep_local_state | 4 | | wsrep_local_state_comment | Synced | | wsrep_incoming_addresses | 192.168.10.101:3306,192.168.10.102:3306,192.168.10.103:3306 | | wsrep_cluster_size | 3 | | wsrep_ready | ON | |
You could now point your web server or application server to one of MariaDB cluster node to query.