Weekly Snap: Load balancing with Cluster IP, PHP memory tracking with Memtrack, new ACKP SensorProbe & Pgpool 2

26 – 30 September bid summer farewell with load balancing and PHP tips, the arrival of a new AKCP sensor probe, and developments in the MySQL – PostgreSQL realm.
Bernd bemoaned recent news from Oracle of new extensions for MySQL Enterprise. As announced in the Oracle blog, a new Enterprise Scalability Extension will join the ranks of the Enterprise High Availability and Enterprise Security modules. This follows the trend to offer much needed extensions for large environments only to commercial users, which can alienate the MySQL user community into the arms of competitor software such as PostgreSQL.
Sebastian continued on this thread to look at PostgreSQL replication with Pgpool-II. A third party middleware between PGSQL client and server, Pgpool complements PostgreSQL’s streaming replication (as of version 9) by managing the failover between master and slave. Features include connection pooling, replication, load balancing, limit exceeding connections and parallel queries. More information can be found in both Pgpool 2 and PostgreSQL’s documentation.
Lennart then looked at load balancing on Linux minus the load balancer. With Cluster IP of Netfilter, extensive clusters with multiple nodes can be built by using a common IP address on all nodes. This way, all nodes can respond to the same address. To avoid confusion in ARP querying, Cluster IP uses a Multicast MAC for the cluster IP addresses, so that incoming packets are received by participating nodes. It also uses a hash to distinguish between source IPs or ports etc, ensuring that nodes only answer queries relevant to them.
Following on, Marius shared his tip for monitoring memory capacity in PHP. The PECL extension Memtrack, tracks PHP memory usage and assists in troubleshooting, by enabling deviations in the logs to be detected.
Last but not least, hardware man Martin announced the arrival of AKCP Sensor Probe 4 to our online store. The much awaited device comes with 4 sensor ports in an AKCP Sensor Probe 8-like casing, making it perfect for a 19 inch rack. The AKCP Sensor Probe 4 features Cat 5 sensor connection for many different sensors, simple installation and configuration, Icinga and Nagios plugins, SNMP Trap messaging, 100Mbit network connection and a web interface to send email alerts.

Postgresql-Replikation mit pgpool-II

In Bezug auf Bernds Blogpost mit seinem Hinweis auf die gute Weiterentwicklung der Replikationsfunktionen in Postgresql stelle ich heute eine sehr komfortable und robuste Art der PGSQL-Replikation vor. Postgresql verfügt ab der Version 9.0 über eine Streaming-Replikation mit Hot-Stand-by. Eine Streaming-Replikation ist im Prinzip das gleiche Verfahren wie bei einem MySQL Master-Slave Setup mit Row-Based Replikation. Das WAL (Write-Ahead-Log) wird hier vom Read-only Slave Server abgerufen und ausgeführt. Im Falle eines Ausfalls des Masters besteht die Möglichkeit darauf zu reagieren und vom Read-Only- in Read-Write-Mode zu wechseln und somit den Slave zum Master zu propagieren.
Die third-party Software pgpool2 ist in der Lage diesen Failover zu steuern bzw. zu veranlassen. Pgpool2 ist eine Middleware die zwischen dem PGSQL-Client und Servern fungiert und bietet folgende Funktionen:

  • Connection-Pooling,

Verbindungen zu den PGSQL-Servern werden persistent erzeugt und werden wiederverwendet.

  • Replication,

DML-Statements können dupliziert werden und an die dahinter liegenden Postgres Server verteilt. Eine Streaming-Replikation wäre hierbei nicht notwendig.

  • Load-Balancing,

Client-Anfragen werden verteilt auf die Nodes, die sich im Pool befinden. In einer Streaming-Replikation besteht außerdem die Möglichkeit DML-Statements nur an den Master zu senden und SELECTS an die Slaves.

  • Limiting Exceeding Connections,

bei erreichen der maximalen Anzahl von Datenbankverbindungen gibt Postgres einen Fehler zurück. pgpool2 kann diese Verbindungen in eine Queue ablegen und abarbeiten.

  • Parallel Query

Queries können paralell über mehrere Datenbankserver hinweg ausgeführt werden, um ein Ergebnis schneller ausliefern zu können.

Für die Hot-Standby-Lösung muss der Replikationsmodus von pgpool2 deaktiviert werden. pgpool2 steuert nur die Verbindungen auf die Server, sucht sich seinen Master und kümmert sich um den Failover. Hierfür sind einige kleine Skripte notwendig. Ein weiteres sehr nützliches Feature ist die Überwachung des Slave-Lags. Ist der Slave-Lag höher als der eingestellte Schwellwert schwenkt pgpool2 die Verbindungen von diesem Slave weg bis dieser wieder aufgeholt hat. Auch sehr hilfreich ist das Online-Recovery das eigentlich durch Postgres zur Verfügung gestellt wird. Mit pgpool2 kann man dieses jedoch bequem starten und einen inkonsistenten Slave  von seinem Master im Produktivbetrieb ohne Downtime, Snapshots oder gelockten Tabellen wiederherstellen.
Die Steuerung von pgpool2 erfolgt über die i.d.R. mit installierten CLI-Tools. Zum Beispiel kann man mit pcp_recovery_node das Online-Recovery durchführen oder mit pcp_attach_node bzw. pcp_detach_node Hosts aus dem Pool entfernen bzw. hinzufügen.
Der Blogpost soll nur einen kurzen Überblick über Features und Möglichkeiten darstellen – vollständige Informationen findet man in den sehr guten Dokumentationen von pgpool2 und Postgresql.

Sebastian Saemann
Sebastian Saemann
Head of Managed Services

Sepp kam von einem großen deutschen Hostingprovider zu NETWAYS, weil ihm dort zu langweilig war. Bei uns kann er sich nun besser verwirklichen, denn er leitet zusammen mit Martin das Managed Services Team. Wenn er nicht gerade Server in MCollective einbindet, versucht er mit seinem Motorrad einen neuen Geschwindigkeitsrekord aufzustellen.