Die Cloud bietet sehr flexible Arbeitsumgebungen. Sie können es einfach nach oben und unten skalieren, indem Sie Knoten hinzufügen oder entfernen. Bei Bedarf können Sie ganz einfach einen Klon Ihrer Umgebung erstellen. Dies kann für Prozesse wie Upgrades, Lasttests und Notfallwiederherstellung verwendet werden. Das Hauptproblem, mit dem Sie sich auseinandersetzen müssen, besteht darin, dass Anwendungen auf irgendeine Weise eine Verbindung zu den Datenbanken herstellen müssen und flexible Setups für Datenbanken schwierig sein können - insbesondere bei Master-Slave-Setups. Glücklicherweise gibt es einige Optionen, um diesen Vorgang zu vereinfachen.
Eine Möglichkeit besteht darin, einen Datenbank-Proxy zu verwenden. Es stehen mehrere Proxys zur Auswahl, aber in diesem Blogbeitrag verwenden wir ProxySQL, einen bekannten Proxy, der für MySQL und MariaDB verfügbar ist. Wir werden zeigen, wie Sie damit Datenverkehr effizient zwischen MySQL-Knoten ohne sichtbare Auswirkungen auf die Anwendung verschieben können. Wir werden auch einige Einschränkungen und Nachteile dieses Ansatzes erläutern.
Erste Cloud-Einrichtung
Lassen Sie uns zunächst die Einrichtung besprechen. Wir werden AWS EC2-Instances für unsere Umgebung verwenden. Da wir nur testen, kümmern wir uns nicht wirklich um Hochverfügbarkeit, außer dem, was wir als möglich beweisen wollen – nahtlose Master-Änderungen. Daher verwenden wir einen einzelnen Anwendungsknoten und einen einzelnen ProxySQL-Knoten. Gemäß den bewährten Verfahren stellen wir ProxySQL auf dem Anwendungsknoten zusammen und die Anwendung wird so konfiguriert, dass sie über einen Unix-Socket eine Verbindung zu ProxySQL herstellt. Dies reduziert den Overhead im Zusammenhang mit TCP-Verbindungen und erhöht die Sicherheit – der Datenverkehr von der Anwendung zum Proxy verlässt die lokale Instanz nicht, sodass nur die ProxySQL -> MySQL-Verbindung zum Verschlüsseln übrig bleibt. Da dies ein einfacher Test ist, werden wir SSL nicht einrichten. In Produktionsumgebungen möchten Sie dies tun, auch wenn Sie VPC verwenden.
Die Umgebung wird wie im Diagramm unten aussehen:
Als Anwendung verwenden wir Sysbench – ein synthetisches Benchmark-Programm für MySQL . Es hat eine Option zum Deaktivieren und Aktivieren der Verwendung von Transaktionen, die wir verwenden werden, um zu demonstrieren, wie ProxySQL mit ihnen umgeht.
Installieren eines MySQL-Replikationsclusters mit ClusterControl
Um die Bereitstellung schnell und effizient zu gestalten, werden wir ClusterControl verwenden, um das MySQL-Replikations-Setup für uns bereitzustellen. Die Installation von ClusterControl erfordert nur wenige Schritte. Wir werden hier nicht ins Detail gehen, aber Sie sollten unsere Website öffnen, die Registrierung und Installation von ClusterControl sollte ziemlich einfach sein. Bitte denken Sie daran, dass Sie passwortloses SSH zwischen der ClusterControl-Instanz und allen Knoten einrichten müssen, die wir damit verwalten werden.
Sobald ClusterControl installiert wurde, können Sie sich anmelden. Ihnen wird ein Bereitstellungsassistent angezeigt:
Da wir bereits Instanzen haben, die in der Cloud laufen, gehen wir einfach mit Option „Bereitstellen“. Der folgende Bildschirm wird angezeigt:
Wir wählen die MySQL-Replikation als Clustertyp und müssen Konnektivität bereitstellen Einzelheiten. Es kann eine Verbindung mit dem Root-Benutzer sein oder es kann auch ein sudo-Benutzer mit oder ohne Passwort sein.
Im nächsten Schritt müssen wir einige Entscheidungen treffen. Wir werden Percona Server für MySQL in der neuesten Version verwenden. Wir müssen auch ein Passwort für den Root-Benutzer auf den Knoten definieren, die wir bereitstellen werden.
Im letzten Schritt müssen wir eine Topologie definieren - wir machen mit was wir am Anfang vorgeschlagen haben - ein Meister und drei Sklaven.
ClusterControl startet die Bereitstellung – wir können sie auf der Registerkarte „Aktivität“ verfolgen, wie auf dem Screenshot oben gezeigt.
Sobald die Bereitstellung abgeschlossen ist, können wir den Cluster in der Clusterliste sehen:
Installation von ProxySQL 2.0 mit ClusterControl
Der nächste Schritt wird die Bereitstellung von ProxySQL sein. ClusterControl kann das für uns erledigen.
Wir können dies unter Verwalten -> Load Balancer tun.
Da wir nur Dinge testen, werden wir die ClusterControl-Instanz wiederverwenden für ProxySQL und Sysbench. Im wirklichen Leben möchten Sie wahrscheinlich Ihren „echten“ Anwendungsserver verwenden. Wenn Sie es im Dropdown-Menü nicht finden können, können Sie die Serveradresse (IP oder Hostname) jederzeit von Hand eingeben.
Wir wollen auch Zugangsdaten für Überwachungs- und Verwaltungsbenutzer definieren. Wir haben auch überprüft, ob ProxySQL 2.0 bereitgestellt wird (Sie können es bei Bedarf jederzeit auf 1.4.x ändern).
Im unteren Teil des Assistenten definieren wir den Benutzer, der sein wird sowohl in MySQL als auch in ProxySQL erstellt. Wenn Sie über eine vorhandene Anwendung verfügen, möchten Sie wahrscheinlich einen vorhandenen Benutzer verwenden. Wenn Sie zahlreiche Benutzer für Ihre Anwendung verwenden, können Sie den Rest jederzeit später importieren, nachdem ProxySQL bereitgestellt wurde.
Wir möchten sicherstellen, dass alle MySQL-Instanzen in ProxySQL konfiguriert werden. Wir werden explizite Transaktionen verwenden, also stellen wir den Schalter entsprechend ein. Das ist alles, was wir tun müssen – der Rest besteht darin, auf die Schaltfläche „ProxySQL bereitstellen“ zu klicken und ClusterControl seine Arbeit erledigen zu lassen.
Wenn die Installation abgeschlossen ist, wird ProxySQL in der Liste der Knoten angezeigt im Cluster. Wie Sie auf dem obigen Screenshot sehen können, hat es bereits die Topologie erkannt und Knoten über Reader- und Writer-Hostgruppen verteilt.
Sysbench installieren
Der letzte Schritt besteht darin, unsere „Anwendung“ zu erstellen, indem Sie Sysbench installieren. Der Prozess ist ziemlich einfach. Zuerst müssen wir Voraussetzungen, Bibliotheken und Tools installieren, die zum Kompilieren von Sysbench erforderlich sind:
[email protected]:~# apt install git automake libtool make libssl-dev pkg-config libmysqlclient-dev
Dann wollen wir das Sysbench-Repository klonen:
[email protected]:~# git clone https://github.com/akopytov/sysbench.git
Schließlich wollen wir Sysbench kompilieren und installieren:
[email protected]:~# cd sysbench/
[email protected]:~/sysbench# ./autogen.sh && ./configure && make && make install
Das ist es, Sysbench wurde installiert. Wir müssen jetzt einige Daten generieren. Dazu müssen wir zunächst ein Schema erstellen. Wir werden eine Verbindung zum lokalen ProxySQL herstellen und dadurch ein „sbtest“-Schema auf dem Master erstellen. Bitte beachten Sie, dass wir Unix-Socket für die Verbindung mit ProxySQL verwendet haben.
[email protected]:~/sysbench# mysql -S /tmp/proxysql.sock -u sbtest -psbtest
mysql> CREATE DATABASE sbtest;
Query OK, 1 row affected (0.01 sec)
Jetzt können wir sysbench verwenden, um die Datenbank mit Daten zu füllen. Auch hier verwenden wir Unix-Socket für die Verbindung mit dem Proxy:
[email protected]:~# sysbench /root/sysbench/src/lua/oltp_read_write.lua --threads=4 --events=0 --time=3600 --mysql-socket=/tmp/proxysql.sock --mysql-user=sbtest --mysql-password=sbtest --tables=32 --report-interval=1 --skip-trx=on --table-size=100000 --db-ps-mode=disable prepare
Sobald die Daten fertig sind, können wir mit unseren Tests fortfahren.
Fazit
Im zweiten Teil dieses Blogs werden wir den Umgang von ProxySQL mit Verbindungen, Failover und seinen Einstellungen besprechen, die uns helfen können, den Master-Switch so zu verwalten, dass er die Anwendung am wenigsten stört.