Facebook: Endlich Ruhe

Auch wenn sich Facebook – zumindest in meinem Umfeld – auf dem absteigenden Ast bewegt, kommt man trotzdem nicht daran vorbei. Manchmal passiert wohl was wichtiges, dann “muss” man doch mal etwas posten oder eine ganz besondere Nachricht verfassen. Bevor man aber soweit ist, wird man erstmal vom Facebook News Feed erschlagen

Der News Feed war mal eine ganz tolle Geschichte. Aber irgendwann hat Facebook damit begonnen mehr Werbung drauf zu packen und bei Posts eine seltsame Gewichtung vorzunehmen. Das Ergebnis ist meterweise Blödsinn, den kein Mensch dieser Welt braucht 😉

Zur Lösung des Problems gibt es für Chrome eine Extension namens News Feed Eradicator for Facebook. Dieses Tool entfernt den News Feed vollständig und zeigt stattdessen ein mehr oder weniger sinnvolles Zitat eines wichtigen Menschen an z.B. von Laozi (einer dieser weißhaarigen alten Männer die für jede Lebenslage einen äußerst bedeutungsschwangeren Spruch bereithalten).

Na also, Facebook, geht doch! Gleich viel besser 😉 – Danke dafür!

Als Bonus obendrauf ist der Eradicator eine Vorzeigeextension für den Browser. Zugriff nur auf Facebook URL’s, keine Permissions um die komplette Historie auszulesen (obwohl man eigentlich nur einen Farbwert berechnen wollte) und die Quotes sind Offline in der Extension hinterlegt. Ein absolut fettes datenschutzrechtliches Brett in Zeiten von Cambridge Analytica.

Marius Hein
Marius Hein
Head of Development

Marius Hein ist schon seit 2003 bei NETWAYS. Er hat hier seine Ausbildung zum Fachinformatiker absolviert, dann als Application Developer gearbeitet und ist nun Leiter der Softwareentwicklung. Ausserdem ist er Mitglied im Icinga Team und verantwortet dort das Icinga Web.

Cleanup your Docker Environment

Using Docker is pretty common meanwhile and a very good idea for development. Using many versions of your favourite language without messing up your host system, different types of deployments (e.g. web servers) or just testing production environment without operational support. The only drawback is that normally you don’t have a clue what’s going on behind the scenes. If you run out of disk space for the first time, you’re exactly at that point.

To apply first aid, you will be advised to use some curious cli hacks to clean up your system. Breaking fingers between grep, sed and awk works out well but is not very helpful – Especially if you want to remember what you did 3 months before 😉

Since Docker Api version 1.25 you have a couple of high level cli commands available doing exactly this job:

Minimal Cheat Sheet:

$ # Claimed disk space
$ docker system df
TYPE            TOTAL       ACTIVE      SIZE          RECLAIMABLE
Images          59          5           10.74GB       9.038GB (84%)
Containers      6           1           991kB         991kB (99%)
Local Volumes   216         1           5.876GB       5.876GB (100%)
Build Cache     0           0           0B            0B

$ # Cleanup disk space
$ docker system prune
WARNING! This will remove:
        - all stopped containers
        - all networks not used by at least one container
        - all dangling images
        - all dangling build cache
Are you sure you want to continue? [y/N] Y
Deleted Containers:
02401e1555e8e752d36198d982b5e4114d0999c7cca34a2353e8dc332faa4db5
997eac76d4a46515797027103967c61b46219ff8c70f6e0bb39bc2b975297fa5
23983ed8abaa60198b497e4b3788bb6de7d39d03f171f43e4ee865c0df318ab8
65bb90b9e7edcd2d13da3129664f8b74a72b011d56136cb28c687f1f8dd8e473
5218788bff77cc0c0cc03f79888ea61c3e27bf3ef0003e41fc231b8b6ecdcdc2

Deleted Images:
deleted: sha256:dccdc3cf7d581b80665bad309b66ba36d88219829e1ade951912dc122b657bfc
[...]

There is also an equivalent for images only:

