Galera Cluster to jedno z najpopularniejszych rozwiązań wysokiej dostępności dla MySQL. Jest to wirtualnie synchroniczny klaster, który pomaga kontrolować opóźnienie replikacji. Dzięki kontroli przepływu klaster Galera może sam się dławić i umożliwiać większej liczbie obciążonych węzłów nadrobienie zaległości w stosunku do reszty klastra. Niedawne wydanie Galery 4 przyniosło nowe funkcje i ulepszenia. Omówiliśmy je w poście na blogu dotyczącym MariaDB 10.4 Galera Cluster oraz w poście na blogu omawiającym istniejące i nadchodzące funkcje Galera 4.
Jak wygląda taryfa Galera 4 używana w Amazon EC2? Jak zapewne wiesz, Amazon oferuje usługi relacyjnej bazy danych, które mają na celu zapewnienie użytkownikom łatwego sposobu wdrażania wysoce dostępnej bazy danych MySQL. Mój kolega, Ashraf Sharif, porównał w swoim poście na blogu czasy przełączania awaryjnego dla RDS MySQL i RDS Aurora. Czasy przełączania awaryjnego dla Aurory wyglądają naprawdę świetnie, ale są pewne ale. Przede wszystkim jesteś zmuszony do korzystania z RDS. Nie możesz wdrożyć Aurory w instancjach, którymi zarządzasz. Jeśli istniejące funkcje i opcje dostępne w Aurorze nie są dla Ciebie wystarczające, nie masz innego wyjścia, jak wdrożyć coś na własną rękę. Tutaj wkracza Galera. Galera, w przeciwieństwie do Aurory, nie jest zastrzeżoną czarną skrzynką. Wręcz przeciwnie, jest to oprogramowanie typu open source, z którego można swobodnie korzystać we wszystkich obsługiwanych środowiskach. Możesz zainstalować Galera Cluster na AWS Elastic Computing Cloud (EC2) i dzięki temu zbudować wysoce dostępne środowisko, w którym przełączanie awaryjne jest niemal natychmiastowe:gdy tylko wykryjesz awarię węzła, możesz ponownie połączyć się z innym węzłem Galera. Jak wdrożyć Galerę 4 w EC2? W tym poście na blogu przyjrzymy się temu i przedstawimy Ci przewodnik krok po kroku pokazujący, jak najprostszy sposób to osiągnąć.
Wdrażanie klastra Galera 4 na EC2
Pierwszym krokiem jest stworzenie środowiska, którego użyjemy dla naszego klastra Galera. Pójdziemy z maszynami wirtualnymi Ubuntu 18.04 LTS.
Na potrzeby tego bloga wybierzemy rozmiar instancji t2.medium Poczta. Powinieneś skalować swoje instancje na podstawie oczekiwanego obciążenia.
Zamierzamy wdrożyć trzy węzły w klastrze. Dlaczego trzy? Prowadzimy blog, który wyjaśnia, w jaki sposób Galera utrzymuje wysoką dostępność.
Zamierzamy skonfigurować pamięć dla tych instancji.
Wybierzemy również odpowiednią grupę bezpieczeństwa dla węzłów. Ponownie, w naszym przypadku grupa bezpieczeństwa jest dość otwarta. Powinieneś upewnić się, że dostęp jest ograniczony tak bardzo, jak to możliwe - tylko węzły, które mają dostęp do baz danych, powinny mieć możliwość łączenia się z nimi.
Na koniec albo wybieramy istniejący klucz, albo tworzymy nowy. Po tym kroku zostaną uruchomione nasze trzy instancje.
Gdy będą gotowe, możemy połączyć się z nimi przez SSH i rozpocząć konfigurację bazy danych.
Zdecydowaliśmy się na konwencję nazewnictwa „węzeł1, węzeł2, węzeł3”, dlatego musieliśmy edytować /etc/hosts na wszystkich węzłach i umieścić je obok ich odpowiednich lokalnych adresów IP. Wprowadziliśmy również zmianę w /etc/hostname, aby używać nowej nazwy dla węzłów. Po wykonaniu tej czynności możemy rozpocząć konfigurowanie naszego klastra Galera. W chwili pisania tego tekstu jedynym dostawcą, który dostarcza wersję GA Galera 4, jest MariaDB z jej 10.4, dlatego zamierzamy używać MariaDB 10.4 dla naszego klastra. Zamierzamy kontynuować instalację, korzystając z sugestii i przewodników ze strony MariaDB.
Wdrażanie klastra MariaDB 10.4 Galera
Zaczniemy od przygotowania repozytoriów:
wget https://downloads.mariadb.com/MariaDB/mariadb_repo_setup
bash ./mariadb_repo_setup
Pobraliśmy skrypt przeznaczony do konfiguracji repozytoriów i uruchomiliśmy go, aby upewnić się, że wszystko jest poprawnie skonfigurowane. Skonfigurowano repozytoria tak, aby korzystały z najnowszej wersji MariaDB, która w chwili pisania tego tekstu to 10.4.
[email protected]:~# apt update
Hit:1 http://eu-central-1.ec2.archive.ubuntu.com/ubuntu bionic InRelease
Hit:2 http://eu-central-1.ec2.archive.ubuntu.com/ubuntu bionic-updates InRelease
Hit:3 http://eu-central-1.ec2.archive.ubuntu.com/ubuntu bionic-backports InRelease
Hit:4 http://downloads.mariadb.com/MariaDB/mariadb-10.4/repo/ubuntu bionic InRelease
Ign:5 http://downloads.mariadb.com/MaxScale/2.4/ubuntu bionic InRelease
Hit:6 http://downloads.mariadb.com/Tools/ubuntu bionic InRelease
Hit:7 http://downloads.mariadb.com/MaxScale/2.4/ubuntu bionic Release
Hit:8 http://security.ubuntu.com/ubuntu bionic-security InRelease
Reading package lists... Done
Building dependency tree
Reading state information... Done
4 packages can be upgraded. Run 'apt list --upgradable' to see them.
Jak widać, skonfigurowano repozytoria dla MariaDB 10.4 i MaxScale 2.4. Teraz możemy kontynuować i zainstalować MariaDB. Zrobimy to krok po kroku, węzeł po węźle. MariaDB zapewnia przewodnik, jak zainstalować i skonfigurować klaster.
Musimy zainstalować pakiety:
apt-get install mariadb-server mariadb-client galera-4 mariadb-backup
To polecenie instaluje wszystkie wymagane pakiety do uruchomienia MariaDB 10.4 Galera. MariaDB tworzy zestaw plików konfiguracyjnych. Dodamy nowy, który będzie zawierał wszystkie wymagane ustawienia. Domyślnie będzie on umieszczony na końcu pliku konfiguracyjnego, więc wszystkie poprzednie ustawienia dla ustawionych przez nas zmiennych zostaną nadpisane. Najlepiej byłoby później edytować istniejące pliki konfiguracyjne, aby usunąć ustawienia, które umieściliśmy w galera.cnf, aby uniknąć nieporozumień, w których skonfigurowano dane ustawienie.
[email protected]:~# cat /etc/mysql/conf.d/galera.cnf
[mysqld]
bind-address=10.0.0.103
default_storage_engine=InnoDB
binlog_format=row
innodb_autoinc_lock_mode=2
# Galera cluster configuration
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_cluster_address="gcomm://10.0.0.103,10.0.0.130,10.0.0.62"
wsrep_cluster_name="Galera4 cluster"
wsrep_sst_method=mariabackup
wsrep_sst_auth='sstuser:pa55'
# Cluster node configuration
wsrep_node_address="10.0.0.103"
wsrep_node_name="node1"
Gdy konfiguracja jest gotowa, możemy zacząć.
[email protected]:~# galera_new_cluster
Powinno to załadować nowy klaster w pierwszym węźle. Następnie powinniśmy wykonać podobne kroki na pozostałych węzłach:zainstalować wymagane pakiety i skonfigurować je pamiętając, że lokalny adres IP się zmienia, więc musimy odpowiednio zmienić plik galera.cnf.
Gdy pliki konfiguracyjne są gotowe, musimy utworzyć użytkownika, który będzie używany do transferu stanu migawki (SST):
MariaDB [(none)]> CREATE USER 'sstuser'@'localhost' IDENTIFIED BY 'pa55';
Query OK, 0 rows affected (0.022 sec)
MariaDB [(none)]> GRANT PROCESS, RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'sstuser'@'localhost';
Query OK, 0 rows affected (0.022 sec)
Powinniśmy to zrobić na pierwszym węźle. Pozostałe węzły dołączą do klastra i otrzymają pełną migawkę stanu, dzięki czemu użytkownik zostanie do nich przeniesiony. Teraz jedyne, co musimy zrobić, to uruchomić pozostałe węzły:
[email protected]:~# service mysql start
[email protected]:~# service mysql start
i sprawdź, czy klaster rzeczywiście został utworzony:
MariaDB [(none)]> show global status like 'wsrep_cluster_size';
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| wsrep_cluster_size | 3 |
+--------------------+-------+
1 row in set (0.001 sec)
Wszystko w porządku, klaster działa i składa się z trzech węzłów Galera. Udało nam się wdrożyć klaster MariaDB 10.4 Galera na Amazon EC2.