MariaDB
 sql >> Baza danych >  >> RDS >> MariaDB

MaxScale Podstawowe zarządzanie przy użyciu MaxCtrl dla klastra MariaDB

W poprzednim wpisie na blogu omówiliśmy kilka wprowadzeń do instalacji, uaktualniania i wdrażania MaxScale za pomocą klienta wiersza poleceń MaxCtrl. W tym poście na blogu omówimy aspekty zarządzania MaxScale dla naszego klastra MariaDB.

Istnieje wiele komponentów MaxScale, którymi możemy zarządzać za pomocą MaxCtrl, a mianowicie:

  1. Zarządzanie serwerem
  2. Zarządzanie usługami
  3. Zarządzanie monitorami
  4. Zarządzanie słuchaczami
  5. Zarządzanie filtrami
  6. Zarządzanie MaxScale
  7. Zarządzanie logowaniem

W tym poście na blogu omówimy pierwsze 4 komponenty, które są powszechnie używane w Klastrze MariaDB. Wszystkie polecenia w tym poście na blogu są oparte na MaxScale 2.4.11.

Zarządzanie serwerem

Wyświetl/pokaż serwery

Wymień podsumowanie wszystkich serwerów w MaxScale:

  maxctrl: list servers
┌────────────────┬────────────────┬──────┬─────────────┬─────────────────────────┬─────────────┐
│ Server         │ Address        │ Port │ Connections │ State                   │ GTID        │
├────────────────┼────────────────┼──────┼─────────────┼─────────────────────────┼─────────────┤
│ mariadbgalera1 │ 192.168.10.201 │ 3306 │ 0           │ Slave, Synced, Running  │ 100-100-203 │
├────────────────┼────────────────┼──────┼─────────────┼─────────────────────────┼─────────────┤
│ mariadbgalera2 │ 192.168.10.202 │ 3306 │ 0           │ Slave, Synced, Running  │ 100-100-203 │
├────────────────┼────────────────┼──────┼─────────────┼─────────────────────────┼─────────────┤
│ mariadbgalera3 │ 192.168.10.203 │ 3306 │ 0           │ Master, Synced, Running │ 100-100-203 │
└────────────────┴────────────────┴──────┴─────────────┴─────────────────────────┴─────────────┘

W przypadku klastra MariaDB lista serwerów podsumowuje stan węzła i klastra wraz z identyfikatorem GTID MariaDB tylko wtedy, gdy klaster jest ustawiony na replikację z innego klastra za pośrednictwem standardowej replikacji MariaDB. Stan jest używany przez MaxScale do kontrolowania zachowania algorytmu routingu:

  • Nadrzędny — w przypadku klastra jest uważany za nadrzędny zapis.
  • Slave - Jeśli wszystkie urządzenia podrzędne są wyłączone, ale master jest nadal dostępny, router użyje mastera.
  • Zsynchronizowane — węzeł klastra, który jest w stanie zsynchronizowanym z klastrem.
  • Działa — serwer, który jest uruchomiony. Wszystkie serwery, z którymi MariaDB MaxScale może się połączyć, są oznaczone jako uruchomione.

Chociaż Klaster MariaDB może obsługiwać replikację z wieloma wzorcami, MaxScale zawsze wybierze jeden węzeł do pełnienia roli Master, który będzie odbierać wszystkie zapisy dla routingu typu readwritesplit. Domyślnie Galera Monitor wybierze jako główny węzeł z najniższą wartością wsrep_local_index. Oznacza to, że dwie MaxScale działające na różnych serwerach wybiorą ten sam serwer jako główny.

Pokaż wszystkie serwery bardziej szczegółowo:

maxctrl: show servers

Utwórz serwery

Jest to zwykle pierwsza rzecz, którą musisz zrobić podczas konfigurowania MaxScale jako systemu równoważenia obciążenia. Często dodaje się wszystkie węzły klastra MariaDB do MaxScale i oznacza je nazwą obiektu. W tym przykładzie oznaczymy węzły Galera w formacie „mariadbgalera#”:

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

Stan serwera zostanie zgłoszony poprawnie dopiero po aktywacji modułu monitorowania, jak pokazano w sekcji Zarządzanie monitorami poniżej.

Usuń serwer