$ docker image prune

You should definitely take a deeper look into the CLI commands. There are a lot of things that helps you to solve your every day problems!

Marius Hein
Marius Hein
Head of Development

Marius Hein ist schon seit 2003 bei NETWAYS. Er hat hier seine Ausbildung zum Fachinformatiker absolviert, dann als Application Developer gearbeitet und ist nun Leiter der Softwareentwicklung. Ausserdem ist er Mitglied im Icinga Team und verantwortet dort das Icinga Web.

Mac Helper: Finder

Die Standardwerkzeuge im Mac sind alle samt schon ziemlich gut. Für mich aber eine der Ausnahmen: Der Finder! Meistens finde ich mich dann mit 10 offenen Fenstern wieder oder ich verschiebe das Zeug in andere Verzeichnisse, weil die Oberfläche nicht schnell genug reagiert (Tabs wechseln, Verzeichnisse expandieren). Entnervt erledige ich dann die Überbleibsel im Terminal.

 

Alfred Workflow

Standardmäßig gibt es einen “Open-Workflow” in Alfred. Dieser öffnet entweder Dateien oder Verzeichnisse. Aber es geht noch besser: “Open Finder Tab“. Dabei bleibt ein Fenster offen und es werden weitere Tabs hinzugefügt:

Yoink

Wie schaut es dann mit anderen Artefakten aus? Mails, Preview oder URL’s? Dafür bin ich vor einiger Zeit auf Yoink gestoßen. Yoink ist ein kleiner temporärer Container allgemein Dateireferenzen zwischenspeichern kann. Dies können z.B. URL’s sein, Inhalt der Zwischenablage, Dateien. Dabei integriert es sich Nahtlos in die Oberfläche mit einem kleinen Fenster, was bei “Drag and drop” Operationen eingeblendet wird.

 

Beide Tools, Alfred wie auch Yoink sind nicht kostenfrei sind aber definitiv den Einkauf wert. Mir erleichtern sie massiv die tägliche Arbeit mit dem Finder!

Marius Hein
Marius Hein
Head of Development

Marius Hein ist schon seit 2003 bei NETWAYS. Er hat hier seine Ausbildung zum Fachinformatiker absolviert, dann als Application Developer gearbeitet und ist nun Leiter der Softwareentwicklung. Ausserdem ist er Mitglied im Icinga Team und verantwortet dort das Icinga Web.

RequestTracker: Optimize Session Handling

To provide features like login or persistence to the user, stateless protocols like HTTP depend heavily on sessions. Almost every web application is using it.

An easy job you would say? Of course! But what about high availability setups with hundreds of concurrent users? And sessions need to be shared between application servers so that that users do not lose their current login session.

RT’s vanilla way is to put this in MySQL which produces queries on every request. Second bad thing is the created GET_LOCK query which slows down the environment after a while.

Better way is to use files because file sessions are extremely fast. No network overhead and not greatly influenced by differential IO. But then you have to share sessions between application servers and you should say good bye to that idea because we do not live in an ideal world and shared file systems are terribly slow.

What Next?

I opt for Redis. Meanwhile available on every system, fast as the LHC in Geneva and rock-solid like carbon. Redis is so adorable simple that you only can fall in love with this single-core-minimal-footprint-key-value-store thingy. But I’ll stop hallowing now.

RequestTracker uses Apache::Session::* default implementation and we choose the NoSQL module from there which provides access to Apache Cassandra and Redis.

Configuration Examples

# Annouce Redis to RequestTracker
Set($WebSessionClass, "Apache::Session::Redis");

# Single server
Set(%WebSessionProperties,
  server => '127.0.0.1:6379'
);

# Sentinel
Set(%WebSessionProperties,
  sentinels => [ '127.0.0.1:26379' ],
  service => 'mymaster',
  sentinels_cnx_timeout => 0.1,
  sentinels_read_timeout => 1,
  sentinels_write_timeout => 1
);

You can find more information in the product documentation.

Conclusion

