Der er forskellige grunde til at tilføje en belastningsbalancer mellem dit program og din database. Hvis du har høj trafik (og du ønsker at balancere trafikken mellem forskellige databasenoder), eller du vil bruge belastningsbalanceren som et enkelt slutpunkt (så i tilfælde af failover, vil denne belastningsbalancer klare dette problem ved at sende trafikken til tilgængelig/sund node.) Det kan også være, at du vil bruge forskellige porte til at skrive og læse data fra din database.
I alle disse tilfælde vil en load balancer være nyttig for dig, og hvis du har en MariaDB-klynge, er en mulighed for dette at bruge MaxScale, som er en databaseproxy for MariaDB-databaser.
I denne blog vil vi vise dig, hvordan du installerer og konfigurerer det manuelt, og hvordan ClusterControl kan hjælpe dig med denne opgave. I dette eksempel vil vi bruge en MariaDB-replikeringsklynge med 1 master- og 1 slavenode og CentOS8 som operativsystem.
Sådan installeres MaxScale
Vi antager, at du har din MariaDB-database oppe at køre, og også en maskine (virtuel eller fysisk) til at installere MaxScale. Vi anbefaler, at du bruger en anden vært, så i tilfælde af masterfejl kan MaxScale failover til slavenoden, ellers kan MaxScale ikke foretage sig noget, hvis serveren, hvor den kører, går ned.
Der er forskellige måder at installere MaxScale på, i dette tilfælde vil vi bruge MariaDB-lagrene. For at tilføje det til MaxScale-serveren skal du køre:
$ 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
Installer nu MaxScale-pakken:
$ yum install maxscale
Nu har du din MaxScale-node installeret, før du starter, skal du konfigurere den.
Sådan konfigureres MaxScale
Når MaxScale udfører opgaver som godkendelse, overvågning og mere, skal du oprette en databasebruger med nogle specifikke privilegier:
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'@'%';
Husk, at MariaDB version 10.2.2 til 10.2.10 også kræver:
MariaDB [(none)]> GRANT SELECT ON mysql.* TO 'maxscaleuser'@'%';
Nu har du databasebrugeren klar, lad os se konfigurationsfilerne. Når du installerer MaxScale, vil filen maxscale.cnf blive oprettet under /etc/. Der er flere variabler og forskellige måder at konfigurere det på, så lad os se et eksempel:
$ 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
I denne konfiguration har vi 2 databasenoder, 192.168.100.126 (Master) og 192.168.100.127 (Slave), som du kan se i afsnittet Serverdefinition.
Vi har også 2 forskellige tjenester, en til skrivebeskyttet, hvor der er slaveknuden, og en anden til læse-skrive, hvor der er masterknuden.
Endelig har vi 2 lyttere, en til hver tjeneste. Den skrivebeskyttede lytter, der lytter i port 4008, og den læse-skrive lytter i port 4006.
Dette er en grundlæggende konfigurationsfil. Hvis du har brug for noget mere specifikt, kan du følge den officielle MariaDB-dokumentation.
Nu er du klar til at starte den, så bare kør:
$ systemctl start maxscale.service
Og tjek det:
$ maxctrl list services
ff $ maxctrl list servers
Du kan finde en maxctrl-kommandoliste her, eller du kan endda bruge maxadmin at administrere det.
Lad os nu teste forbindelsen. Til dette kan du prøve at få adgang til din database ved hjælp af MaxScale IP-adressen og den port, du vil teste. I vores tilfælde skal trafikken på port 4006 sendes til server1, og trafikken på port 4008 til 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 |
+------------+
Det virker!
Sådan implementerer du MaxScale med ClusterControl
Lad os nu se, hvordan du kan bruge ClusterControl til at forenkle denne opgave. Til dette antager vi, at du har tilføjet din MariaDB-klynge til ClusterControl.
Gå til ClusterControl -> Vælg MariaDB-klyngen -> Cluster Actions -> Add Load Balancer -> MaxScale.
Her kan du implementere en ny MaxScale-node, eller du kan også importere en eksisterende en. Hvis du implementerer det, skal du tilføje IP-adressen eller værtsnavnet, admin- og brugerens MaxScale-legitimationsoplysninger, mængden af tråde og porte (skrive- og skrivebeskyttet). Du kan også angive, hvilken databasenode du vil tilføje til MaxScale-konfigurationen.
Du kan overvåge opgaven i afsnittet ClusterControl Activity. Når det er færdigt, vil du have en ny MaxScale-node i din MariaDB-klynge.
Og køre MaxScale-kommandoerne fra ClusterControl-brugergrænsefladen uden behov for at få adgang til server via SSH.
Det ser nemmere ud end at implementere det manuelt, ikke?
Konklusion
At have en Load Balancer er en god løsning, hvis du ønsker at balancere eller opdele din trafik, eller endda for failover-handlinger, og MaxScale, som et MariaDB-produkt, er en god mulighed for MariaDB-databaser.
Installationen er nem, men konfigurationen og brugen kan være vanskelig, hvis det er noget nyt for dig. I så fald kan du bruge ClusterControl til at implementere, konfigurere og administrere det på en nemmere måde.