Aby usunąć serwer, należy wcześniej odłączyć serwer od wszelkich usług lub monitorów. Jako przykład, na poniższej liście serwerów, chcielibyśmy usunąć mariadbgalera3 z MaxScale:

  maxctrl: list servers
┌────────────────┬────────────────┬──────┬─────────────┬─────────────────────────┬─────────────┐
│ Server         │ Address        │ Port │ Connections │ State                   │ GTID        │
├────────────────┼────────────────┼──────┼─────────────┼─────────────────────────┼─────────────┤
│ mariadbgalera1 │ 192.168.10.201 │ 3306 │ 0           │ Slave, Synced, Running  │ 100-100-203 │
├────────────────┼────────────────┼──────┼─────────────┼─────────────────────────┼─────────────┤
│ mariadbgalera2 │ 192.168.10.202 │ 3306 │ 0           │ Slave, Synced, Running  │ 100-100-203 │
├────────────────┼────────────────┼──────┼─────────────┼─────────────────────────┼─────────────┤
│ mariadbgalera3 │ 192.168.10.203 │ 3306 │ 0           │ Master, Synced, Running │ 100-100-203 │
└────────────────┴────────────────┴──────┴─────────────┴─────────────────────────┴─────────────┘

Wypisz wszystkie monitory i sprawdź, czy serwer jest częścią dowolnego modułu monitora:

 

 maxctrl: list monitors
 ┌─────────────────┬─────────┬────────────────────────────────────────────────┐
 │ Monitor         │ State   │ Servers                                        │
 ├─────────────────┼─────────┼────────────────────────────────────────────────┤
 │ MariaDB-Monitor │ Running │ mariadbgalera1, mariadbgalera2, mariadbgalera3 │
 └─────────────────┴─────────┴────────────────────────────────────────────────┘

Wygląda na to, że mariadbgalera3 jest częścią MariaDB-Monitor, więc musimy ją najpierw usunąć za pomocą polecenia „odłącz monitor”:

 maxctrl: unlink monitor MariaDB-Monitor mariadbgalera3
 OK

Następnie wypisz wszystkie usługi, aby sprawdzić, czy odpowiedni serwer jest częścią jakichkolwiek usług MaxScale:

  maxctrl: list services
┌─────────────────────┬────────────────┬─────────────┬───────────────────┬────────────────────────────────────────────────┐
│ Service             │ Router         │ Connections │ Total Connections │ Servers                                        │
├─────────────────────┼────────────────┼─────────────┼───────────────────┼────────────────────────────────────────────────┤
│ Read-Write-Service  │ readwritesplit │ 1           │ 1                 │ mariadbgalera1, mariadbgalera2, mariadbgalera3 │
├─────────────────────┼────────────────┼─────────────┼───────────────────┼────────────────────────────────────────────────┤
│ Round-Robin-Service │ readconnroute  │ 1           │ 1                 │ mariadbgalera1, mariadbgalera2, mariadbgalera3 │
├─────────────────────┼────────────────┼─────────────┼───────────────────┼────────────────────────────────────────────────┤
│ Replication-Service │ binlogrouter   │ 1           │ 1                 │                                                │
└─────────────────────┴────────────────┴─────────────┴───────────────────┴────────────────────────────────────────────────┘

Jak widać, mariadbgalera3 jest częścią usługi Read-Write-Service i Round-Robin-Service. Usuń serwer z tych usług za pomocą polecenia „odłącz usługę”:

 maxctrl: unlink service Read-Write-Service mariadbgalera3
OK
 maxctrl: unlink service Round-Robin-Service mariadbgalera3
OK

Na koniec możemy usunąć serwer z MaxScale za pomocą polecenia „destroy server”:

 maxctrl: destroy server mariadbgalera3
OK

Zweryfikuj za pomocą „list serwerów”, które usunęliśmy mariadbgalera3 z MaxScale.:

  maxctrl: list servers