It’s just a glimpse, but there a lot of ways to bring RequestTracker to enterprise level with more than 300 concurrent users and millions of tickets and attachments. Of course, highly available and scaled in every direction. You only need to ask us how to do!

Marius Hein
Marius Hein
Head of Development

Marius Hein ist schon seit 2003 bei NETWAYS. Er hat hier seine Ausbildung zum Fachinformatiker absolviert, dann als Application Developer gearbeitet und ist nun Leiter der Softwareentwicklung. Ausserdem ist er Mitglied im Icinga Team und verantwortet dort das Icinga Web.

Weg mit dem Schrott: Müll im Weltraum

Es gibt einen ganzen Haufen Müll im Weltraum den man praktischerweise nicht sieht und sich aus diesem Grund wenig Gedanken darum macht. Das Inter-Agency Space Debris Coordination Committee (IADC) überwacht im Moment ca. 80000 Objekte ab der Größe eines Fußballs. Nimmt man kleinere Teile inklusive Partikel in der Größe mehrerer Millimeter hinzu, gehen Schätzungen mittlerweile von mehreren Millionen Teilchen in verschiedenen Umlaufbahnen aus. Durch eine Art Domino Effekt (Kessler Syndrome) nimmt ab einer kritischen Masse die Menge sogar automatisch zu. Dies geschieht, wenn Gegenstände aufeinander prallen, explodieren und dadurch weitere Teile entstehen.
Der Großteil des Mülls besteht aus Mission Related Objects (MRO, Raketenstufen, Halterungen usw.) oder ausgedienten, havarierten Gegenständen wie beispielsweise Satelliten – Seit den 50er Jahren ist nur noch jeder 7. Satellit aktiv. Teilweise verlieren Astronauten auch mal einen Pinsel zum lackieren von Hitzeschildern oder verrückte Nationen feuern Projektile auf Satelliten die dann weitere Kleinteile freisetzen. Natalie Panek vergleicht in Ihrem TED Talk unseren Umgang mit dem Weltall mit dem Mount Everest. Auch er hat die zweifelhafte Ehre einer der höchsten Mülllagerstätten der Welt zu sein nach dem man Jahrelang Ausrüstungsgegenstände auf ihm abgeladen hat.
Warum ist das jetzt wichtig und was hat das mit IT zu tun?
Ein Großteil unseres Alltags und wie die Welt funktioniert hängt davon ab. Kommunikation, Fernsehen, Wetter, Erdbeobachtung oder Positionsbestimmung ist abhängig von einer funktionierenden Infrastruktur in den Umlaufbahnen. Fallen hier wichtige Teile aus sind Transportwege in Gefahr, Frühwarnsysteme für Umwelt funktionsunfähig (z.B. Waldbrände) und viele Annehmlichkeiten fallen weg . Es gibt Aussagen, dass im Durchschnitt zwei Kurskorrekturen pro Jahr für Satelliten notwendig sind um Weltraumschrott auszuweichen. Bei der ISS kommt das noch häufiger vor.
Da der Weltraummüll eine allgemeine Gefahr darstellt wird fieberhaft an einer Lösung gearbeitet – oder zumindest an einer Eindämmung. Die widrigen Bedingen und die hohen Finanziellen aufwände machen es allerdings nicht besonders einfach bestehenden Müll zu reduzieren. Die Trägerrakete Falcon Heavy von SpaceX kann z.B. mit recyclingfähigen Boostern ausgestattet werden welche nach Verbrauch wieder zur Erdoberfläche zurückgebracht werden. Neben dieser Revolution schoss man allerdings gleich einen Tesla in einen Mars Orbit: Again what learned!
Damit man sich einfach mal ein Bild von der Sache machen kann, gibt es Tools wie http://stuffin.space

 
 

Marius Hein
Marius Hein
Head of Development

Marius Hein ist schon seit 2003 bei NETWAYS. Er hat hier seine Ausbildung zum Fachinformatiker absolviert, dann als Application Developer gearbeitet und ist nun Leiter der Softwareentwicklung. Ausserdem ist er Mitglied im Icinga Team und verantwortet dort das Icinga Web.

