Er zijn verschillende redenen om een load balancer toe te voegen tussen uw applicatie en uw database. Als u veel verkeer hebt (en u het verkeer tussen verschillende databaseknooppunten wilt verdelen) of als u de load balancer als een enkel eindpunt wilt gebruiken (dus in het geval van een failover lost deze load balancer dit probleem op door het verkeer naar de beschikbaar/gezond knooppunt.) Het kan ook zijn dat u verschillende poorten wilt gebruiken om gegevens uit uw database te schrijven en te lezen.
In al deze gevallen is een load balancer handig voor u, en als u een MariaDB-cluster heeft, kunt u hiervoor MaxScale gebruiken, een databaseproxy voor MariaDB-databases.
In deze blog laten we u zien hoe u het handmatig installeert en configureert, en hoe ClusterControl u hierbij kan helpen. Voor dit voorbeeld gebruiken we een MariaDB-replicatiecluster met 1 master- en 1 slave-node en CentOS8 als besturingssysteem.
MaxScale installeren
We gaan ervan uit dat je je MariaDB-database actief hebt en ook een machine (virtueel of fysiek) om MaxScale te installeren. We raden u aan een andere host te gebruiken, dus in het geval van een masterfout kan MaxScale een failover naar de slave-node uitvoeren, anders kan MaxScale geen actie ondernemen als de server waarop deze draait uitvalt.
Er zijn verschillende manieren om MaxScale te installeren, in dit geval gebruiken we de MariaDB-repositories. Om het toe te voegen aan de MaxScale-server, moet u het volgende uitvoeren:
$ curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash
[info] Repository file successfully written to /etc/yum.repos.d/mariadb.repo
[info] Adding trusted package signing keys...
[info] Successfully added trusted package signing keys
Installeer nu het MaxScale-pakket:
$ yum install maxscale
Nu heeft u uw MaxScale-node geïnstalleerd, voordat u begint, moet u deze configureren.
MaxScale configureren
Omdat MaxScale taken uitvoert zoals authenticatie, controle en meer, moet u een databasegebruiker maken met een aantal specifieke privileges:
MariaDB [(none)]> CREATE USER 'maxscaleuser'@'%' IDENTIFIED BY 'maxscalepassword';
MariaDB [(none)]> GRANT SELECT ON mysql.user TO 'maxscaleuser'@'%';
MariaDB [(none)]> GRANT SELECT ON mysql.db TO 'maxscaleuser'@'%';
MariaDB [(none)]> GRANT SELECT ON mysql.tables_priv TO 'maxscaleuser'@'%';
MariaDB [(none)]> GRANT SELECT ON mysql.roles_mapping TO 'maxscaleuser'@'%';
MariaDB [(none)]> GRANT SHOW DATABASES ON *.* TO 'maxscaleuser'@'%';
MariaDB [(none)]> GRANT REPLICATION CLIENT on *.* to 'maxscaleuser'@'%';
Houd er rekening mee dat MariaDB-versies 10.2.2 tot 10.2.10 ook het volgende vereisen:
MariaDB [(none)]> GRANT SELECT ON mysql.* TO 'maxscaleuser'@'%';
Nu heb je de databasegebruiker klaar, laten we de configuratiebestanden eens bekijken. Wanneer u MaxScale installeert, wordt het bestand maxscale.cnf aangemaakt onder /etc/. Er zijn verschillende variabelen en verschillende manieren om het te configureren, dus laten we een voorbeeld bekijken:
$ cat /etc/maxscale.cnf
# Global parameters
[maxscale]
threads = auto
log_augmentation = 1
ms_timestamp = 1
syslog = 1
# Server definitions
[server1]
type=server
address=192.168.100.126
port=3306
protocol=MariaDBBackend
[server2]
type=server
address=192.168.100.127
port=3306
protocol=MariaDBBackend
# Monitor for the servers
[MariaDB-Monitor]
type=monitor
module=mariadbmon
servers=server1,server2
user=maxscaleuser
password=maxscalepassword
monitor_interval=2000
# Service definitions
[Read-Only-Service]
type=service
router=readconnroute
servers=server2
user=maxscaleuser
password=maxscalepassword
router_options=slave
[Read-Write-Service]
type=service
router=readwritesplit
servers=server1
user=maxscaleuser
password=maxscalepassword
# Listener definitions for the services
[Read-Only-Listener]
type=listener
service=Read-Only-Service
protocol=MariaDBClient
port=4008
[Read-Write-Listener]
type=listener
service=Read-Write-Service
protocol=MariaDBClient
port=4006
In deze configuratie hebben we 2 databaseknooppunten, 192.168.100.126 (Master) en 192.168.100.127 (Slave), zoals u kunt zien in het gedeelte Serverdefinitie.
We hebben ook 2 verschillende services, een voor alleen-lezen, waar het slave-knooppunt is, en een andere voor lezen-schrijven waar het master-knooppunt is.
Eindelijk hebben we 2 luisteraars, één voor elke service. De alleen-lezen luisteraar, luisterend in poort 4008, en de lees-schrijfluisteraar, luisterend in poort 4006.
Dit is een basisconfiguratiebestand. Als je iets specifieks nodig hebt, kun je de officiële MariaDB-documentatie volgen.
Nu ben je klaar om het te starten, dus voer gewoon uit:
$ systemctl start maxscale.service
En controleer het:
$ maxctrl list services
ff 
$ maxctrl list servers