┌────────────────┬────────────────┬──────┬─────────────┬─────────────────────────┬──────┐
│ Server         │ Address        │ Port │ Connections │ State                   │ GTID │
├────────────────┼────────────────┼──────┼─────────────┼─────────────────────────┼──────┤
│ mariadbgalera1 │ 192.168.10.201 │ 3306 │ 0           │ Master, Synced, Running │      │
├────────────────┼────────────────┼──────┼─────────────┼─────────────────────────┼──────┤
│ mariadbgalera2 │ 192.168.10.202 │ 3306 │ 0           │ Slave, Synced, Running  │      │
└────────────────┴────────────────┴──────┴─────────────┴─────────────────────────┴──────┘

Zmień parametr serwera

Aby zmodyfikować parametr serwera, można użyć polecenia „zmień serwer”, które przyjmuje tylko jeden parametr klucz/wartość na raz. Na przykład:

  maxctrl: alter server mariadbgalera3 priority 10
 OK

Użyj polecenia „show server” i zajrzyj do sekcji Parametry, aby uzyskać listę parametrów, które można zmienić dla obiektu „serwer”:

maxctrl: show server mariadbgalera3
...

│ Parameters       │ {                                         │
│                  │     "address": "192.168.10.203",          │
│                  │     "protocol": "mariadbbackend",         │
│                  │     "port": 3306,                         │
│                  │     "extra_port": 0,                      │
│                  │     "authenticator": null,                │
│                  │     "monitoruser": null,                  │
│                  │     "monitorpw": null,                    │
│                  │     "persistpoolmax": 0,                  │
│                  │     "persistmaxtime": 0,                  │
│                  │     "proxy_protocol": false,              │
│                  │     "ssl": "false",                       │
│                  │     "ssl_cert": null,                     │
│                  │     "ssl_key": null,                      │
│                  │     "ssl_ca_cert": null,                  │
│                  │     "ssl_version": "MAX",                 │
│                  │     "ssl_cert_verify_depth": 9,           │
│                  │     "ssl_verify_peer_certificate": false, │
│                  │     "disk_space_threshold": null,         │
│                  │     "priority": "10"                      │
│                  │ }

Zwróć uwagę, że efekt polecenia alter jest natychmiastowy, a wartość parametru w środowisku wykonawczym zostanie zmodyfikowana, podobnie jak wartość w jego indywidualnym pliku konfiguracyjnym MaxScale w /var/lib/maxscale/maxscale.cnf.d/ w celu zachowania trwałości po ponownym uruchomieniu.

Ustaw stan serwera

MaxScale umożliwia tymczasowe wyłączenie serwerów zaplecza Galera z zestawu równoważenia obciążenia poprzez aktywację trybu konserwacji. Możemy to osiągnąć za pomocą polecenia „ustaw serwer”:

 maxctrl: set server mariadbgalera3 maintenance
OK

Patrząc na stan serwera, powinniśmy zobaczyć to:

 maxctrl: show server mariadbgalera3
...
│ State            │ Maintenance, Running
...

Gdy serwer jest w trybie konserwacji, żadne połączenia nie zostaną z nim utworzone, a istniejące połączenia zostaną zamknięte. Aby wyczyścić stan konserwacji z hosta, użyj polecenia „wyczyść serwer”:

 maxctrl: clear server mariadbgalera3 maintenance
OK

Zweryfikuj za pomocą „serwera pokazu”:

 maxctrl: show server mariadbgalera3
...
│ State            │ Slave, Synced, Running                    │
...

Zarządzanie monitorami

Utwórz monitor

Moduł monitora MaxScale dla Klastra MariaDB nazywa się galeramon. Zdefiniowanie odpowiedniego modułu monitorującego jest konieczne, aby MaxScale mógł określić najlepszy routing dla zapytań w zależności od stanu węzłów. Na przykład, jeśli węzeł Galera służy jako dawca dla węzła łączącego, czy powinien być częścią zdrowych węzłów? W niektórych przypadkach, gdy rozmiar bazy danych jest tak mały, oznaczenie węzła dawcy jako zdrowego (poprzez ustawienie parametru available_when_donor=true w MaxScale) nie jest złym planem i czasami poprawia wydajność routingu zapytań.

Aby utworzyć usługę (router), należy utworzyć użytkownika monitorującego na zapleczu serwerów MariaDB. Zwykle używa się tego samego użytkownika monitorującego, którego zdefiniowaliśmy dla modułu monitora. W przypadku Galera Cluster, jeśli użytkownik monitorujący nie istnieje, po prostu utwórz go na jednym z węzłów z następującymi uprawnieniami:

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';

