Galera Cluster mit Ubuntu 12.04 64bit und MySQL 5.5 – Teil 1

Warum  Ubuntu? Weil ich mal etwas einigermaßen aktuelles Testen wollte ;-). Tatsächlich lief mein erster Test mit Galera und MySQL 5.1 unter drei Debian Nodes ohne großen Aufwand. Ich beschränke mich auf die Installation des ersten Nodes, da die Installation eines weiteren Nodes nur minimal abweicht. Zum Testen sollte man 3-4 Maschinen zur Verfügung haben.

Einige Daten über Galera von der Entwicklerseite:

MySQL/Galera is synchronous multi-master cluster for MySQL/InnoDB database, having features like:

  • Synchronous replication
  • Active-active multi-master topology
  • Read and write to any cluster node
  • Automatic membership control, failed nodes drop from the cluster
  • Automatic node joining
  • True parallel replication, on row level
  • Direct client connections, native MySQL look & feel

Benefits

These features yield un-seen benefits for a DBMS clustering solution:

  • No slave lag
  • No lost transactions
  • Both read and write scalability
  • Smaller client latencies

Von codership.com/products/mysql_galera die benötigten Pakete laden, zur Zeit:

galera-23.2.1-amd64.deb
mysql-server-wsrep-5.5.23-23.6-amd64.deb

Das System vorbereiten:

aptitude install libaio1 libssl0.9.8 libdbi-perl libdbd-mysql-perl mysql-client libmysqlclient18 mysql-common libplrpc-perl libnet-daemon-perl

Galera und Mysql installieren:

dpkg -i galera-23.2.1-amd64.deb mysql-server-wsrep-5.5.23-23.6-amd64.deb

In der /etc/mysql/my.cnf

bind-address           = 127.0.0.1

anpassen bzw. auskommentieren.

Mysql starten

/etc/init.d/mysql start

mysqladmin -u root password 'superpassword'

mysqladmin -u root -p -h hostname password 'superpassword'

Ich habe einen User fuer die Repliaktion auf jedem Node angelegt. Zum testen kann man natürlich auch einfach den Mysqladminuser nehmen


mysql> SET wsrep_on = OFF; grant all on *.* to replikator@'%' identified by 'thisisnotfacebookandimnotyourfriend';

In der /etc/mysql/conf.d/wsrep.cnf

# Full path to wsrep provider library or 'none'
#wsrep_provider=none
wsrep_provider=/usr/lib/galera/libgalera_smm.so

# Logical cluster name. Should be the same for all nodes.
wsrep_cluster_name="imnotshyijusdontlikeyou_cluster"

# Group communication system handle
wsrep_cluster_address="gcomm://" #Dies nur beim ersten Server, bei den anderen trägt man dort die Adresse eines anderen Nodes ein. Spaeter sollte man die IP auch beim ersten Node anpassen

# Group communication system handle# SST authentication string. This will be used to send SST to joining nodes.
# Depends on SST method. For mysqldump method it is root:
wsrep_sst_auth=replikatior:thisisnotfacebookandimnotyourfriend #hier muss natuerlich ein user mit den benötigten Rechten eingetragen werden, im Zweifel root

wsrep_cluster_address sollte später nicht leer bleiben.

Danach

/etc/init.d/mysql restart 

Am besten tail -f /varlog/syslog auf den einzelnen Maschinen laufen lassen um zu schauen ob Fehler auftauchen. Zum testen Datenbanken auf den einzelnen Nodes anlegen und mit Daten füllen.

Größtenteils habe ich mich an http://blog.causal.ch/2012/02/installing-mysql-galera-on-debian-60.html orientiert. Empfehlen kann man natürlich generell die Galera Seite und den Artikel im Admin -Magazin 04/2012 über Galera Cluster für Mysql. Die einzelnen Optionen in der/etc/mysql/conf.d/wsrep.cnf sollte man sich nochmal genauer anschauen.    Teil 2 folgt dann (hoffentlich) mit garbd, pen, HAproxy, Splitbrain Problem und ein-zwei mehr Erfahrungen.

mysql logs und Replikation

Kommt man in die Situation, dass man raus finden will, was man denn nun genau fuer Mysql Kommandos in den letzten Tagen so ausgefuehrt hat, helfen die binlog Dateien in /var/log/mysql/.

mysqlbinlog mysql-bin.000001

Vorausgesetzt man nutzt log_bin und  STATEMENT als logging Format in der my.cnf . Vorher aber den Zeitstempel der Logdateien anschauen, um die Datensuche etwas einzugrenzen. Nutzt man row-based als Replikationsvefahren hat man keine  Logdateien zum ueberpruefen. Die Frage ob man nun row-based oder statement-based als Verfahren nutzt ist eine andere.  Beide Verfahren, row- und statement-based, haben Ihre Vor- und Nachteile. Man kommt also nicht drumherum sich damit etwas ausgiebiger zu beschaeftigen.

Links zum Thema row-based Replkation:

http://www.databasejournal.com/features/mysql/article.php/3922266/Comparing-MySQL-Statement-Based-and-Row-Based-Replication.htm

http://dev.mysql.com/doc/refman/5.1/de/replication-row-based.html

http://dev.mysql.com/doc/refman/5.1/en/replication-sbr-rbr.html

http://albertech.net/2011/10/upgrading-debian-lenny-to-squeeze-with-mysql-for-row-based-replication/

http://www.ovaistariq.net/528/statement-based-vs-row-based-replication/

http://www.mysqlperformanceblog.com/2010/05/06/debugging-problems-with-row-based-replication/