Je kunt hier een lijst met maxctrl-opdrachten vinden, of je kunt zelfs maxadmin gebruiken om het te beheren.
Laten we nu de verbinding testen. Hiervoor kunt u proberen toegang te krijgen tot uw database met behulp van het MaxScale IP-adres en de poort die u wilt testen. In ons geval moet het verkeer op poort 4006 naar server1 worden gestuurd en het verkeer op poort 4008 naar server2.
$ mysql -h 192.168.100.128 -umaxscaleuser -pmaxscalepassword -P4006 -e 'SELECT @@hostname;'
+------------+
| @@hostname |
+------------+
| server1 |
+------------+
$ mysql -h 192.168.100.128 -umaxscaleuser -pmaxscalepassword -P4008 -e 'SELECT @@hostname;'
+------------+
| @@hostname |
+------------+
| server2 |
+------------+
Het werkt!
MaxScale implementeren met ClusterControl
Laten we eens kijken hoe je ClusterControl kunt gebruiken om deze taak te vereenvoudigen. Hiervoor gaan we ervan uit dat uw MariaDB-cluster is toegevoegd aan ClusterControl.
Ga naar ClusterControl -> Selecteer het MariaDB-cluster -> Clusteracties -> Load Balancer toevoegen -> MaxScale.

Hier kunt u een nieuwe MaxScale-node implementeren of u kunt ook een bestaande een. Als u het implementeert, moet u het IP-adres of de hostnaam, de MaxScale-inloggegevens van de beheerder en gebruiker, het aantal threads en poorten (alleen schrijven en alleen-lezen) toevoegen. U kunt ook specificeren welk databaseknooppunt u aan de MaxScale-configuratie wilt toevoegen.

U kunt de taak controleren in het gedeelte ClusterControl-activiteit. Als het klaar is, heb je een nieuwe MaxScale-node in je MariaDB-cluster.

En het uitvoeren van de MaxScale-opdrachten vanuit de ClusterControl-gebruikersinterface zonder toegang tot de server via SSH.

Het ziet er gemakkelijker uit dan het handmatig te implementeren, toch?
Conclusie
Het hebben van een Load Balancer is een goede oplossing als u uw verkeer wilt verdelen of splitsen, of zelfs voor failover-acties, en MaxScale, als MariaDB-product, is een goede optie voor MariaDB-databases.
De installatie is eenvoudig, maar de configuratie en het gebruik kunnen moeilijk zijn als het iets nieuws voor u is. In dat geval kunt u ClusterControl gebruiken om het op een eenvoudigere manier te implementeren, configureren en beheren.