Użyj polecenia „utwórz monitor” i określ nazwę z galeramonem jako modułem monitora:

  maxctrl: create monitor MariaDB-Monitor galeramon servers=mariadbgalera1,mariadbgalera2,mariadbgalera3 user=maxscale_monitor password=MaXSc4LeP4ss
OK

Zauważ, że nie skonfigurowaliśmy sekretu MaxScale, co oznacza, że ​​przechowujemy hasło użytkownika w formacie zwykłego tekstu. Aby włączyć szyfrowanie, zobacz przykład w tym poście na blogu, Wprowadzenie do administracji MaxScale Używanie maxctrl dla klastra MariaDB w sekcji Dodawanie monitorowania do MaxScale.

Wyświetl/pokaż monitory

Aby wyświetlić listę wszystkich monitorów:

 maxctrl: list monitors
┌─────────────────┬─────────┬────────────────────────────────────────────────┐
│ Monitor         │ State   │ Servers                                        │
├─────────────────┼─────────┼────────────────────────────────────────────────┤
│ MariaDB-Monitor │ Running │ mariadbgalera1, mariadbgalera2, mariadbgalera3 │
└─────────────────┴─────────┴────────────────────────────────────────────────┘

Aby uzyskać bardziej szczegółowy wygląd monitora, użyj polecenia „pokaż monitor”:

 maxctrl: show monitor MariaDB-Monitor

┌─────────────────────┬───────────────────────────────────────────┐
│ Monitor             │ MariaDB-Monitor                           │
├─────────────────────┼───────────────────────────────────────────┤
│ State               │ Running                                   │
├─────────────────────┼───────────────────────────────────────────┤
│ Servers             │ mariadbgalera1                            │
│                     │ mariadbgalera2                            │
│                     │ mariadbgalera3                            │
├─────────────────────┼───────────────────────────────────────────┤
│ Parameters          │ {                                         │
│                     │     "user": "maxscale_monitor",           │
│                     │     "password": "*****",                  │
│                     │     "passwd": null,                       │
│                     │     "monitor_interval": 2000,             │
│                     │     "backend_connect_timeout": 3,         │
│                     │     "backend_read_timeout": 1,            │
│                     │     "backend_write_timeout": 2,           │
│                     │     "backend_connect_attempts": 1,        │
│                     │     "journal_max_age": 28800,             │
│                     │     "disk_space_threshold": null,         │
│                     │     "disk_space_check_interval": 0,       │
│                     │     "script": null,                       │
│                     │     "script_timeout": 90,                 │
│                     │     "events": "all",                      │
│                     │     "disable_master_failback": false,     │
│                     │     "available_when_donor": true,         │
│                     │     "disable_master_role_setting": false, │
│                     │     "root_node_as_master": false,         │
│                     │     "use_priority": false,                │
│                     │     "set_donor_nodes": false              │
│                     │ }                                         │
├─────────────────────┼───────────────────────────────────────────┤
│ Monitor Diagnostics │ {                                         │
│                     │     "disable_master_failback": false,     │
│                     │     "disable_master_role_setting": false, │
│                     │     "root_node_as_master": false,         │
│                     │     "use_priority": false,                │
│                     │     "set_donor_nodes": false              │
│                     │ }                                         │
└─────────────────────┴───────────────────────────────────────────┘

Zatrzymaj/uruchom monitorowanie

Zatrzymanie monitora spowoduje wstrzymanie monitorowania serwerów. Jest to często używane w połączeniu z poleceniem „ustaw serwer”, aby ręcznie kontrolować stany serwera. Aby zatrzymać usługę monitorowania, użyj polecenia „stop monitor”:

 maxctrl: stop monitor MariaDB-Monitor
OK

Zweryfikuj stan za pomocą „pokaż monitor”:

 maxctrl: show monitors MariaDB-Monitor
┌─────────────────────┬───────────────────────────────────────────┐
│ Monitor             │ MariaDB-Monitor                           │
├─────────────────────┼───────────────────────────────────────────┤
│ State               │ Stopped                                   │
...

Aby uruchomić go ponownie, użyj "monitora startowego":

 maxctrl: start monitor MariaDB-Monitor
