Det finns olika anledningar till att lägga till en lastbalanserare mellan din applikation och din databas. Om du har hög trafik (och du vill balansera trafiken mellan olika databasnoder) eller om du vill använda lastbalanseraren som en enda slutpunkt (så i händelse av failover kommer denna lastbalanserare att hantera detta problem och skicka trafiken till tillgänglig/frisk nod.) Det kan också vara så att du vill använda olika portar för att skriva och läsa data från din databas.
I alla dessa fall kommer en lastbalanserare att vara användbar för dig, och om du har ett MariaDB-kluster är ett alternativ för detta att använda MaxScale som är en databasproxy för MariaDB-databaser.
I den här bloggen kommer vi att visa dig hur du installerar och konfigurerar det manuellt, och hur ClusterControl kan hjälpa dig i denna uppgift. I det här exemplet kommer vi att använda ett MariaDB-replikeringskluster med 1 master- och 1 slavnod och CentOS8 som operativsystem.
Hur man installerar MaxScale
Vi antar att du har din MariaDB-databas igång och även en maskin (virtuell eller fysisk) för att installera MaxScale. Vi rekommenderar att du använder en annan värd, så i händelse av masterfel kan MaxScale failover till slavnoden, annars kan MaxScale inte vidta några åtgärder om servern där den körs går ner.
Det finns olika sätt att installera MaxScale, i det här fallet kommer vi att använda MariaDB-förråden. För att lägga till den i MaxScale-servern måste du köra:
$ 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
Installera nu MaxScale-paketet:
$ yum install maxscale
Nu har du din MaxScale-nod installerad, innan du börjar måste du konfigurera den.
Hur man konfigurerar MaxScale
När MaxScale utför uppgifter som autentisering, övervakning och mer, måste du skapa en databasanvändare med vissa specifika 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'@'%';
Tänk på att MariaDB-versionerna 10.2.2 till 10.2.10 också kräver:
MariaDB [(none)]> GRANT SELECT ON mysql.* TO 'maxscaleuser'@'%';
Nu har du databasanvändaren redo, låt oss se konfigurationsfilerna. När du installerar MaxScale kommer filen maxscale.cnf att skapas under /etc/. Det finns flera variabler och olika sätt att konfigurera det, så låt oss se ett exempel:
$ 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 den här konfigurationen har vi 2 databasnoder, 192.168.100.126 (Master) och 192.168.100.127 (Slav), som du kan se i avsnittet Serverdefinition.
Vi har också 2 olika tjänster, en för skrivskyddad, där det finns slavnoden, och en annan för läs-skriv där det finns masternoden.
Äntligen har vi två lyssnare, en för varje tjänst. Den skrivskyddade lyssnaren, lyssnar i port 4008, och den läs-skrivande lyssnaren i port 4006.
Detta är en grundläggande konfigurationsfil. Om du behöver något mer specifikt kan du följa den officiella MariaDB-dokumentationen.
Nu är du redo att starta den, så kör bara:
$ systemctl start maxscale.service
Och kontrollera det:
$ maxctrl list services
ff $ maxctrl list servers
Du kan hitta en maxctrl-kommandolista här, eller så kan du till och med använda maxadmin för att hantera det.
Låt oss nu testa anslutningen. För detta kan du försöka komma åt din databas med hjälp av MaxScale IP-adressen och porten som du vill testa. I vårt fall ska trafiken på port 4006 skickas till server1 och trafiken på port 4008 till 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 fungerar!
Hur man distribuerar MaxScale med ClusterControl
Låt oss se nu hur du kan använda ClusterControl för att förenkla den här uppgiften. För detta antar vi att du har lagt till ditt MariaDB-kluster i ClusterControl.
Gå till ClusterControl -> Välj MariaDB-klustret -> Cluster Actions -> Add Load Balancer -> MaxScale.
Här kan du distribuera en ny MaxScale-nod eller så kan du också importera en befintlig ett. Om du distribuerar det måste du lägga till IP-adressen eller värdnamnet, administratörs- och användaruppgifterna MaxScale, antal trådar och portar (skriv- och skrivskyddad). Du kan också ange vilken databasnod du vill lägga till i MaxScale-konfigurationen.
Du kan övervaka uppgiften i avsnittet ClusterControl-aktivitet. När det är klart kommer du att ha en ny MaxScale-nod i ditt MariaDB-kluster.
Och köra MaxScale-kommandona från ClusterControl-gränssnittet utan att behöva komma åt server via SSH.
Det ser lättare ut än att distribuera det manuellt, eller hur?
Slutsats
Att ha en lastbalanserare är en bra lösning om du vill balansera eller dela upp din trafik, eller till och med för failover-åtgärder, och MaxScale, som en MariaDB-produkt, är ett bra alternativ för MariaDB-databaser.
Installationen är enkel, men konfigurationen och användningen kan vara svår om det är något nytt för dig. I så fall kan du använda ClusterControl för att distribuera, konfigurera och hantera det på ett enklare sätt.