Let's Encrypt HTTP Proxy: Another approach

Yes, we all know that providing microservices with Docker is a very wicked thing. Easy to use and of course there is a Docker image available for almost every application you need. The next step to master is how we can expose this service to the public. It seems that this is where most people struggle. Browsing the web (generally GitHub) for HTTP proxies you’ll find an incredible number of images, people build to fit into their environments. Especially when it comes to implement a Let’s Encrypt / SNI encryption service. Because it raises the same questions every time: Is this really the definitely right way to do this? Wrap custom API’s around conventional products like web servers and proxies, inject megabytes of JSON (or YAML or TOML) through environment variables and build scrips to convert this into the product specific configuration language? Always my bad conscience tapped on the door while I did every time.
Some weeks ago, I stumble upon Træfik which is obviously not a new Tool album but a HTTP proxy server which has everything a highly dynamic Docker platform needs to expose its services and includes Let’s Encrypt silently – Such a thing doesn’t exist you say?
A brief summary:

Træfik is a single binary daemon, written in Go, lightweight and can be used in virtually any modern environment. Configuration is done by choosing a backend you have. This could be an orchestrator like Swarm or Kubernetes but you can also use a more “open” approach, like etcd, REST API’s or file backend (backends can be mixed of course). For example, if you are using plain Docker, or Docker Compose, Træfik uses Docker object labels to configures services. A simple configuration looks like this:

[docker]
endpoint = "unix:///var/run/docker.sock"
# endpoint = "tcp://127.0.0.1:2375"
domain = "docker.localhost"
watch = true

Træfik constantly watch for changes in your running Docker container and automatically adds backends to its configuration. Docker container itself only needs labels like this (configured as Docker Compose in this example):

whoami:
image: emilevauge/whoami # A container that exposes an API to show its IP address
labels:
- "traefik.frontend.rule=Host:whoami.docker.localhost"

The clue is, that you can configure everything you’ll need that is often pretty complex in conventional products. This is for Example multiple domains, headers for API’s, redirects, permissions, container which exposes multiple ports and interfaces and so on.
How you succeed with the configuration can be validated in a frontend which is included in Træfik.

However, the best thing everybody was waiting is the seamless Let’s Encrypt integration which can be achieved with this snippet:

[acme]
email = "test@traefik.io"
storage = "acme.json"
entryPoint = "https"
[acme.httpChallenge]
entryPoint = "http"
# [[acme.domains]]
# main = "local1.com"
# sans = ["test1.local1.com", "test2.local1.com"]
# [[acme.domains]]
# main = "local2.com"
# [[acme.domains]]
# main = "*.local3.com"
# sans = ["local3.com", "test1.test1.local3.com"]

Træfik will create the certificates automatically. Of course, you have a lot of conveniences here too, like wildcard certificates with DNS verification though different DNS API providers and stuff like that.
To conclude that above statements, it exists a thing which can meet the demands for a simple, apified reverse proxy we need in a dockerized world. Just give it a try and see how easy microservices – especially TLS-encrypted – can be.

Marius Hein
Marius Hein
Head of Development

Marius Hein ist schon seit 2003 bei NETWAYS. Er hat hier seine Ausbildung zum Fachinformatiker absolviert, dann als Application Developer gearbeitet und ist nun Leiter der Softwareentwicklung. Ausserdem ist er Mitglied im Icinga Team und verantwortet dort das Icinga Web.

Mein Profil, dein Profil!

