HAProxy und SQL Grants

In diesem kurzen Beitrag will ich auf einen Fallstrick im Bezug von HAProxy und SQL Backends wie MySQL oder MariaDB eingehen. Speziell geht es um Grants und die damit verbunden Quell Hosts. Diese werden bei einem Standard Setup mit HAProxy durch die IP des Proxys ersetzt. Solange man sich in dem selben Netz wie die DB Server und dem Proxy befindet und die Host-Beschränkungen nicht all zu streng sind, kann es gut sein, das man dieses Szenario nicht erreicht. Sobald die Verbindungen aber Netz übergreifend erfolgen und die Grants damit umso wichtiger sind, kommt das Detail zum Tragen und stellt einen vor neue Herausforderungen. Dafür gibt es an sich schon etwas länger das Proxy Protokoll, welches aber erst nach und nach in mögliche Backend Software implementiert wurde/wird. Bei MariaDB war es mit der 10.3.1 z.B. erst Ende letzten Jahres soweit.
Die Arbeitsweise des Protokolls beschreibt sich einfach gesagt so, dass mit dem Aufbau der Verbindung zuerst ein zus. Header geschickt wird, in dem die IP des Quell Hosts bekannt gegeben wird. Dazu muss das Backend jedoch von der IP des HAProxys das Proxy Protokoll erlauben. Das Ganze drum rum kann mit Seiten über weitere Details und Sicherheit befüllt werden. Damit verschone ich Euch aber und weise nur auf eine schlichte Zusammenfassung im Blog von HAProxy hin.

File Caching mit Nginx


Nginx ist ein leistungsfähiger Webserver und Reverse-Proxy, der ursprünglich für eine russische Website entwickelt wurde. In den letzten Monaten erfreut sich die unter BSD-Lizenz verfügbare Software einer immer größer werdenden Beliebtheit.
Besonders spannend finde ich die Möglichkeit diverse Remote-Services als Caching Instanz zusammenzufügen und den entsprechenden Filesysteminhalt auf dem Server abzulegen. So ist der Inhalt anschließend dann nicht in einem Cache-File oder einer Cache-Struktur, ähnlich Squid abgelegt, sondern in einer realen Schattenkopie.
Nachfolgender Code-Snip zeigt kurz den entsprechenden Abschnitt der Konfiguration:

http {
	server {
		listen       8888;
		server_name  proxy.server.org;
		# root url - don't cache here
		location /  {
			proxy_pass      http://upstream.server.org;
		}
		# here is static caching
		location ~* ^/Content.+\.(cab|exe|psf|CAB|EXE|PSF)$ {
			root                 cache/wsus;
			error_page       404 = @fetch;
		}
		location @fetch {
			internal;
			proxy_pass      http://upstream.server.org;
			proxy_store     on;
			root                 cache/wsus;
		}
	}
}

Das Wiki von Nginx bietet darüber hinaus ausführliche Hilfestellung und zeigt viele Ideen auf, die durch den Einsatz möglich werden.

Bernd Erk
Bernd Erk
CEO

Bernd ist Geschäftsführer der NETWAYS Gruppe und verantwortet die Strategie und das Tagesgeschäft. Bei NETWAYS kümmert er sich eigentlich um alles, was andere nicht machen wollen oder können (meistens eher wollen). Darüber hinaus startet er das wöchentliche Lexware-Backup und investiert seine ganze Energie in den Rest der Truppe und versucht für kollektives Glück zu sorgen. In seiner Freizeit macht er mit sinnlosen Ideen seine Frau verrückt und verbündet sich dafür mit seinem Sohn.

MySQL Performance Serie – Teil 3: MySQL-Proxy

Zwar gibt es dieses Tool bereits seit längerem, jedoch kommt es aufgrund der Unkenntnis über das genaue Funktionsprinzip und der Befürchtung der Proxy könnte den Datenbank-Verkehr als zusätzliche Komponente lahmlegen, noch eher selten im produktiven Umfeld zum Einsatz.
Der MySQL-Proxy ist eine klassische Middleware-Komponente welcher zwischen MySQL-Client und einer oder auch mehrerer Datenbank angesiedelt ist. Mit Hilfe einer integrierten LUA-Scriptsprache kann der Administrator den ein- und ausgehenden Datenverkehr überwachen und bei Bedarf auch verändern. So können z.B. Select-Statements explizit auf einen Replikat-Slave geroutet werden um den Master-Server zu entlasten.
Aus Performancesicht ist aber besonders das Thema Connection-Pooling und Load-Balancing interessant. Der Proxy kann eingehende Anfragen im Round-Robin-Prinzip an die verfügbaren Server verteilen und hält die Verbindung zwischen den einzelnen Abfragen offen. Oft ist die eigentliche Applikation nicht mit einem Connection-Pool ausgestattet, so dass sich der Einsatz des Proxys durch die Reduzierung der langsamen Verbindungsverwaltung positiv auf die Applikationsperformance auswirken kann.
In den nächsten Teilen werden wir uns einigen Datenbankparametern annehmen.

Bernd Erk
Bernd Erk
CEO

Bernd ist Geschäftsführer der NETWAYS Gruppe und verantwortet die Strategie und das Tagesgeschäft. Bei NETWAYS kümmert er sich eigentlich um alles, was andere nicht machen wollen oder können (meistens eher wollen). Darüber hinaus startet er das wöchentliche Lexware-Backup und investiert seine ganze Energie in den Rest der Truppe und versucht für kollektives Glück zu sorgen. In seiner Freizeit macht er mit sinnlosen Ideen seine Frau verrückt und verbündet sich dafür mit seinem Sohn.