Galera Clustering

Viele von Euch kennen es bestimmt schon, das Project Galera. Dieses vereint die wsrep API mit MySQL bzw. dessen Fork MariaDB. Zum aktuellen Zeitpunkt werden schon InnoDB und die XtraDB – Storage Engine unterstützt. Letzteres ist eine InnoDB-Erweiterung und wird von Percona entwickelt .

Galera-Cluster-logo-1024x195

Der Galera Cluster bringt folgende Features/Benefits mit:

  • Multi-Master schon von Haus aus
  • Synchrone Replication kein Datenverlust mehr auch keine Slave-Lags mehr (Boa wie mich das immer wieder nervt)
  • Eng gekoppelt Alle Knoten haben grundsätzlich denselben Status, keine Daten mehr die auseinander laufen
  • Multi-threaded Slave für bessere Performance der Nutzlast
  • Keine Master-Slave Failover Operationen nötig oder die Notwendigkeit eine virtuelle IP binden zu müssen
  • Hot Standby keine Downtimes während des Failover (denn es gibt keinen Failover mehr)
  • Automatic Node Provisioning kein manuelles Eingreifen mehr um Knoten in den Cluster zu bringen, die Daten werden automatisch auf den neuen Knoten repliziert
  • Supports InnoDB bald auch MyISAM (ist noch experimentell)
  • Transparent zur Application benötigt in Kombination mit GLB (oder HAproxy) keine Änderungen an der Applikation
  • Kein Aufspalten von Read und Write Operationen nötig (einfach Feuer auf das Ding 😉 ).

Galera ist somit die Lösung für Unternehmungen die ein hohes Aufkommen an Schreib- und Lese -Operationen in ihren Datenbanken erwarten. Die Main “Use Cases” für den Betrieb des Galera Cluster sind eben kurz und gut, Skalierung der Schreib-Operationen, entkoppeln von Latenz Killern (wie zB. lange laufende Queries).
Die Entwickler des Forks MariaDB haben diese vielfältigen Möglichkeiten erkannt und bieten auf ihren Seiten Anleitungen zum Betrieb so eines Basic Setups an. Ebenfalls werden dort fertige Pakete für die Installation auf alle Major Linux Distributionen angeboten, somit fällt auch schon mal das Kompilieren weg.
Für das Setup können zwei Loadbalancing-Produkte zum Einsatz kommen: Zum einen der schon etwas in die Jahre gekommene (aber immer noch sehr beliebte) HAproxy und zum anderen GLB (Galera LoadBalancer), der eigens für Galera, aber außerhalb des Projekts entstanden ist. Wir bevorzugen für unsere Setups meist den GLB da dieser auch während der Laufzeit (wenn nötig auch automatisiert durch Skripte) konfiguriert bzw. gesteuert werden kann. Änderungen können somit im laufenden Betrieb und auch unter Last problemlos vorgenommen werden. Wenn es dann doch mal knapp wird, kann man im Betrieb ganz einfach einen weiteren Knoten hinzufügen 🙂

ZFS Replikation mit zrep

Das Dateisystem ZFS wurde ursprünglich von der Firma “Sun Microsystems” entwickelt, die dann später bekanntermaßen von Oracle gekauft wurde. Das sind jetzt keine wirklichen Neuigkeiten und ZFS ist auch nicht neu, aber immer noch in seinen Bereichen das Maß der Dinge. Auf Linux muss man allerdings wegen Lizenzschwierigkeiten von Haus aus darauf verzichten und sich mit dem FUSE Modul oder dem zfsonlinux Kernel Modul Abhilfe schaffen. Für Linux steht ja schon seit langem BTRFS in den Startlöchern, was aber bis heute noch nicht als stable markiert ist.
ZFS ist ein Copy on Write Filesystem, das durch ein reiches Feature Set glänzen kann. Unter anderem unterstützt es Snapshots und kann diese Snapshots inkrementell versenden, um einen Datenzustand als Backup oder für höhere Verfügbarkeit auf einen weiteren Server vorhalten zu können. Das ganze ist denkbar einfach:
zfs snapshot tank/myzfs@1hourago
zfs snapshot tank/myzfs@now
zfs send -I tank/myzfs@1hourago tank/myzfs@now | ssh server2.domain zfs receive tank/myzfsbackup
Die drei Befehle erzeugen zwei Snapshots die dann dann mit “zfs send” inkrementell von “1hourago” bis “now” an den “server2” gesendet und dort empfangen werden. Die Schwierigkeit besteht jetzt darin, Snapshots auch wieder zu löschen und dafür zu sorgen, dass die Snapshots aufeinander aufbauen.
Hierfür gibt es ein KSH Script mit dem Namen zrep. Zrep sorgt sich genau darum und kann noch viel mehr. Neben dem initialen synchronisieren und dem Handling der Snapshots kann mit zrep auch auf den zweiten Server im Fehlerfall geschwenkt werden. Während des Schwenks werden die Filesysteme auf beiden Seiten readonly gesetzt, der letzte Zustand gesynced und anschließend läuft die Replikation in die andere Richtung weiter.
Mehr Informationen zu zrep findet man auf der Website zu dem Projekt.

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.

MySQL Cheat-Sheet