Mal ehrlich, wer hat denn kein Facebook Profil, ist nicht bei LinkedIn, WhatsApp oder Twitter? Ich vermute: Die wenigsten! Denn ohne geht es heute kaum noch. Da werden Termine nur noch über Gruppen kommuniziert oder der Arbeitgeber macht sich ein Bild über einen potentiellen Bewerber. Man will ja dabei sein, sich gut verkaufen, nicht wahr?
Am besten legt man sich mal ein Profil an. Aber was ist denn eigentlich ein Profil und vor allem, ist das jetzt gut oder schlecht? Die Geschichte des Profils ist noch gar nicht so alt: Die Idee des Profils entstand im frühen 20. Jahrhundert als erstmals russische Psychotechniker Profile von schwer erziehbaren Kindern erstellen. Nach dem 2. Weltkrieg adaptiert die USA das Modell und entwickelt es bis heute weiter – Wer kennt nicht einige Filme, welche das FBI in der 70er Jahren zeigt, wie man Profile von psychiatrisch Internierten oder Schwerverbrechern anlegte?
Jaja, der Einstieg ist erstmal hart – Sorry!
Aber er bildet die Basis sich zu fragen warum wir uns freiwillig kriminaltechnischen Instrumenten unterwerfen, die ursprünglich einen ganz anderen Zweck hatten. Es gilt nämlich mittlerweile durchaus als Auffälligkeit, kein Profil vorweisen zu können – wie zum Beispiel die meisten Amokläufer aus den USA. Mit der Möglichkeit, Computer zuhause zu betreiben und mit dem “unkontrollierbaren” Raum des Internets wurde erstmals ein individuelles Freiheitsgefühl empfunden. Das machte uns zu unregierbaren Wesen, oder?
Doch davon ist wenig übrig geblieben: Onlineauftritte und Ortungsdienste stehen der früheren Vorstellung gegenüber und man de-virtualisiert die gewonnene Freiheit zurück in real existierende Räume: Man möchte schließlich die Gewissheit einer echten Person hinter jedem Profil erreichen.
Man meint ja fast, es steckt eine marktwirtschaftliche Intelligenz dahinter, welche ihre vermeintliche Philosophie damit durchsetzen möchte. Egal, die lückenlose Erfassung könnte in einem Überwachungsstatt nicht besser funktionieren und wir geben einfach den Regierungsauftrag an einen entsprechenden Uhrenhersteller ab. Übrigens: Noch vor 30 Jahren (1987) wehrte sich man gegen die Volkszählung und boykottierte jegliche Erhebung von Daten: Human ist, was nicht erfassbar ist!
Heute gilt: Human ist (nur noch), was erfasst worden ist! Oder?
Wer sich an die 80er nicht mehr erinnert, der kann das hier noch nachholen.
 

Quellen: Andreas Bernard – Komplizen des Erkennungsdienstes

Marius Hein
Marius Hein
Head of Development

Marius Hein ist schon seit 2003 bei NETWAYS. Er hat hier seine Ausbildung zum Fachinformatiker absolviert, dann als Application Developer gearbeitet und ist nun Leiter der Softwareentwicklung. Ausserdem ist er Mitglied im Icinga Team und verantwortet dort das Icinga Web.

Ein Plädoyer für den Tagtraum