OK

Zmień parametr monitora

Aby zmienić parametr dla tego monitora, użyj polecenia „zmień monitor” i określ klucz/wartość parametru, jak poniżej:

 maxctrl: alter monitor MariaDB-Monitor available_when_donor true
OK

Użyj polecenia „show monitor” i zajrzyj do sekcji Parametry, gdzie znajduje się lista parametrów, które można zmienić dla modułu galeramon:

maxctrl: show server mariadbgalera3
...
│ Parameters          │ {                                         │
│                     │     "user": "maxscale_monitor",           │
│                     │     "password": "*****",                  │
│                     │     "monitor_interval": 2000,             │
│                     │     "backend_connect_timeout": 3,         │
│                     │     "backend_read_timeout": 1,            │
│                     │     "backend_write_timeout": 2,           │
│                     │     "backend_connect_attempts": 1,        │
│                     │     "journal_max_age": 28800,             │
│                     │     "disk_space_threshold": null,         │
│                     │     "disk_space_check_interval": 0,       │
│                     │     "script": null,                       │
│                     │     "script_timeout": 90,                 │
│                     │     "events": "all",                      │
│                     │     "disable_master_failback": false,     │
│                     │     "available_when_donor": true,         │
│                     │     "disable_master_role_setting": false, │
│                     │     "root_node_as_master": false,         │
│                     │     "use_priority": false,                │
│                     │     "set_donor_nodes": false              │
│                     │ }                                         │

Usuń monitor

Aby usunąć monitor, należy najpierw usunąć wszystkie serwery połączone z monitorem. Rozważmy na przykład następujący monitor w MaxScale:

 maxctrl: list monitors
┌─────────────────┬─────────┬────────────────────────────────────────────────┐
│ Monitor         │ State   │ Servers                                        │
├─────────────────┼─────────┼────────────────────────────────────────────────┤
│ MariaDB-Monitor │ Running │ mariadbgalera1, mariadbgalera2, mariadbgalera3 │
└─────────────────┴─────────┴────────────────────────────────────────────────┘

Usuń wszystkie serwery z tej konkretnej usługi:

 maxctrl: unlink monitor MariaDB-Monitor mariadbgalera1 mariadbgalera2 mariadbgalera3

OK

Nasz monitor wygląda teraz tak:

 maxctrl: list monitors
┌─────────────────┬─────────┬─────────┐
│ Monitor         │ State   │ Servers │
├─────────────────┼─────────┼─────────┤
│ MariaDB-Monitor │ Running │         │
└─────────────────┴─────────┴─────────┘

Tylko wtedy możemy usunąć monitor:

 maxctrl: destroy monitor MariaDB-Monitor
OK

Dodaj/usuń serwery do monitora

Po utworzeniu monitora możemy użyć polecenia „link monitor”, aby dodać serwery Galera do monitora. Użyj nazwy serwera utworzonej w sekcji Utwórz serwery:

 maxctrl: link monitor MariaDB-Monitor mariadbgalera1 mariadbgalera2 mariadbgalera3
OK

Podobnie, aby usunąć serwer z usługi, wystarczy użyć polecenia „odłącz monitor”:

 maxctrl: unlink monitor MariaDB-Monitor mariadbgalera3
OK

Zweryfikuj poleceniem „list monitors” lub „show monitors”.

Zarządzanie usługami

Utwórz usługę

Aby utworzyć usługę (router), należy utworzyć użytkownika monitorującego na zapleczu serwerów MariaDB. Zwykle używa się tego samego użytkownika monitorującego, którego zdefiniowaliśmy dla modułu monitora. W przypadku Galera Cluster, jeśli użytkownik monitorujący nie istnieje, po prostu utwórz go na jednym z węzłów z następującymi uprawnieniami:

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 hosta MaxScale.

Następnie określ nazwę usługi, typ routingu wraz z użytkownikiem monitorującym, aby MaxScale mógł połączyć się z serwerami zaplecza:

 maxctrl: create service Round-Robin-Service readconnroute user=maxscale_monitor password=******
OK