Da ich euch nicht mit Dingen wie SELECT, INSERT oder UPDATE nerven möchte, aber es auch immer wieder Dinge gibt die ich regelmäßig nachschlagen muss, hier mein persönliches MySQL-Cheat-Sheet in der Hoffnung das es euch auch helfen möge 😉
Mitschneiden der MySQL-Session, z. B. für Doku’s:
[user@host ~]$ mysql -u root -p --tee=/tmp/what_i_have_done.log
Logging to file '/tmp/what_i_have_done.log'
Enter password:

Anzeigen aller DB’s mit der jeweiligen Größe in MB:
SELECT table_schema "Data Base Name",
sum( data_length + index_length ) / 1024 /
1024 "Data Base Size in MB",
sum( data_free )/ 1024 / 1024 "Free Space in MB"
FROM information_schema.TABLES
GROUP BY table_schema ;

Auflisten aller Benutzer und deren Datenbankberechtigungen:
SELECT grantee, table_schema, privilege_type FROM information_schema.schema_privileges;

Klonen von Tablellen (keys und index werden nicht automatisch übernommen!):
CREATE TABLE AS SELECT * FROM ;

Erstellen / Wiederherstellen einer Replikation:
STOP SLAVE;
RESET SLAVE;
CHANGE MASTER TO MASTER_HOST='myotherdbms', MASTER_USER='replication_user', MASTER_PASSWORD='nsa_will_never_guess', MASTER_LOG_FILE='mysql-bin.00000', MASTER_LOG_POS=414138;
START SLAVE;

Bei Fehlern in der Replikation auch gerne gesehen… Ignoriere eine Anzahl N an Fehlern:
SET GLOBAL sql_slave_skip_counter = N;

Sollte ich noch mehr coole Sachen finden, werde ich diese Liste selbstverständlich erweitern 🙂

Tobias Redel
Tobias Redel
Head of Professional Services

Tobias hat nach seiner Ausbildung als Fachinformatiker bei der Deutschen Telekom bei T-Systems gearbeitet. Seit August 2008 ist er bei NETWAYS, wo er in der Consulting-Truppe unsere Kunden in Sachen Open Source, Monitoring und Systems Management unterstützt. Insgeheim führt er jedoch ein Doppelleben als Travel-Hacker, arbeitet an seiner dritten Millionen Euro (aus den ersten beiden ist nix geworden) und versucht die Weltherrschaft an sich zu reißen.

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.

MySQL New Features – Semisynchronous Replication

Bereits seit dem 15. Dezember gibt es die aktuelle GA Release von MySQL in der Version 5.5. Obwohl ein großer Nutzerkreis der Datenbank, nach Installation und Anlage von Benutzern, häufig keine größere Aufmerksamkeit zukommen lässt, lohnt es sich durchaus einen genaueren Blick auf die neuen Features zu werfen. In den nächsten Woche werde ich die aus meiner Sicht wichtigsten Themen zusammenfassen und Euch zum Wochenende damit beglücken.
Starten möchte ich die Serie mit einer kleinen Einführung in die Semisynchronous Replication. Dieses von vielen lang erwartete Feature löst den bisher nicht vorhandenen Transaktionskontext über verteilte Replikationsumgebungen nun endlich auf. Aber was heisst das nun genau?
In einer normalen (synchronen) Replikationsumgebung schreibt die Master-DB alle Änderungen in lokale Binlogs und schert sich nicht über die weitere Bearbeitung durch einen oder mehrer Slaves. Diese Entkopplung zwischen Spooling der Änderungsdaten und spätere Einarbeitung in den Slaves bietet zwar einen Performancevorteil, kann bei Ausfall des Masters im weiteren Verlauf jedoch den Verlust von Daten zur Folge haben.
Wenn in einer Datenbankumgebung transaktionsorientiert gearbeitet wird, also mit autocommit=0 oder Initierung durch den Befehl start transaction, hat dies zur Folge, dass erst nach dem nächsten Commit die Daten für alle anderen Benutzer sichtbar geschrieben werden. Voraussetzung hierfür ist der Einsatz von InnoDB, welche seit Version 5.5 auch Standard-Engine, und die  ACID-Kriterien erfüllt. Sobald der Benutzer den Commit abgesetzt hat, werden die Daten geschrieben und für das lokale System ist die Integrität hergestellt. Was aber wenn ein angeschlossener DB-Slave die Daten noch nicht eingearbeitet hat und es nun zu einem Ausfall des Masters kommt? Genau hier setzt die Semisynchronous Replication an. Bei Aktivierung, welcher für Master und Slave erforderlich ist, bekommt der Benutzer erst dann einen Status “committed” wenn die Transaktion auf mindestens einem Slave eingearbeitet ist. So kann auch in verteilten Umgebungen die Integrität auf mindestens einem weiteren Knoten sichergestellt werden. Bei Ausfall aller Slaves springt die Datenbank nach einem gewissen Timeout in die normale (synchrone) Replikation zurück und stellt so trotzdem die Verfügbarkeit sicher. Sobald wieder ein Slave verfügbar ist, wird natürlich wieder die Semisynchronous Replication verwendet. Über einige neue Servervariablen kann der Admin auch die entsprechenden Transaktionen im System sichtbar machen. So gibt die Variable Rpl_semi_sync_master_no_tx beispielsweise Auskunft über noch offene Transaktionen, welche noch nicht auf einem Slave committed wurden.
Für alle, denen eine replikationsübergreifende Transaktionssicherheit wichtig ist, ist dieses Feature ein Muss.

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.