Wer kennt diese Situation nicht: In einem langweiligen Meeting schweifen die Gedanken ab und man plant innerlich das Abendessen, richtet sich sein Wohnzimmer ein oder den nächsten Urlaub. Man ist in einem Tagtraum versunken.
Meistens wird man dann kalt erwischt, fühlt sich erstmal angeschossen und muss sich mühsam wieder auf die Außenwelt konzentrieren und seinen Fokus neu ausrichten. Generell wird diese Art des Abschweifens als Ineffektivität angesehen und man wird entsprechend Missmut bei seinen Kollegen ernten. Wenn man sich mit diesem Phänomen beschäftigt stellt man fest, dass man seine – eventuell – negative Einstellung überdenken sollte!
Und Warum?
Die Theorie dahinter ist die Pflege zweier Systeme. Einmal die Außenwelt, die permanent um uns herum stattfindet und unsere aktive Aufmerksamkeit fordert. Und unsere Innenansicht, mit der wir unser Privatleben planen, Ideen entwickeln oder im Allgemeinen mit Eindrücken experimentieren, welche hängen geblieben sind.
Was passiert?
Man spricht von einer traceartigen Abwesenheit oder leichten Bewusstseinserweiterungen. Knapp die Hälfte unserer Wachzeit verbringen wir in einer solchen Trance und das Gehirn verbraucht dabei 20 mal mehr Energie, als bei der Verarbeitung von bewussten Prozessen. Der Übergang ist fließend und man gleitet, ohne es zu merken, aus der kognitiven Aufmerksamkeit und entsprechende Reize aus der Umwelt werden gedämpft und die Aufmerksamkeit wird auf diese Weise “entfernt”. Innerhalb des Gehirns wird jetzt das Default mode network (DMN) aktiviert. Eine Region die für das “Nichtstun” verantwortlich ist. Nach spätestens 15 Sekunden ist dann wieder alles vorbei und unser „Kopf“ oszilliert zurück in die Gegenwart.
Ein gutes Beispiel hierfür ist Autofahren. Man fährt morgens in die Arbeit und kann sich am Ziel nicht mehr an die Gegebenheiten der Strecke erinnern. “War die letzte Ampel jetzt Rot oder Grün?” – Keine Ahnung.
Was ist daran gut?
Neben der inneren Planung können besonders kreative Menschen das “abdriften” kognitiv beeinflussen: Man begibt sich aktiv in eine bestimmte gedankliche Situation und entfernt dann die Aufmerksamkeit. Die größten wissenschaftlichen Errungenschaften kamen auf diese Weise zustande oder einige der besten klassischen Stücke der Romantik sind dabei entstanden. Man weiß von Albert Einstein zum Beispiel, dass er oft und gerne spazieren ging und dieses Setting als Inkubator nutzte (zudem trug er gerne keine Socken in den Schuhen ;-)). So fiel ihm vermutlich die Relativitätstheorie auf ein mal wie Schuppen von den Augen. Und Johannes Brahms hat bei solchen Spaziergängen oftmals vorbeigehende Personen erst gar nicht erkannt oder wahrgenommen und dudelte in seinem Kopf vermutlich fröhlich weiter.
Und jetzt?
Wir sollten einfach nachsichtiger mit träumenden Kollegen sein. Wer weiß, welche Ideen sie gerade entwickeln oder ob sie gleich mit der perfekten Lösung eines Problems ins Büro schießen!
Tagträume sind unser Lebensnarrativ. Unser innerer Kern birgt oftmals viel mehr Weisheit als wir selbst glauben!

Marius Hein
Marius Hein
Head of Development

Marius Hein ist schon seit 2003 bei NETWAYS. Er hat hier seine Ausbildung zum Fachinformatiker absolviert, dann als Application Developer gearbeitet und ist nun Leiter der Softwareentwicklung. Ausserdem ist er Mitglied im Icinga Team und verantwortet dort das Icinga Web.

GUI REST clients

Ooups, this gallery does not have any images...

Mittlerweile sind HTTP REST APIs aus der täglichen Arbeit in der IT nicht mehr wegzudenken. Noch vor Jahren durchaus als exotisch zu bezeichnen, ohne Dokumentation und chaotisch verwoben, entstehen immer mehr gute APIs die sich an entsprechende Standards halten und sinnvolle Funktion bieten. Angefangen von atmosphärischen Zufallszahlen, randomisierten Bildern  oder Kartendecks ist mittlerweile alles aus Microservices zu holen – man denke nur an die 125726 Google APIs. Übrigens bieten wir mit Icinga 2 oder Icinga Web 2 standardisierte APIs für die Monitoring-Umgebung an und ein nicht geringer Anteil unserer Routine besteht mit der Arbeit dieser APIs.
Um effektiv mit den Schnittstellen arbeiten zu können muss man sich diese etwas genauer anschauen. Am besten geht das mit entsprechenden Tools und einer Handvoll guter Features, z.B.:

  • Repetitive Anfragen
  • Absteigende URLs
  • Header, Parameter, Request Body, Cookies
  • Authentifizierung
  • Organisation (Sammlungen, Request-Historie)
  • Binary Daten
  • Pretty Print der Rückgaben