Możesz również określić dodatkowe parametry podczas tworzenia usługi. W tym przykładzie chcielibyśmy, aby węzeł „główny” był uwzględniony w zestawie równoważenia round-robin dla naszego klastra MariaDB Galera:

 maxctrl: create service Round-Robin-Service readconnroute user=maxscale_monitor password=****** router_options=master,slave
OK

Użyj polecenia „show service”, aby wyświetlić obsługiwane parametry. W przypadku routera round-robin lista jest następująca:

  maxctrl: show service Round-Robin-Service
...
│ Parameters          │ {                                          │
│                     │     "router_options": null,                │
│                     │     "user": "maxscale_monitor",            │
│                     │     "password": "*****",                   │
│                     │     "passwd": null,                        │
│                     │     "enable_root_user": false,             │
│                     │     "max_retry_interval": 3600,            │
│                     │     "max_connections": 0,                  │
│                     │     "connection_timeout": 0,               │
│                     │     "auth_all_servers": false,             │
│                     │     "strip_db_esc": true,                  │
│                     │     "localhost_match_wildcard_host": true, │
│                     │     "version_string": null,                │
│                     │     "weightby": null,                      │
│                     │     "log_auth_warnings": true,             │
│                     │     "retry_on_failure": true,              │
│                     │     "session_track_trx_state": false,      │
│                     │     "retain_last_statements": -1,          │
│                     │     "session_trace": 0

For the read-write split router, the supported parameters are:

  maxctrl: show service Read-Write-Service
...
│ Parameters          │ {                                                           │
│                     │     "router_options": null,                                 │
│                     │     "user": "maxscale_monitor",                             │
│                     │     "password": "*****",                                    │
│                     │     "passwd": null,                                         │
│                     │     "enable_root_user": false,                              │
│                     │     "max_retry_interval": 3600,                             │
│                     │     "max_connections": 0,                                   │
│                     │     "connection_timeout": 0,                                │
│                     │     "auth_all_servers": false,                              │
│                     │     "strip_db_esc": true,                                   │
│                     │     "localhost_match_wildcard_host": true,                  │
│                     │     "version_string": null,                                 │
│                     │     "weightby": null,                                       │
│                     │     "log_auth_warnings": true,                              │
│                     │     "retry_on_failure": true,                               │
│                     │     "session_track_trx_state": false,                       │
│                     │     "retain_last_statements": -1,                           │
│                     │     "session_trace": 0,                                     │
│                     │     "use_sql_variables_in": "all",                          │
│                     │     "slave_selection_criteria": "LEAST_CURRENT_OPERATIONS", │
│                     │     "master_failure_mode": "fail_instantly",                │
│                     │     "max_slave_replication_lag": -1,                        │
│                     │     "max_slave_connections": "255",                         │
│                     │     "retry_failed_reads": true,                             │
│                     │     "prune_sescmd_history": false,                          │
│                     │     "disable_sescmd_history": false,                        │
│                     │     "max_sescmd_history": 50,                               │
│                     │     "strict_multi_stmt": false,                             │
│                     │     "strict_sp_calls": false,                               │
│                     │     "master_accept_reads": false,                           │
│                     │     "connection_keepalive": 300,                            │
│                     │     "causal_reads": false,                                  │
│                     │     "causal_reads_timeout": "10",                           │
│                     │     "master_reconnection": false,                           │
│                     │     "delayed_retry": false,                                 │
│                     │     "delayed_retry_timeout": 10,                            │
│                     │     "transaction_replay": false,                            │
│                     │     "transaction_replay_max_size": "1Mi",                   │
│                     │     "optimistic_trx": false                                 │
│                     │ }

List/Show Services
 

To list out all created services (routers), use the "list services" command:

 maxctrl: list services
┌─────────────────────┬────────────────┬─────────────┬───────────────────┬────────────────────────────────────────────────┐
│ Service             │ Router         │ Connections │ Total Connections │ Servers                                        │
├─────────────────────┼────────────────┼─────────────┼───────────────────┼────────────────────────────────────────────────┤
│ Read-Write-Service  │ readwritesplit │ 1           │ 1                 │ mariadbgalera1, mariadbgalera2, mariadbgalera3 │
├─────────────────────┼────────────────┼─────────────┼───────────────────┼────────────────────────────────────────────────┤
│ Round-Robin-Service │ readconnroute  │ 1           │ 1                 │ mariadbgalera1, mariadbgalera2, mariadbgalera3 │
├─────────────────────┼────────────────┼─────────────┼───────────────────┼────────────────────────────────────────────────┤
│ Binlog-Repl-Service │ binlogrouter   │ 1           │ 1                 │                                                │
└─────────────────────┴────────────────┴─────────────┴───────────────────┴────────────────────────────────────────────────┘

In the above examples, we have created 3 services, with 3 different routers. However, the Binlog-Repl-Service for our binlog server is not linked with any servers yet.

To show all services in details:

 maxctrl: show services

Or if you want to show a particular service:

 maxctrl: show service Round-Robin-Service

Stop/Start Services

Stopping a service will prevent all the listeners for that service from accepting new connections. Existing connections will still be handled normally until they are closed. To stop and start all services, use the "stop services":

 maxctrl: stop services
 maxctrl: show services
 maxctrl: start services
 maxctrl: show services

Or we can use the "stop service" to stop only one particular service:

 maxctrl: stop services Round-Robin-Service

Delete a Service

In order to delete a service, one has to remove all servers and destroy the listeners associated with the service first. For example, consider the following services in MaxScale:

 maxctrl: list services
┌─────────────────────┬────────────────┬─────────────┬───────────────────┬────────────────────────────────────────────────┐
│ Service             │ Router         │ Connections │ Total Connections │ Servers                                        │
├─────────────────────┼────────────────┼─────────────┼───────────────────┼────────────────────────────────────────────────┤
│ Read-Write-Service  │ readwritesplit │ 1           │ 1                 │ mariadbgalera1, mariadbgalera2, mariadbgalera3 │
├─────────────────────┼────────────────┼─────────────┼───────────────────┼────────────────────────────────────────────────┤
│ Round-Robin-Service │ readconnroute  │ 1           │ 1                 │ mariadbgalera1, mariadbgalera2, mariadbgalera3 │
├─────────────────────┼────────────────┼─────────────┼───────────────────┼────────────────────────────────────────────────┤
│ Replication-Service │ binlogrouter   │ 1           │ 1                 │                                                │
└─────────────────────┴────────────────┴─────────────┴───────────────────┴────────────────────────────────────────────────┘

Let's remove Round-Robin-Service from the setup. Remove all servers from this particular service:

 maxctrl: unlink service Round-Robin-Service mariadbgalera1 mariadbgalera2 mariadbgalera3
OK

Our services are now looking like this:

 maxctrl: list services
┌─────────────────────┬────────────────┬─────────────┬───────────────────┬────────────────────────────────────────────────┐
│ Service             │ Router         │ Connections │ Total Connections │ Servers                                        │
├─────────────────────┼────────────────┼─────────────┼───────────────────┼────────────────────────────────────────────────┤
│ Read-Write-Service  │ readwritesplit │ 1           │ 1                 │ mariadbgalera1, mariadbgalera2, mariadbgalera3 │
├─────────────────────┼────────────────┼─────────────┼───────────────────┼────────────────────────────────────────────────┤
│ Round-Robin-Service │ readconnroute  │ 1           │ 1                 │                                                │
├─────────────────────┼────────────────┼─────────────┼───────────────────┼────────────────────────────────────────────────┤
│ Replication-Service │ binlogrouter   │ 1           │ 1                 │                                                │
└─────────────────────┴────────────────┴─────────────┴───────────────────┴────────────────────────────────────────────────┘

If the service is tied with a listener, we have to remove it as well. Use "list listeners" and specify the service name to look for it:

 maxctrl: list listeners Round-Robin-Service
┌──────────────────────┬──────┬─────────┬─────────┐
│ Name                 │ Port │ Host    │ State   │
├──────────────────────┼──────┼─────────┼─────────┤
│ Round-Robin-Listener │ 3307 │ 0.0.0.0 │ Running │
└──────────────────────┴──────┴─────────┴─────────┘

And then remove the listener:

 maxctrl: destroy listener Round-Robin-Service Round-Robin-Listener
OK

Finally, we can remove the service:

 maxctrl: destroy service Round-Robin-Service
OK

Modify Service's Parameter

Similar to the other object, one can modify a service parameter by using the "alter service" command:

 maxctrl: alter service Read-Write-Service master_accept_reads true
OK

Some routers support runtime configuration changes to all parameters. Currently all readconnroute, readwritesplit and schemarouter parameters can be changed at runtime. In addition to module specific parameters, the following list of common service parameters can be altered at runtime:

  • user
  • passwd
  • enable_root_user
  • max_connections
  • connection_timeout
  • auth_all_servers
  • optimize_wildcard
  • strip_db_esc
  • localhost_match_wildcard_host
  • max_slave_connections
  • max_slave_replication_lag
  • retain_last_statements

Note that alter command effect is immediate and the parameter's value in the runtime will be modified as well as the value in its individual MaxScale configuration file inside /var/lib/maxscale/maxscale.cnf.d/ for persistence across restart.

Add/Remove Servers into Service

After creating a service, we can use the link command to add our servers into the service. Use the server's name as created under Create Servers section:

 maxctrl: link service Round-Robin-Service mariadbgalera1 mariadbgalera2 mariadbgalera3
OK

Similarly, to remove a server from the service, just use "unlink service" command:

 maxctrl: unlink service Round-Robin-Service mariadbgalera3
OK

We can only remove one server from a service at a time, so repeat it for other nodes to delete them. Verify with "list services" or "show services" command.

Listener Management

List Listeners

To list all listeners, we need to know the service name in advanced:

maxctrl: list services
┌──────────────────────┬────────────────┬─────────────┬───────────────────┬────────────────────────────────────────────────┐
│ Service              │ Router         │ Connections │ Total Connections │ Servers                                        │
├──────────────────────┼────────────────┼─────────────┼───────────────────┼────────────────────────────────────────────────┤
│ Read-Write-Service   │ readwritesplit │ 0           │ 0                 │ mariadbgalera1, mariadbgalera2, mariadbgalera3 │
├──────────────────────┼────────────────┼─────────────┼───────────────────┼────────────────────────────────────────────────┤
│ Round-Robin-Service  │ readconnroute  │ 0           │ 0                 │ mariadbgalera1, mariadbgalera2, mariadbgalera3 │
├──────────────────────┼────────────────┼─────────────┼───────────────────┼────────────────────────────────────────────────┤

In the above example, we have two services, Read-Write-Service and Round-Robin-Service. Then, we can list out the listener for that particular service. For Read-Write-Service:

 maxctrl: list listeners Read-Write-Service
┌─────────────────────┬──────┬─────────┬─────────┐
│ Name                │ Port │ Host    │ State   │
├─────────────────────┼──────┼─────────┼─────────┤
│ Read-Write-Listener │ 3306 │ 0.0.0.0 │ Running │
└─────────────────────┴──────┴─────────┴─────────┘

And for Round-Robin-Service:

 maxctrl: list listeners Round-Robin-Service
┌──────────────────────┬──────┬─────────┬─────────┐
│ Name                 │ Port │ Host    │ State   │
├──────────────────────┼──────┼─────────┼─────────┤
│ Round-Robin-Listener │ 3307 │ 0.0.0.0 │ Running │
└──────────────────────┴──────┴─────────┴─────────┘

Unlike other objects in MaxScale, the listener does not have a "show" and "alter" commands since it is a fairly simple object.

Create a Listener

Make sure a service has been created. In this example, taken from the Create Service section above, we will create a listener so MaxScale will listen on port 3307 to process the MariaDB connections in a round-robin fashion:

 maxctrl: create listener Round-Robin-Service Round-Robin-Listener 3307
OK

Delete a Listener

To delete a listener, use the "destroy listener" command with the respective service name and listener name:

 maxctrl: destroy listener Round-Robin-Service Round-Robin-Listener
OK

This concludes this episode of basic MaxScale management tasks for MariaDB Cluster. In the next series, we are going to cover the MaxScale advanced management tasks like service filters, MaxScale user management and so on.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Automatyzacja baz danych za nową szwedzką tożsamością elektroniczną Freja eID

  2. Przypadki użycia MariaDB i Docker, część 1

  3. Jak działa funkcja INSERT() w MariaDB

  4. 5 funkcji do wyodrębnienia numeru tygodnia z daty w MariaDB

  5. Jak działa RTRIM_ORACLE() w MariaDB