Galera Cluster mit Ubuntu 12.04 64bit und MySQL 5.5 – Teil 2 Loadbalancer/Proxy

Nun da Galera mittlerweile auf vier Nodes läuft, wäre ein Loadbalancer eine gute Sache. HAProxy fand ich etwas zu mächtig für mein Anliegen, obwohl er  von vielen Benutzern als Option präferiert wird . Getestet habe ich mysql-proxy direkt von Mysql und glbd von Galera. Beides scheint größtenteils problemlos zu laufen. Bei einfachen Benchmarks, konnte ich bisher keine gravierenden Unterschiede erkennen, dazu aber mehr in Teil 4. Mysql-proxy ist seit längerer Zeit im Alphastatus und glbd liegt in der Version 0.7.5 vor. Also beides ausbaufähig ;-). Mein Favorit ist glbd, weil er genau das tut, was er soll und nicht unnötig viele Einstellung benötigt oder bietet. Die Syntax ist recht einfach:

glbd --daemon --threads 8 --control 127.0.0.1:4041 123.123.123:4040 node1:3306:3 node2:3306:3 node3:3306:3 node4:3306:1 

Ein –help zeigt alle Optionen:

glbd --help
Usage:
glbd [OPTIONS] LISTEN_ADDRESS [DESTINATION_LIST]
OPTIONS:
--help                  this help message.
--daemon                run as a daemon.
--fifo <fifo name>      name of the FIFO file for control.
--control [HOST:]PORT   listen for control requests on this address.
--threads N             number of working threads (connection pools).
--source_tracking       turn on source tracking: route connections from one
source to the same destination.
--verbose               turn on verbose reporting.
--version               print program version.
LISTEN_ADDRESS:
[IP:]PORT               where to listen for incoming TCP connections.
DESTINATION_LIST:
[H1[:P1[:W1]]] [H2[:P2[:W2]]]...  - a space-separated list of destinations
in the form address:port:weight.

Die Optionen nach Bedarf anpassen. Meiner Meinung nach empfiehlt es ich das weight eines nodes relativ niedrig anzusetzen. Dieser kann dann primär für Backups oder als Donor  fuer zusätzliche Nodes dienen, da er während des Syncs mit einem neuen Node im readonly mode ist. Statusabfragen von glbd macht man z.B. mit:

# echo "getinfo" | nc -q 1 127.0.0.1 4041
Router:
----------------------------------------------------
Address       :   weight   usage   conns
node1:3306  :    3.000   0.000     0
node2:3306  :    3.000   0.000     0
node3:3306  :    3.000   0.000     0
node4:3306  :    1.000   0.000     0
----------------------------------------------------
Destinations: 4, total connections: 0

Weiter Informationen finden sich im Readme.  Sehr gute Informationen und eine deutlich detaillierte Anleitung zu glbd findet man unter fromdual.com/mysql-and-galera-load-balancer. Dort ist auch ein Skript hinterlegt um glbd zu administrieren. Bricht ein Node weg, leitet glbd die Anfrage transparent an einen verfügbaren Node weiter. Leider ist die Dokumentation von glbd etwas dürftig, daher werden sich viele Verhaltensweisen erst im Laufe von diversen Tests zeigen. Probleme können eventuell auftauchen wenn man mit Pacemaker/Corosync arbeitet, da glbd sich (zu Recht) weigert,  an ein nicht existierendes Interface gebunden zu werden (Stichwort “crm colocation”), dazu mehr in Teil 3.

Mysql-Proxy ist als Paket bei Ubuntu 12.04 dabei, zwar “nur” die 0.8.1, dafür  genießt man die Vorteile der Paketverwaltung. Konfiguriert wird mysql-proxy in der

/etc/default/mysql-proxy:

ENABLED="true"
OPTIONS="--proxy-skip-profiling --proxy-address=123.123.123.123:4040 --proxy-backend-addresses=node1:3306 --proxy-backend-addresses=node2:3306 --proxy-backend-addresses=node3:3306 --proxy-backend-addresses=node4:3306 --admin-username=superadmin --admin-password=imnotshyijustdontlikeu --admin-lua-script=/usr/lib/mysql-proxy/lua/admin.lua"

Damit läuft  erst mal die Proxyfunktion. Mysql-proxy kann deutlich mehr als nur  Proxy sein. So kann er zum Beispiel die Mysqlanfragen nach read-write selektieren und mit der --proxy-read-only-backend-addresses Option auf dedizierte Readonly “Slaves” leiten. Die Dokumentation ist sehr gut, dank auch der  MySQL Integration. MySQL Anfragen können mit Hilfe von Lua Skripten direkt manipuliert  werden. Zum lesen nochmal zwei Links zu mysql-proxy, hier und hier. Der Beitrag von mysqlperformanceblog.com  ist von Juni 2009, daher wurde noch die 0.7.1 getestet. Zu eigenen Benchmarks komme ich in Teil 4.

Ob nun glbd, mysql-proxy, pen oder haproxy, hängt vom Einsatzzweck und System ab. Sicherlich gibt es noch etliche andere Lösungen für ein Mysql Proxy/Loadbalancer Szenarien. Schaut man sich kommerzielle Anbieter an, wird man sicherlich hinter all den Webinterfaces, Firmenlogos und Gedöhns, häufig ein Programm aus der Open Source Welt finden, was dort still und unscheinbar seinen Dienst verrichtet. Teil 3 handelt von Pacemaker und IP Failover und Teil 4 schließlich von Benchmaks zu unterschiedlichen Konfigurationen. Ein wesentlicher Faktor beim Einrichten einer solchen Umgebungen ist natürlich die Zeit, die man dafür zur Verfügung hat. Sollte ich komplett auf dem Holzweg sein, sind Kommentare natürlich willkommen, ansonsten natürlich auch.

Link zu Teil 1:

http://exdc.net/2012/08/06/galera-cluster-mit-ubuntu-12-04-64bit-und-mysql-5-5-teil-1/

One thought on “Galera Cluster mit Ubuntu 12.04 64bit und MySQL 5.5 – Teil 2 Loadbalancer/Proxy”

Leave a Reply

Your email address will not be published. Required fields are marked *