Ich bin mittlerweile unter macOS bei zwei Tools hängengeblieben die gerne einmal zeigen möchte: CocoaRestClient und Postman. Beide Tools besitzen oben genannte Features. Postman gibt es sogar als Chrome App. Bei Verwendung von Chrome und debugging von JavaScript kommt also gleich alles aus einem Guss ;-). Postman ist insgesamt mehr Feature-Complete und die native Cocoa macOS App unglaublich fix. Und natürlich hat auch Curl seine Berechtigung – wenn auch kein GUI!
Es folgt noch eine kleine Photostrecke. Dann ist die eigene Meinung gefragt…


 

Marius Hein
Marius Hein
Head of Development

Marius Hein ist schon seit 2003 bei NETWAYS. Er hat hier seine Ausbildung zum Fachinformatiker absolviert, dann als Application Developer gearbeitet und ist nun Leiter der Softwareentwicklung. Ausserdem ist er Mitglied im Icinga Team und verantwortet dort das Icinga Web.

Galera Cluster – Tips für die Praxis

Galera Cluster für MySQL ist mal ein “einfacher” Cluster für MySQL und seit MariaDB Version 10.1 standardmäßig mit an Board. Dadurch erhält man mit ein paar Zeilen Konfiguration einen produktionsfähigen Cluster, um den man sich wenig kümmern muss. In der Praxis allerdings, bieten sich genügend Fallstricke, die es zu meistern gilt.

Die Terminologie

  • Joiner: Neues Member welches dem Cluster hinzugefügt wird
  • Donor: Meldet sich ein Joiner stellt der Cluster einen Lieferanten bereit welcher die Daten auf den Joiner überträgt
  • SST: Snapshot State Transfer – Ist Lücke zum aktuellen Stand zu groß, werden der komplette Stand übertragen
  • IST: Incremental State Transfer – Im laufenden Betrieb werden Änderungen direkt übertragen. Die Änderung ist am Cluster erst verfügbar wenn alle Mitglieder diesen Stand empfangen haben

Tipps

1. SST Vermeiden

Einen kompletten Stand der Daten zu übertragen ist keine gute Idee. Ein Cluster, welcher 1 TB Nutzdaten verwaltet, ist auch nach drei Tagen nicht fertig. Dadurch können stabile Member ihre Integrität verlieren und der Cluster wird instabil. Hat man eine solche Situation erreicht empfiehlt es sich, den kompletten Cluster manuell zu syncen (MySQL Daten löschen und per rsync kopieren – Aber bitte keine Binlogs!).

2. SST Method

Galera bietet verschiedene Methoden um einen SST durchzuführen. Laut Statistik ist SSH die schnellste Methode – D’Accord – Aber der dadurch entstehende Donor ist für Anfragen gelockt und fällt aus dem Cluster. Dadurch wären wir bei Punkt 1 angelangt. Der beste trade-off ist hier xtrabackup-v2. Dadurch wird ein Donor am wenigsten blockiert. Bitte dabei den Benutzer zur MySQL Authentifizierung nicht vergessen – Sonst geht gar nichts!

3. SST Konfiguration

SST und das ausführen auf dem Joiner kann maßgeblich verbessert werden mit folgender MySQL Konfiguration:

[sst]
inno-apply-opts="--use-memory=20G"
compressor="pigz"
decompressor="pigz -d"

Dadurch geben wir dem innobackupex Script, welches auf dem Joiner ausgeführt mehr Speicher um Daten aus den Logs (–apply-log) auszuführen. Weiterhin parallelisieren wir den Vorgang um Daten auf dem Donor zu komprimieren und – guess what – auf dem Joiner zu dekomprimieren.
Um die Transaktionen weiter zu parallelisieren erhöhen wir die Einstellung wsrep_slave_threads auf eine dem System angepasste Anzahl (Anzahl Cores und Auslastung).

4. Dedizierten Donor

Bei großen Datenmengen empfiehlt es sich einen eigenständigen Donor bereitzustellen welcher keine Anfragen entgegen nimmt.

