Galera und Docker: 2xHipster ist trotzdem nicht cool!

| 4 Kommentare | Keine TrackBacks

Ahoi,

Es gab die letzte Zeit Blogposts, welche zwei Themen vereinten, die mich interessieren: Docker und Galera. Und offensichtlich finden diese auch in der MySQL Community viel Anklang.

Vorweg ich halte dies für keine gute Kombination. Ganz im Gegenteil um dies halbwegs sauber hinzubekommen ist (noch) viel Aufwand notwendig.

Galera wird als bekannt vorausgesetzt.

Docker nicht einfach eine neue Virtualisierung

Docker ist nicht nur eine Technik, sondern auch ein anderes Paradigma wie Deployments/Container verstanden werden sollen. Das scheinen die bisherigen Blogposts (planetmysql.com) nicht gerafft zu haben.

Was macht Docker?

Mit Docker werden Applikationskontainer - Container aus nur einer Applikation bestehend - erstellt. Als Technik ist schon von LXC bekannt. Auch hier konnte lediglich eine Applikation virtualisiert werden.

Ein paar Punkte

  • Applikationscontainer

  • Images werden durch Dockerfiles gebaut

  • Container werden nicht zur Laufzeit konfiguriert

  • Container werden durch das Ausrollen von neuen Images upgegraded

  • Es gibt noch mehr. Aber das reicht.

Ohne zu sehr ins Detail zu gehen, sollten solche Container als Binaries gesehen werden. Daraus folgt, dass man sich auf diesen Containern nicht einloggt. Die Verbindung läuft wie sonst zu der Applikation üblich. Bei MySQL über den Port. Zwar hat in Docker jeder Container eine IP-Addresse, aber diese ändert sich bei jedem Neustart und wird nicht geroutet. Sie soll auch nicht verwendet werden. Da damit das Feature portable Images zu bauen ad absurdum geführt wird. Zur Kommuikation mit der Aussenwelt ist das Mappen von Ports vorgesehen. Am besten dynamisch an gerade freie Ports.

Wenn wir uns überlegen, dass wir bei einem Galera Knoten 4 Ports zu verwalten haben bekommt das eine Komplexität, welche durch dir Verwendung der volatilen IPs kaschiert wird. Das Problem tritt aber auf, wenn man einen Galera Cluster nicht zum spielen aufbauen will.

Konfiguration Docker

Der goldene Weg Images für Docker zu bauen ist via Dockerfile das passende Image zu bauen. Dies können gerne Umgebungsvariablen oder Optionen auslesen. Diese Dockerfiles sind die Makefiles der Images.

In den Blogs werden Dockerfiles nur halbherzig - Installation von Paketen - genutzt. Diese Lösungen kommen nicht herum sich noch auf die Container zu verbinden und diese zu Konfigurieren. Damit hat das Konfigurationsmanagement seine Rolle wie bei chter Hardware oder VMs behalten :/

Was wurde gebaut?

Die gebauten Galera Cluster haben so einige Unannehmlichkeiten.

  1. Prinzipiell wurden in den Blogpost Galeracluster gebaut indem die Container (nicht das Image) konfiguriert wird.
  2. Der Cluster funktioniert mit den ContainerIPs welche sich bei jedem Restart ändern.
  3. Bedingt durch 2. müssen alle Container auf einem Host laufen. Wo da der Sinn liegt erschließt sich mir nicht.
  4. Woll ihr wirklich eure Datenbank auf Aufs laufen lassen? (Geht für Test, aber für Produktion?)

Nicht so schlimm

Selbstredend kann dies zum Spielen verwendet werden. Nur stellt sich die Frage nach dem Mehrwert.

LXC

Wenn man eh die nicht so um die Dockerphilosophie schert. Hätte auch direkt LXC genommen werden können und gleich über mehrere Hosts verteilen. Die IPs würden keine Probleme bereiten. Die Datenbanken würden auch nicht auf Aufs laufen usw. usw.

Kein Happy End für Docker und Galera

Nö Wir haben pro Instanz 4 Ports zu verwalten. Man könnte

  • Auf verschiedenen Hosts ein 1:1 mapping machen.

Doesn’t scale!

  • Eine Portverwaltung einführen.

Ob die Verwaltung von 4 Ports pro Instanz Spaß macht oder Hipster ist weiß ich jetzt nicht.

Zumindest hat sich der geneigte Leser mit

wsrep_sst_receive_address
gmcast.listen_addr
ist.recv_addr

Zu beschäftigen. Und ja man kann auch noch Volumes in die Container rein mounten um das datadir nicht auf Aufs und persitent zu haben. Aber auch das klingt nicht nach weniger aufwand.

Nachwort

Und ja jeder kann Docker nutzen wie er will, auch wenn es nichts bringt.

Viel Spaß

Erkan

Keine TrackBacks

TrackBack-URL: http://linsenraum.de/mt/mt-tb.cgi/325

4 Kommentare

Hey Erkan,

versuch es doch mal mit NAT-Routen und DNS.
Das setzt aber natürlich ein ordentliches Deployment voraus:
- Node im Galera deaktivieren
- Container restarten
- neue IP im DNS eintragen und flushen
- Node im Galera wieder aktivieren

Alternativ müsste auch der Weg über OpenVSwitch und der Container-Verlinkung klappen.

Langfristig wird es aber sicherlich noch schönere Lösungen geben.

Gruß Jan

Ahoi Jan,

Das klappt auch schon mit iproute2 :)
Wird wohl einer der nächsten Blogs.

Mir geht es darum festzuhalten, dass mit 'Vanilla' Docker das mal überhaupt nicht geht und alle so tun als ob.

Ob NAT-Routing die passende Lösung ist? Bin ich mir gar nichts so sicher.
Ich will gerade wohl eine 1:1 Zuweisung von IP zu Node.
Der Witz von Docker ist imho, ja MILLIONEN :) von Instanzen zu starten.

Aber wie Du sagst: 'ordentliches Deployment' :)

thx
Erkan

Moin Erkan!
Hehe so siehts aus. Ja es ist noch jung und das merkt man auch noch an allen Ecken und Kanten. Dennoch sehr spannend gerade mit dem Blick auf Mesos etc.
Freue mich auf weitere Posts!
LG Jan

Ahoi Jan,
es wird noch mehr kommen und wenn Du mir Mesos erklärst können wir was zusammen spielen :)

Grüßle
Erkan

Jetzt kommentieren