Auf der DOAGA 2019 in Nürnberg konnte ich die Möglichkeit nutzen, eine LAMP-Applikation (LAMP= Linux + Apache + MySQL + PHP) hochverfügbar zu gestalten. Dazu wird unter Zuhilfenahme der MySQL Shell ein InnoDB Cluster aufgebaut und zusätzlich die klassische Verbindung zwischen Applikation und Datenbank um den MySQL Router erweitert. Im Live-Beispiel wurden sämtliche Komponenten mit Docker zur Verfügung gestellt. Laden Sie sich das Beispiel selbst bei Github herunter und probieren es aus!
Let's Go
Als erstes wird mittels der MySQL Shell eine Verbindung zur ursprünglichen Applikationsdatenbank hergestellt (doag2019_mysql1):
Nun wird im JavaScript-Modus der Shell (zu erkennen am JS-Prompt) ein Cluster mittels des vordefinierten dba-Objektes initialisiert und ein Name vergeben:
Die Shell nutzt die offene Verbindung zum MySQL Server, um das Cluster zu initialisieren und die erste Instanz automatisch hinzuzufügen. An dieser Stelle wird zusätzlich auf die notwendige Konfiguration überprüft. Muss die Konfiguration ergänzt werden, nutzt die Shell hierbei die mysqld_auto.conf (Artikel folgt), um einen fortlaufenden Betrieb gewährleisten zu können.
Für ein vollständiges Cluster fehlen nun noch zwei weitere Instanzen. Mit nur einem Befehl lassen sie sich ganz leicht hinzufügen:
Nr. 2
Nr. 3
And Now?
Nachdem nun zwei weitere Instanzen hinzugeführt wurden, kann der Status des Clusters ermittelt werden:
Durch die Konfiguration des Clusters wurden die beiden neuen Instanzen automatisch als READ_ONLY (mysqld_auto.conf) konfiguriert und erlauben daher keine schreibenden Zugriffe. Fällt nun der Primary Node (doag2019_mysql1) aus, reagiert das Cluster automatisch und öffnet eine der übrigen Instanzen im Read-Write-Modus:
Ist die verlorene Instanz wieder verfügbar, kann der Primary Knoten bei Bedarf (zurück) gewechselt werden:Let's bootstrap
Damit die Applikation nun stets mit der primären Instanz des Clusters arbeiten kann, muss der MySQL Router gestartet und konfiguriert werden.
Hierbei nutzen wir die Bootstrap-Funktionalität des Routers, indem wir beim erstmaligen Starten lediglich die Verbindung einer Instanz des Clusters angeben. Daraufhin erstellt der Router eine vollständige Konfigurationsdatei und holt sich alle notwendigen Metadaten des Clusters:
In der Applikationskonfiguration muss nun nur noch die Datenbankverbindung durch die Verbindung zum MySQL Router über den gewünschten Port ersetzt werden. Alles Weitere regelt das InnoDB Cluster automatisch.
Wenn Sie Fragen zu MySQL im Allgemeinen oder zum Themenbereich Hochverfügbarkeit im Speziellen haben, dann wenden Sie sich gerne an uns.
This browser does not support the video element.