De cloud biedt zeer flexibele omgevingen om mee te werken. U kunt het eenvoudig op en neer schalen door knooppunten toe te voegen of te verwijderen. Als dat nodig is, kunt u eenvoudig een kloon van uw omgeving maken. Dit kan worden gebruikt voor processen zoals upgrades, belastingstests, noodherstel. Het grootste probleem waarmee u te maken heeft, is dat toepassingen op de een of andere manier verbinding moeten maken met de databases, en flexibele instellingen kunnen lastig zijn voor databases, vooral met master-slave-instellingen. Gelukkig zijn er enkele opties om dit proces gemakkelijker te maken.
Eén manier is om een databaseproxy te gebruiken. Er zijn verschillende proxy's om uit te kiezen, maar in deze blogpost zullen we ProxySQL gebruiken, een bekende proxy die beschikbaar is voor MySQL en MariaDB. We gaan laten zien hoe je het kunt gebruiken om efficiënt verkeer tussen MySQL-knooppunten te verplaatsen zonder zichtbare impact voor de applicatie. We gaan ook enkele beperkingen en nadelen van deze aanpak uitleggen.
Eerste cloudconfiguratie
Laten we eerst de setup bespreken. We zullen AWS EC2-instanties gebruiken voor onze omgeving. Omdat we alleen aan het testen zijn, geven we niet echt om hoge beschikbaarheid, behalve wat we willen bewijzen dat het mogelijk is:naadloze masterwijzigingen. Daarom zullen we een enkel applicatieknooppunt en een enkel ProxySQL-knooppunt gebruiken. Volgens goede praktijken zullen we ProxySQL op het applicatieknooppunt plaatsen en wordt de applicatie geconfigureerd om verbinding te maken met ProxySQL via Unix-socket. Dit vermindert de overhead met betrekking tot TCP-verbindingen en verhoogt de veiligheid - verkeer van de toepassing naar de proxy verlaat de lokale instantie niet, waardoor alleen de ProxySQL -> MySQL-verbinding hoeft te worden versleuteld. Nogmaals, aangezien dit een eenvoudige test is, zullen we geen SSL instellen. In productieomgevingen wil je dat doen, ook als je VPC gebruikt.
De omgeving ziet er uit zoals in het onderstaande diagram:
Als applicatie zullen we Sysbench gebruiken - een synthetisch benchmarkprogramma voor MySQL . Het heeft een optie om het gebruik van transacties in en uit te schakelen, die we zullen gebruiken om te laten zien hoe ProxySQL ermee omgaat.
Een MySQL-replicatiecluster installeren met ClusterControl
Om de implementatie snel en efficiënt te maken, gaan we ClusterControl gebruiken om de MySQL-replicatie-setup voor ons te implementeren. De installatie van ClusterControl vereist slechts een paar stappen. We zullen hier niet in details treden, maar u zou onze website moeten openen, registreren en de installatie van ClusterControl zou vrij eenvoudig moeten zijn. Houd er rekening mee dat u SSH zonder wachtwoord moet instellen tussen de ClusterControl-instantie en alle knooppunten die we ermee gaan beheren.
Zodra ClusterControl is geïnstalleerd, kunt u inloggen. U krijgt een implementatiewizard te zien:
Omdat we al instanties in de cloud hebben, gaan we gewoon met optie "implementeren". We krijgen het volgende scherm te zien:
We kiezen MySQL-replicatie als het clustertype en we moeten connectiviteit bieden details. Het kan een verbinding zijn met een rootgebruiker of het kan net zo goed een sudo-gebruiker zijn met of zonder wachtwoord.
In de volgende stap moeten we een aantal beslissingen nemen. We gebruiken Percona Server voor MySQL in de nieuwste versie. We moeten ook een wachtwoord definiëren voor de rootgebruiker op de nodes die we zullen inzetten.
In de laatste stap moeten we een topologie definiëren - we gaan met wat we in het begin voorstelden - een meester en drie slaven.
ClusterControl start de implementatie - we kunnen het volgen op het tabblad Activiteit, zoals weergegeven op de bovenstaande schermafbeelding.
Zodra de implementatie is voltooid, kunnen we het cluster in de clusterlijst zien:
ProxySQL 2.0 installeren met ClusterControl
De volgende stap is het implementeren van ProxySQL. ClusterControl kan dit voor ons doen.
We kunnen dit doen in Beheren -> Load Balancer.
Omdat we alleen dingen aan het testen zijn, gaan we de ClusterControl-instantie opnieuw gebruiken voor ProxySQL en Sysbench. In het echte leven zou je waarschijnlijk je "echte" applicatieserver willen gebruiken. Als je het niet kunt vinden in de vervolgkeuzelijst, kun je het serveradres (IP of hostnaam) altijd met de hand schrijven.
We willen ook referenties definiëren voor bewakings- en beheerdersgebruikers. We hebben ook dubbel gecontroleerd of ProxySQL 2.0 zal worden geïmplementeerd (je kunt dit altijd wijzigen in 1.4.x als dat nodig is).
Onder in de wizard definiëren we de gebruiker die wordt gemaakt in zowel MySQL als ProxySQL. Als je een bestaande applicatie hebt, wil je waarschijnlijk een bestaande gebruiker gebruiken. Als u meerdere gebruikers voor uw toepassing gebruikt, kunt u de rest later altijd importeren, nadat ProxySQL is geïmplementeerd.
We willen ervoor zorgen dat alle MySQL-instanties worden geconfigureerd in ProxySQL. We zullen expliciete transacties gebruiken, dus we stellen de schakelaar dienovereenkomstig in. Dit is alles wat we moesten doen - de rest is klikken op de knop "ProxySQL implementeren" en ClusterControl zijn ding laten doen.
Als de installatie is voltooid, wordt ProxySQL weergegeven in de lijst met knooppunten in het cluster. Zoals je kunt zien op de bovenstaande schermafbeelding, heeft het de topologie en gedistribueerde knooppunten al gedetecteerd over hostgroepen van lezers en schrijvers.
Sysbench installeren
De laatste stap zal zijn om onze "applicatie" te maken door Sysbench te installeren. Het proces is vrij eenvoudig. Eerst moeten we de vereisten, bibliotheken en tools installeren die nodig zijn om Sysbench te compileren:
[email protected]:~# apt install git automake libtool make libssl-dev pkg-config libmysqlclient-dev
Vervolgens willen we de sysbench-repository klonen:
[email protected]:~# git clone https://github.com/akopytov/sysbench.git
Eindelijk willen we Sysbench compileren en installeren:
[email protected]:~# cd sysbench/
[email protected]:~/sysbench# ./autogen.sh && ./configure && make && make install
Dit is het, Sysbench is geïnstalleerd. We moeten nu wat gegevens genereren. Daarvoor moeten we eerst een schema maken. We zullen verbinding maken met lokale ProxySQL en hierdoor zullen we een 'sbtest'-schema op de master maken. Houd er rekening mee dat we Unix-socket hebben gebruikt voor verbinding met ProxySQL.
[email protected]:~/sysbench# mysql -S /tmp/proxysql.sock -u sbtest -psbtest
mysql> CREATE DATABASE sbtest;
Query OK, 1 row affected (0.01 sec)
Nu kunnen we sysbench gebruiken om de database te vullen met gegevens. Nogmaals, we gebruiken Unix-socket voor verbinding met de 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
Zodra de gegevens gereed zijn, kunnen we doorgaan met onze tests.
Conclusie
In het tweede deel van deze blog bespreken we hoe ProxySQL omgaat met verbindingen, failover en de instellingen ervan die ons kunnen helpen om de hoofdschakelaar te beheren op een manier die de applicatie zo min mogelijk hindert.