Opis konfiguracji #
Klaster składa się z trzech maszyn wirtualnych. Komunikują się między sobą wewnątrz sieci lokalnej. Adresy IP znajdują się w pliku /etc/hosts każdej z nich.
W tym przykładzie:
192.168.5.1 node1
192.168.5.2 node2
192.168.5.3 node3
Na nich znajdują się pakiety mysql-xtradb (obecnie nazywany galera). Wszystkie węzły są skonfigurowane, aby działać w trybie replikacji Master - Master. Tzn można zapisywać oraz odczytywać dane z dowolnego węzła.
Przykładowy plik konfiguracyjny #
Wszystkie węzły klastra synchronizują swój stan między sobą przy pomocy plików binlog używając tego samego protokołu co rsync.
Konfiguracja node1 (192.168.5.1)
/etc/mysql/conf.d/galera.cnf
[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
query_cache_size=0
query_cache_type=0
bind-address=0.0.0.0
#galera settings
wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_cluster_name="my_wsrep_cluster"
wsrep_cluster_address="gcomm://192.168.5.1,192.168.5.2,192.168.5.3"
wsrep_sst_method=rsync
Problem z synchronizacją #
Z powodu problemów sieciowych jeden z węzłów, nie mógł komunikować się z resztą. Nowe dane zapisywały się tylko na pozostałych węzłach. Po przywróceniu połączenia, jeden węzeł ma nie aktualne dane. Przez co wymaga synchronizacji danych z pozostałych.
# Przed problemami
# z połączeniem
+---------+ +---------+
| | | |
| node1 +------->| node2 |
| |<-------+ |
+-+-------+ +-------+-+
| ^ ^ |
| | | |
| | | |
| | +---------+ | |
| | | | | |
| +----+ node3 +---+ |
+------>| |<-----+
+---------+
# W trakcie problemów
# z połączeniem
+---------+ +---------+
| | | |
| node1 +------->| node2 |
| |<-------+ |
+---------+ +---------+
+---------+
| |
| node3 |
| |
+---------+
Synchronizacja węzła #
+---------+ +---------+
| | | |
| node2 +------->| node3 |
| | | |
+---------+ +---------+
Sprawdzanie stanu synchronizacji z klastrem #
- Logujemy się klientem mysql do węzła klastra
mysql -u root -p
- Sprawdzamy stan klastra oraz węzła
SHOW STATUS LIKE 'wsrep_cluster_size’;- wsrep_cluster_size - ilość podłączonych węzłów do klastra, dążymy do wartości
3
- wsrep_cluster_size - ilość podłączonych węzłów do klastra, dążymy do wartości
SHOW STATUS LIKE 'wsrep_local_state_comment';- wsrep_local_state_comment - stan obecnego węzła względem klastra, dążymy do wartości
Synced
- wsrep_local_state_comment - stan obecnego węzła względem klastra, dążymy do wartości
Synchronizacja #
wsrep_sst_donor) użyłem hosta wpisanego w plik /etc/hosts . Nie jestem pewien, czy podanie adresu IPv4 nie będzie mieć tego samego efektu.
wsrep_sst_donor="example1,example2"
wsrep_sst_donor="example1,example2,"
Przed synchronizacją należy wyłączyć synchronizowany węzeł oraz ustalić, który węzeł będzie brany jako wzór stanu do skopiowania.
- Zatrzymujemy niezsynchronizowany węzeł
service mysql stop
- Edytujemy plik konfiguracyjny
/etc/mysql/conf.d/galera.cnf- Dodajemy linię typu:
wsrep_sst_donor="node2"
- Dodajemy linię typu:
- Uruchamiamy niezsynchronizowany węzeł
service mysql start- Nie przejmujemy się, jeśli serwis powiadomi nas o nie uruchomieniu mysqla.
# service mysql start
[....] Starting MariaDB database server: mysqld . . . . . . . . . . . . . . . . [FAIL . . . . . . . . . . . failed!
- Sprawdzamy, czy istnieją procesy o nazwie
mysqlps aux | grep mysql
- Sprawdzamy, czy w syslogu odkładają się informacje o trwającej/zakończonej synchronizacji stanu
[...]
Sep 1 22:56:41 node3 rsyncd[23849]: connect from node2 (192.168.5.2)
Sep 1 22:56:41 node3 rsyncd[23849]: rsync to rsync_sst/./gstest3 from node2 (192.168.5.2)
Sep 1 22:56:41 node3 rsyncd[23849]: receiving file list
Sep 1 22:56:41 node3 rsyncd[23851]: connect from node2 (192.168.5.2)
Sep 1 22:56:42 node3 rsyncd[23849]: sent 92 bytes received 99292 bytes total size 99025
Sep 1 22:56:42 node3 rsyncd[23851]: rsync to rsync_sst/./bp5 from node2 (192.168.5.2)
Sep 1 22:56:42 node3 rsyncd[23851]: receiving file list
[...]
[...]
Sep 1 23:02:28 node3 mysqld: 220901 23:02:28 [Note] /usr/sbin/mysqld: ready for connections.
Sep 1 23:02:28 node3 mysqld: Version: '10.0.12-MariaDB-1-wsrep-log' socket: '/var/run/mysqld/mysqld.sock' port: 3306 mariadb.org binary distribution, wsrep_25.10.r4002
Sep 1 23:02:28 node3 mysqld: 220901 23:02:28 [Note] WSREP: 1.0 (node3): State transfer from 2.0 (node2) complete.
Sep 1 23:02:28 node3 mysqld: 220901 23:02:28 [Note] WSREP: Shifting JOINER -> JOINED (TO: 81470609)
Sep 1 23:02:28 node3 mysqld: 220901 23:02:28 [Note] WSREP: Member 1.0 (node3) synced with group.
Sep 1 23:02:28 node3 mysqld: 220901 23:02:28 [Note] WSREP: Shifting JOINED -> SYNCED (TO: 81470609)
Sep 1 23:02:29 node3 mysqld: 220901 23:02:29 [Note] WSREP: Synchronized with group, ready for connections
Sep 1 23:02:29 node3 mysqld: 220901 23:02:29 [Note] WSREP: wsrep_notify_cmd is not defined, skipping notification.
[...]
- Sprawdzamy, czy węzeł się zsynchronizował (patrz instrukcje wyżej)
- Zatrzymujemy zsynchronizowany węzeł
service mysql stop
- Usuwamy z pliku konfiguracyjnego
/etc/mysql/conf.d/galera.cnflinię zawierającąwsrep_sst_donor= - Uruchamiamy ponownie zsynchronizowany węzeł
service mysql start
- Sprawdzamy, czy węzeł się zsynchronizował (patrz instrukcje wyżej)