Klaster MariaDB składa się z serwera MariaDB z klastrem Galera i MariaDB MaxScale. Jako rozwiązanie replikacji z wieloma wzorcami każdy serwer MariaDB z klastrem Galera może działać jako serwer podstawowy. Oznacza to, że zmiany wprowadzone w dowolnym węźle w klastrze są replikowane w każdym innym węźle w klastrze, wykorzystując replikację opartą na certyfikacji i globalną kolejność transakcji dla silnika pamięci masowej InnoDB. MariaDB MaxScale to serwer proxy bazy danych umieszczony na szczycie serwera MariaDB Server, który zwiększa wysoką dostępność, skalowalność i bezpieczeństwo, jednocześnie upraszczając tworzenie aplikacji poprzez oddzielenie jej od podstawowej infrastruktury bazy danych.
W tej serii blogów przyjrzymy się administracji MaxScale przy użyciu maxctrl dla naszego klastra MariaDB. W pierwszej części serii blogów omówimy wprowadzenie i podstawowe informacje o narzędziu wiersza poleceń maxctrl. Nasza konfiguracja składa się z jednego serwera MaxScale i 3-węzłowego MariaDB 10.4 z Galera 4, jak pokazano na poniższym diagramie:
Nasz klaster MariaDB został wdrożony i zarządzany przez ClusterControl, podczas gdy nasz host MaxScale jest nowy host w klastrze i nie został wdrożony przez ClusterControl na potrzeby tego przewodnika.
Instalacja MaxScale
Instalacja MaxScale jest dość prosta. Wybierz odpowiedni system operacyjny ze strony pobierania MariaDB dla MaxScale i pobierz go. Poniższy przykład pokazuje, jak zainstalować MaxScale na hoście CentOS 8:
$ wget https://dlm.mariadb.com/1067156/MaxScale/2.4.10/centos/8/x86_64/maxscale-2.4.10-1.centos.8.x86_64.rpm
$ yum localinstall maxscale-2.4.10-1.centos.8.x86_64.rpm
$ systemctl enable maxscale
$ systemctl start maxscale
Po uruchomieniu demona komponenty MaxScale będą domyślnie uruchomione na następujących portach:
- 0.0.0.0:4006 — Domyślny odbiornik dzielenia odczytu i zapisu.
- 0.0.0.0:4008 — Domyślny odbiornik round-robin.
- 127.0.0.1:8989 - MaxScale Rest API.
Powyższe porty są zmienne. Często zdarza się, że samodzielny serwer MaxScale w środowisku produkcyjnym działa z podziałem odczytu/zapisu na porcie 3306 i round-robin na porcie 3307. Ta konfiguracja jest tym, co zamierzamy wdrożyć w tym poście na blogu.
Ważne pliki i struktura katalogów
Po zainstalowaniu pakietu otrzymasz następujące narzędzia/programy:
- maxscale - Sama MaxScale.
- maxctrl - Klient administracyjny wiersza poleceń dla MaxScale, który używa interfejsu API MaxScale REST do komunikacji.
- maxadmin - Przestarzały klient administracyjny i monitorujący MaxScale. Zamiast tego użyj maxctrl.
- maxkeys — To narzędzie zapisuje w pliku .secrets, w określonym katalogu, klucz szyfrowania AES i wektor init, który jest używany przez narzędzie maxpasswd podczas szyfrowania haseł używanych w pliku konfiguracyjnym MariaDB MaxScale.
- maxpasswd - To narzędzie tworzy zaszyfrowane hasło za pomocą pliku .secrets, który został wcześniej utworzony przy użyciu maxkeys.
MaxScale załaduje wszystkie opcje konfiguracyjne z następujących lokalizacji, w określonej kolejności:
- /etc/maxscale.cnf
- /etc/maxscale.cnf.d/*.cnf
- /var/lib/maxscale/maxscale.cnf.d/*.cnf
Aby lepiej zrozumieć konfigurację MaxScale, zapoznaj się z przewodnikiem po konfiguracji MaxScale.
Po zainicjowaniu MaxScale domyślne pliki i struktury katalogów to:
- Katalog danych MaxScale:/var/lib/maxscale
- Plik MaxScale PID:/var/run/maxscale/maxscale.pid
- Plik dziennika MaxScale:/var/log/maxscale/maxscale.log
- Dokumentacja MaxScale:/usr/share/maxscale
MaxCtrl — interfejs wiersza polecenia
Po uruchomieniu możemy użyć klienta wiersza poleceń MaxCtrl do administrowania MaxScale przy użyciu MaxScale REST API nasłuchuje na porcie 8989 na hoście lokalnym. Domyślne poświadczenia interfejsu API REST to „admin:mariadb”. Użytkownicy wykorzystywani przez REST API są tymi samymi użytkownikami, których używa interfejs sieciowy MaxAdmin. Oznacza to, że wszyscy użytkownicy stworzeni dla interfejsu sieciowego MaxAdmin powinni pracować z MaxScale REST API i MaxCtrl.
Możemy użyć narzędzia maxctrl w trybie interaktywnym, podobnym do klienta mysql. Po prostu wpisz "maxctrl" i przejdziesz do trybu interaktywnego (gdzie znak zachęty zmienił się z zachęty powłoki na zachętę maxctrl), tak jak na poniższym zrzucie ekranu:
Alternatywnie możemy wykonać to samo polecenie bezpośrednio w wierszu poleceń powłoki, na przykład:
Opcje polecenia MaxCtrl zależą od wersji MaxScale, która jest z nim dołączona. W chwili pisania tego tekstu wersja MaxScale to 2.4 i powinieneś zajrzeć do tej dokumentacji, aby uzyskać pełną listę poleceń. MaxCtrl wykorzystuje interfejs MaxScale REST API, który szczegółowo wyjaśniono tutaj.
Dodawanie serwerów MariaDB do MaxScale
Kiedy po raz pierwszy uruchomimy naszą MaxScale, wygeneruje ona plik konfiguracyjny w /etc/maxscale.cnf z kilkoma domyślnymi parametrami i przykładami. Nie będziemy używać tej konfiguracji i zamiast tego stworzymy własną. Utwórz kopię zapasową tego pliku, ponieważ chcemy go później opróżnić:
$ mv /etc/maxscale.cnf /etc/maxscale.cnf.bak
$ cat /dev/null > /etc/maxscale.cnf # empty the file
Uruchom ponownie MaxScale, aby zacząć wszystko od nowa:
$ systemctl restart maxscale
Termin „serwer” w MaxScale zasadniczo oznacza serwer zaplecza MariaDB, tak jak w tym przypadku wszystkie 3 węzły naszego klastra MariaDB. Aby dodać wszystkie 3 serwery MariaDB Cluster do środowiska wykonawczego MaxScale, użyj następujących poleceń:
$ maxctrl create server mariadbgalera1 192.168.0.221 3306
$ maxctrl create server mariadbgalera2 192.168.0.222 3306
$ maxctrl create server mariadbgalera3 192.168.0.222 3306
Aby zweryfikować dodane serwery, użyj polecenia list:
$ maxctrl list servers
Powinieneś zobaczyć następujące dane wyjściowe:
Dodawanie monitorowania do MaxScale
Następną rzeczą jest skonfigurowanie usługi monitorowania do użycia MaxScale. MaxScale obsługuje wiele modułów monitorujących w zależności od typu bazy danych, a mianowicie:
- Monitor MariaDB
- Monitor Galery
- Monitor klastrowy
- Monitor kolumnowy
- Monitor zorzy
W tej konfiguracji użyjemy modułu Galera Monitor o nazwie „galeramon”. Najpierw musimy utworzyć użytkownika bazy danych, który będzie używany przez MaxScale na jednym z serwerów w Klastrze MariaDB. W tym przykładzie wybraliśmy mariadbgalera1, 192.168.0.221 do uruchomienia następujących instrukcji:
MariaDB> CREATE USER [email protected]'192.168.0.220' IDENTIFIED BY 'MaXSc4LeP4ss';
MariaDB> GRANT SELECT ON mysql.* TO 'maxscale_monitor'@'192.168.0.220';
MariaDB> GRANT SHOW DATABASES ON *.* TO 'maxscale_monitor'@'192.168.0.220';
Gdzie 192.168.0.220 to adres IP naszego serwera MaxScale.
Przechowywanie hasła użytkownika maxscale_monitor w postaci zwykłego tekstu nie jest bezpieczne. Zdecydowanie zaleca się przechowywanie hasła w postaci zaszyfrowanej. Aby to osiągnąć, musimy wygenerować tajny klucz specjalnie dla tej instancji MaxScale. Użyj narzędzia „maxkeys”, aby wygenerować tajny klucz, który będzie używany przez MaxScale do celów szyfrowania i deszyfrowania:
$ maxkeys
Generating .secrets file in /var/lib/maxscale.
Teraz możemy użyć narzędzia maxpasswd do wygenerowania zaszyfrowanej wartości naszego hasła:
$ maxpasswd MaXSc4LeP4ss
D91DB5813F7C815B351CCF7D7F1ED6DB
Zawsze użyjemy powyższej wartości podczas przechowywania danych uwierzytelniających użytkownika monitorującego w MaxScale. Teraz jesteśmy gotowi do dodania usługi monitorowania Galera do MaxScale za pomocą maxctrl:
maxctrl> create monitor galera_monitor galeramon servers=mariadbgalera1,mariadbgalera2,mariadbgalera3 user=maxscale_monitor password=D91DB5813F7C815B351CCF7D7F1ED6DB
Zweryfikuj za pomocą następującego polecenia:
Dodawanie usług do MaxScale
Usługa to zasadniczo sposób, w jaki MaxScale powinien kierować zapytania do serwerów zaplecza. MaxScale 2.4 obsługuje wiele usług (lub routerów), a mianowicie:
- Avrorouter
- Binlogrouter
- Kot
- CLI
- WskazówkaRouter
- Readconnroute
- Podział odczytu i zapisu
- SchemaRouter
- SmartRouter
W przypadku naszego klastra MariaDB potrzebujemy tylko dwóch usług routingu — podziału odczytu i zapisu oraz równoważenia obciążenia w trybie round-robin. W przypadku dzielenia odczytu i zapisu zapytania zapisu będą przekazywane tylko do jednego serwera MariaDB, dopóki serwer nie będzie nieosiągalny, gdzie MaxScale przekaże następnie zapytania zapisu do następnego dostępnego węzła. W przypadku równoważenia okrężnego zapytania będą przekazywane do wszystkich węzłów zaplecza w sposób okrężny.
Utwórz usługę routingu dla round-robin (lub multi-master):
maxctrl> create service Round-Robin-Service readconnroute user=maxscale_monitor password=D91DB5813F7C815B351CCF7D7F1ED6DB --servers mariadbgalera1 mariadbgalera2 mariadbgalera3
Utwórz inną usługę routingu dla dzielenia odczytu i zapisu (lub pojedynczego wzorca):
maxctrl> create service Read-Write-Service readwritesplit user=maxscale_monitor password=D91DB5813F7C815B351CCF7D7F1ED6DB --servers mariadbgalera1 mariadbgalera2 mariadbgalera3
Weryfikuj za pomocą:
Wszystkie pomyślnie utworzone komponenty przez MaxCtrl wygenerują swój własny plik konfiguracyjny w / var/lib/maxscale/maxscale.cnf.d. W tym momencie katalog wygląda tak:
$ ls -l /var/lib/maxscale/maxscale.cnf.d
total 24
-rw-r--r--. 1 maxscale maxscale 532 Jul 5 13:18 galera_monitor.cnf
-rw-r--r--. 1 maxscale maxscale 250 Jul 5 12:55 mariadbgalera1.cnf
-rw-r--r--. 1 maxscale maxscale 250 Jul 5 12:55 mariadbgalera2.cnf
-rw-r--r--. 1 maxscale maxscale 250 Jul 5 12:56 mariadbgalera3.cnf
-rw-r--r--. 1 maxscale maxscale 1128 Jul 5 16:01 Read-Write-Service.cnf
-rw-r--r--. 1 maxscale maxscale 477 Jul 5 16:00 Round-Robin-Service.cnf
Dodawanie słuchaczy do MaxScale
Odbiorniki reprezentują porty, na których usługa będzie nasłuchiwać połączeń przychodzących. Może to być port lub plik gniazda UNIX, a typem komponentu musi być „nasłuchiwanie”. Zazwyczaj słuchacze są związani z usługami. W naszej konfiguracji utworzymy dwa odbiorniki — odbiornik odczytu i zapisu na porcie 3306 i odbiornik typu Round-Robin na porcie 3307:
maxctrl> create listener Read-Write-Service Read-Write-Listener 3306 --interface=0.0.0.0 --authenticator=MariaDBAuth
maxctrl> create listener Round-Robin-Service Round-Robin-Listener 3307 --interface=0.0.0.0 --authenticator=MariaDBAuth
Zweryfikuj za pomocą następujących poleceń:
W tym momencie nasz MaxScale jest gotowy do równoważenia obciążenia zapytań do nasz Klaster MariaDB. Z aplikacji wyślij zapytania do hosta MaxScale na porcie 3306, gdzie zapytania dotyczące zapisu zawsze trafią do tego samego węzła bazy danych, podczas gdy zapytania dotyczące odczytu zostaną wysłane do pozostałych dwóch węzłów. Jest to również znane jako konfiguracja z jednym zapisem. Jeśli chcesz użyć konfiguracji multi-writer, w której zapisy będą przekazywane do wszystkich węzłów zaplecza MariaDB w oparciu o algorytmy równoważenia round-robin. Możesz dalej dostroić wyważenie, używając priorytetu i wagi.
Ponownie, podczas zmiany opcji konfiguracyjnych za pomocą maxctrl, wszystkie pomyślnie utworzone komponenty będą miały swój własny plik konfiguracyjny w /var/lib/maxscale/maxscale.cnf.d, jak pokazano na poniższym wyjściu:
$ ls -l /var/lib/maxscale/maxscale.cnf.d
-rw-r--r--. 1 maxscale maxscale 532 Jul 5 13:18 galera_monitor.cnf
-rw-r--r--. 1 maxscale maxscale 250 Jul 5 12:55 mariadbgalera1.cnf
-rw-r--r--. 1 maxscale maxscale 250 Jul 5 12:55 mariadbgalera2.cnf
-rw-r--r--. 1 maxscale maxscale 250 Jul 5 12:56 mariadbgalera3.cnf
-rw-r--r--. 1 maxscale maxscale 259 Jul 5 16:06 Read-Write-Listener.cnf
-rw-r--r--. 1 maxscale maxscale 1128 Jul 5 16:06 Read-Write-Service.cnf
-rw-r--r--. 1 maxscale maxscale 261 Jul 5 16:06 Round-Robin-Listener.cnf
-rw-r--r--. 1 maxscale maxscale 477 Jul 5 16:06 Round-Robin-Service.cnf
Powyższe opcje konfiguracyjne można bezpośrednio modyfikować w celu dalszego dostosowania do własnych potrzeb, ale w celu załadowania nowych zmian wymagane jest ponowne uruchomienie usługi MaxScale. Jeśli chcesz zacząć od nowa, możesz wyczyścić wszystko w tym katalogu i ponownie uruchomić MaxScale.
W następnym odcinku przyjrzymy się poleceniom zarządzania i monitorowania MaxCtrl dla naszego klastra MariaDB.