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:
- Zarządzanie serwerem
- Zarządzanie usługami
- Zarządzanie monitorami
- Zarządzanie słuchaczami
- Zarządzanie filtrami
- Zarządzanie MaxScale
- 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.