Istnieją różne powody, dla których warto dodać system równoważenia obciążenia między Twoją aplikacją a bazą danych. Jeśli masz duży ruch (i chcesz zrównoważyć ruch między różnymi węzłami bazy danych) lub chcesz użyć load balancera jako pojedynczego punktu końcowego (więc w przypadku awarii, ten load balancer poradzi sobie z tym problemem wysyłając ruch do dostępny/zdrowy węzeł.) Może się również zdarzyć, że chcesz używać różnych portów do zapisywania i odczytywania danych z bazy danych.
We wszystkich tych przypadkach system równoważenia obciążenia będzie przydatny, a jeśli masz klaster MariaDB, jedną z opcji jest użycie MaxScale, który jest serwerem proxy dla baz danych MariaDB.
W tym blogu pokażemy, jak zainstalować i skonfigurować go ręcznie oraz jak ClusterControl może pomóc w tym zadaniu. W tym przykładzie użyjemy klastra replikacji MariaDB z 1 węzłem głównym i 1 węzłem podrzędnym oraz CentOS8 jako systemem operacyjnym.
Jak zainstalować MaxScale
Założymy, że masz uruchomioną i uruchomioną bazę danych MariaDB, a także maszynę (wirtualną lub fizyczną) do zainstalowania MaxScale. Zalecamy użycie innego hosta, więc w przypadku awarii mastera, MaxScale może przełączyć się awaryjnie na węzeł podrzędny, w przeciwnym razie MaxScale nie może podjąć żadnych działań, jeśli serwer, na którym działa, przestanie działać.
Istnieją różne sposoby instalacji MaxScale, w tym przypadku użyjemy repozytoriów MariaDB. Aby dodać go do serwera MaxScale, musisz uruchomić:
$ 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
Teraz zainstaluj pakiet MaxScale:
$ yum install maxscale
Teraz masz już zainstalowany węzeł MaxScale, przed rozpoczęciem musisz go skonfigurować.
Jak skonfigurować MaxScale
Ponieważ MaxScale wykonuje zadania, takie jak uwierzytelnianie, monitorowanie i inne, musisz utworzyć użytkownika bazy danych z określonymi uprawnieniami:
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'@'%';
Pamiętaj, że MariaDB w wersjach od 10.2.2 do 10.2.10 wymaga również:
MariaDB [(none)]> GRANT SELECT ON mysql.* TO 'maxscaleuser'@'%';
Teraz masz już gotowego użytkownika bazy danych, zobaczmy pliki konfiguracyjne. Podczas instalacji MaxScale plik maxscale.cnf zostanie utworzony w katalogu /etc/. Istnieje kilka zmiennych i różne sposoby konfiguracji, więc zobaczmy przykład:
$ 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
W tej konfiguracji mamy 2 węzły bazy danych, 192.168.100.126 (Master) i 192.168.100.127 (Slave), jak widać w sekcji Servers Definition.
Mamy również 2 różne usługi, jedną tylko do odczytu, gdzie znajduje się węzeł podrzędny, a drugą do odczytu i zapisu, gdzie znajduje się węzeł główny.
Nareszcie mamy 2 słuchaczy, po jednym dla każdej usługi. Odbiornik tylko do odczytu, nasłuchujący na porcie 4008 i odczyt-zapis, nasłuchujący na porcie 4006.
To jest podstawowy plik konfiguracyjny. Jeśli potrzebujesz czegoś bardziej szczegółowego, możesz zapoznać się z oficjalną dokumentacją MariaDB.
Teraz możesz go uruchomić, więc po prostu uruchom:
$ systemctl start maxscale.service
I sprawdź to:
$ maxctrl list services
ff $ maxctrl list servers
Listę poleceń maxctrl można znaleźć tutaj lub nawet użyć maxadmin aby nim zarządzać.
Teraz przetestujmy połączenie. W tym celu możesz spróbować uzyskać dostęp do bazy danych za pomocą adresu IP MaxScale i portu, który chcesz przetestować. W naszym przypadku ruch na porcie 4006 powinien być przesłany do serwera 1, a ruch na porcie 4008 do serwera2.
$ 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 |
+------------+
To działa!
Jak wdrożyć MaxScale z ClusterControl
Zobaczmy teraz, jak można użyć ClusterControl, aby uprościć to zadanie. W tym celu założymy, że masz klaster MariaDB dodany do ClusterControl.
Przejdź do ClusterControl -> Wybierz klaster MariaDB -> Akcje klastra -> Dodaj Load Balancer -> MaxScale.
Tutaj możesz wdrożyć nowy węzeł MaxScale lub zaimportować istniejący jeden. Jeśli go wdrażasz, musisz dodać adres IP lub nazwę hosta, poświadczenia administratora i użytkownika MaxScale, liczbę wątków i porty (tylko do zapisu i odczytu). Możesz również określić, który węzeł bazy danych chcesz dodać do konfiguracji MaxScale.
Możesz monitorować zadanie w sekcji ClusterControl Activity. Po zakończeniu będziesz mieć nowy węzeł MaxScale w swoim klastrze MariaDB.
I uruchamianie poleceń MaxScale z interfejsu ClusterControl bez konieczności uzyskiwania dostępu do serwer przez SSH.
Wygląda na prostsze niż ręczne wdrażanie, prawda?
Wnioski
Posiadanie Load Balancer jest dobrym rozwiązaniem, jeśli chcesz zrównoważyć lub podzielić ruch, a nawet wykonać akcje awaryjne, a MaxScale, jako produkt MariaDB, jest dobrą opcją dla baz danych MariaDB.
Instalacja jest łatwa, ale konfiguracja i użytkowanie mogą być trudne, jeśli jest to dla Ciebie coś nowego. W takim przypadku możesz użyć ClusterControl, aby wdrożyć, skonfigurować i zarządzać nim w łatwiejszy sposób.