Installing MariaDB Galera Cluster on Debian/Ubuntu

This is a HOWTO about installing MariaDB Galera Cluster on Debian/Ubuntu.
It is because a lot of people had problems installing MariaDB Galera Cluster.
In the end elenst from #maria on freenode forced me to write a Howto :)
You will find out, installing MariaDB Galera Cluster is in fact quite easy and some kind of boring in the end.
This Howto is written (tested) on Debian 7.1 (Wheezy) and Ubuntu 12.04 (Precise).

What we need

In our setup we assume 3 nodes (node01, node02, node03) with one interface.
We assume following IP addresses: 172.16.8.5, 172.16.8.6 and 172.16.8.4.
We need three packages installed on all nodes:

rsync

galera

mariadb-galera-server

As Galera does not ship with the distribution repositories,
go for the repo configurator and follow the instructions to include the
repository fitting your system.
Keep in mind to Choose "5.5" in Step 3 (Choose a Version). Doing this you can jump directly to Install Packages

Install Packages

After you installed the packages you have a running MariaDB/MySQL on each node.
But none of them is configured to run in/as a Galera Cluster.

Configuring Galera

So we got to do some configuration next.
There is a MySQL/MariaDB configuration part and one part to configure Galera (starting with wsrep_).
As we do the most basic and simple installation in this Howto, it is sufficient you just change the IP's
(Remember: 172.16.8.5, 172.16.8.6, 172.16.8.4) with your IP's.
This will be needed to define the wsrep_cluster_address Variable. The list of nodes a starting mysql contacts to get into the cluster.

The following configuration file has to be distributed on all nodes.
We use a separate configuration file /etc/mysql/conf.d/galera.cnf with following settings:

FYI: The shared library for wsrep_provider is provided by the installed galera package.
We could also change the cluster name by changing the value of wserp_cluster_name to fit our style.
This setting also works as a shared secret to control the access to the cluster.
With wsrep_cluster_address you see the IP addresses of our setup.
The wsrep_sst_method tells what method to use to synchronise the nodes. While there are also mysqldump and xtrabackup available.
I prefer rsync because it is easy to configure (i.e. it does not need any credentials set on the nodes).
There will be a time you are going to consider using the xtrabackup method. Don't forget to install xtrabackup then.

Having fun with Debian/Ubuntu init scripts

But we've got to fix some things because Debian/Ubuntu oddities.
As we saw already the error while starting the node.
What happened?
Debian/Ubuntu uses a special user ('debian-sys-maint'@'localhost') in there init script.
Where the credentials for that user are stored in /etc/mysql/debian.cnf.
This user is used to make some checks starting MySQL. Checks I don't think belong into a service script anyway.
We could simply ignore it, but the user user is also used to shutdown the mysqld.
This is also not required, as a SIGTERM is sufficient to shutdown the mysqld :/
As we copied the data from node01 to all other nodes, the credentials in /etc/mysql/debian.cnf are
not fitting on node02 and node03.
Thats why we will not be able to shutdown mysql on any of these nodes.