[mysqld]
 wsrep_sst_donor = node-donor

Eventuell sollte man auch Queries mit der Einstellung wsrep_sst_donor_rejects_queries verbieten

5. Locking Queries

Galera ist maximal transparent für Applikationen. Einzig, LOCKING wird nicht akzeptiert. Falls es von der Applikation benötigt wird könnte man mit der Einstellung wsrep_convert_LOCK_to_trx die Queries in Transaktionen kapseln.

6. Provider Cache

Standardmäßig auf 128M eingestellt, enthält dieser Ringpuffer die zu Verfügung stehen write-sets für einen IST. Die Größe sollte man entsprechend hoch wählen. So kann auch bei größeren Lücken immer noch ein IST durchgeführt werden:

[mysqld]
wsrep_provider_options="gcache.size=1G"

Bei entsprechend Arbeitsspeicher oder SSD Storage ist es durchaus eine gute Idee die Datei auf das schnellste Storage zu legen oder eine Lastaufteilung vorzunehmen:

[mysqld]
wsrep_provider_options="gcache.size = 8G; gcache.name = /var/cache/ssd/galera.cache"
7. HAProxy verwenden

Der stabilste Cluster bringt einem gar nichts wenn man nur einen Knoten abfragt. Eine der Stärken von Galera ist es, von allen Knoten zu lesen. Hier sollte man sich Gedanken zur Aufteilung machen:

  • Die schnellsten Knoten zum lesen und in den HAProxy
  • Donor exkludieren
  • Backup members bereitstellen (hot-standby)

Eine Konfiguration können z.B. folgendermaßen aussehen:

backend mysql_pool   mode tcp
  balance roundrobin   option mysql-check user haproxy   option tcpka # keep-alive!   server galera-donor1   192.168.17.20:3306 check inter 12000 disabled   server galera-standby1 192.168.17.21:3306 check inter 12000 disabled   server galera-node3    192.168.17.22:3306 check inter 12000
  server galera-node4    192.168.17.23:3306 check inter 12000
  server galera-node5    192.168.17.24:3306 check inter 12000

Dadurch erhalten wir einen Donor, einen hot-standby und drei read-heads. Durch die HAProxy API kann man das auch je nach Zustand des Cluster zu oder abschalten. Auch wäre eine standortübergreifende Verteilung möglich. Man stelle sich verschiedene Pools in verschiedenen Ländern vor. Je nach Ursprung und Applikation können dann die Anfragen zu den schnellsten read-heads weitergeleitet werden. Dann sollte man sich aber überlegen, z.B.  wsrep_dirty_reads an den Standorten zu verwenden.

8. Bin Logs

Ein richtiger Klassiker der Cluster Pitfalls, die Binary Logs von MySQL. Man würde sie für Galera nicht unbedingt benötigen aber sie bieten Sicherheit beim Crash und helfen einen SST im Falle zu vermeiden. In großen Umgebungen muss man folgendes bedenken:

  • Speicherplatz begrenzen
  • Vorhaltezeit verkürzen
  • An das verfügbare Storage anpassen

Ansonsten dauert ein FLUSH LOGS gerne auch mal 3 Tage und blockiert einen unseren Knoten – Beim Donor besonders schlecht!

Fazit

Für mich ein fantastisches Cluster System für MySQL! Es gibt noch viele gute Tips da draussen und noch viel mehr Möglichkeiten (und auch schmerzen) mit InnoDB / MySQL Konfiguration. Es funktioniert auch leider beim Galera Cluster nichts ohne vorher die eigene Rübe einzuschalten 😉

Links

 

Marius Hein
Marius Hein
Head of Development

Marius Hein ist schon seit 2003 bei NETWAYS. Er hat hier seine Ausbildung zum Fachinformatiker absolviert, dann als Application Developer gearbeitet und ist nun Leiter der Softwareentwicklung. Ausserdem ist er Mitglied im Icinga Team und verantwortet dort das Icinga Web.