MariaDB
 sql >> Datenbank >  >> RDS >> MariaDB

MaxScale Basic Management mit MaxCtrl für MariaDB-Cluster

Im vorherigen Blogbeitrag haben wir einige Einführungen in die Installation, Aktualisierung und Bereitstellung von MaxScale mit dem MaxCtrl-Befehlszeilenclient behandelt. In diesem Blogbeitrag werden wir die Managementaspekte von MaxScale für unseren MariaDB-Cluster behandeln.

Es gibt eine Reihe von MaxScale-Komponenten, die wir mit MaxCtrl verwalten können, nämlich:

  1. Serververwaltung
  2. Dienstverwaltung
  3. Verwaltung überwachen
  4. Zuhörerverwaltung
  5. Filterverwaltung
  6. MaxScale-Verwaltung
  7. Protokollverwaltung

In diesem Blogbeitrag werden wir die ersten 4 Komponenten behandeln, die üblicherweise in MariaDB Cluster verwendet werden. Alle Befehle in diesem Blogbeitrag basieren auf MaxScale 2.4.11.

Serververwaltung

Server auflisten/anzeigen

Listen Sie eine Zusammenfassung aller Server in MaxScale auf:

  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 │
└────────────────┴────────────────┴──────┴─────────────┴─────────────────────────┴─────────────┘

Für MariaDB-Cluster fasst die Serverliste den Knoten- und Clusterstatus mit seiner MariaDB-GTID nur dann zusammen, wenn der Cluster so eingestellt ist, dass er von einem anderen Cluster über die Standard-MariaDB-Replikation repliziert. Der Status wird von MaxScale verwendet, um das Verhalten des Routing-Algorithmus zu steuern:

  • Master - Für einen Cluster wird dies als Write-Master betrachtet.
  • Slave - Wenn alle Slaves ausgefallen sind, aber der Master noch verfügbar ist, verwendet der Router den Master.
  • Synced – Ein Cluster-Knoten, der sich in einem mit dem Cluster synchronisierten Zustand befindet.
  • Running - Ein Server, der in Betrieb ist und läuft. Alle Server, mit denen sich MariaDB MaxScale verbinden kann, werden als ausgeführt gekennzeichnet.

Obwohl MariaDB Cluster in der Lage ist, die Multi-Master-Replikation zu handhaben, wählt MaxScale immer einen Knoten aus, der die Master-Rolle innehat, der alle Schreibvorgänge für das readwritesplit-Routing erhält. Standardmäßig wählt Galera Monitor den Knoten mit dem niedrigsten wsrep_local_index-Wert als Master. Dies bedeutet, dass zwei MaxScale, die auf unterschiedlichen Servern laufen, denselben Server als Master auswählen.

Alle Server detaillierter anzeigen:

maxctrl: show servers

Server erstellen

Dies ist normalerweise das erste, was Sie tun müssen, wenn Sie MaxScale als Load Balancer einrichten. Es ist üblich, alle MariaDB-Cluster-Knoten zu MaxScale hinzuzufügen und sie mit einem Objektnamen zu kennzeichnen. In diesem Beispiel bezeichnen wir die Galera-Knoten im Format „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

Der Serverstatus wird erst korrekt gemeldet, nachdem wir das Überwachungsmodul aktiviert haben, wie im Abschnitt "Monitorverwaltung" weiter unten gezeigt.

Lösche einen Server

Um einen Server zu löschen, muss man den Server vorher von allen Diensten oder Monitoren trennen. Als Beispiel möchten wir in der folgenden Serverliste mariadbgalera3 aus MaxScale löschen:

  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 │
└────────────────┴────────────────┴──────┴─────────────┴─────────────────────────┴─────────────┘

Listen Sie alle Monitore auf und prüfen Sie, ob der Server Teil eines Monitormoduls ist:

 

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

Sieht so aus, als ob mariadbgalera3 Teil von MariaDB-Monitor ist, also müssen wir es zuerst entfernen, indem wir den Befehl „unlink monitor“ verwenden:

 maxctrl: unlink monitor MariaDB-Monitor mariadbgalera3
 OK

Listen Sie als Nächstes alle Dienste auf, um zu prüfen, ob der entsprechende Server Teil eines MaxScale-Dienstes ist:

  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                 │                                                │
└─────────────────────┴────────────────┴─────────────┴───────────────────┴────────────────────────────────────────────────┘

Wie Sie sehen können, ist mariadbgalera3 Teil des Read-Write-Service und des Round-Robin-Service. Entfernen Sie den Server von diesen Diensten, indem Sie den Befehl „unlink service“ verwenden:

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

Schließlich können wir den Server von MaxScale entfernen, indem wir den Befehl "destroy server" verwenden:

 maxctrl: destroy server mariadbgalera3
OK

Überprüfen Sie anhand der "Serverliste", dass wir mariadbgalera3 von MaxScale entfernt haben.:

  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  │      │
└────────────────┴────────────────┴──────┴─────────────┴─────────────────────────┴──────┘

Serverparameter ändern

Um die Parameter eines Servers zu ändern, kann man den Befehl „alter server“ verwenden, der jeweils nur einen Schlüssel/Wert-Parameter akzeptiert. Zum Beispiel:

  maxctrl: alter server mariadbgalera3 priority 10
 OK

Verwenden Sie den Befehl "show server" und sehen Sie im Abschnitt "Parameter" nach, um eine Liste von Parametern zu erhalten, die für das Objekt "server" geändert werden können:

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"                      │
│                  │ }

Beachten Sie, dass die Auswirkung des Befehls „alter“ sofort eintritt und der Wert des Parameters in der Laufzeit sowie der Wert in seiner individuellen MaxScale-Konfigurationsdatei in /var/lib/maxscale/maxscale.cnf.d/ für die Persistenz über den Neustart hinweg geändert werden.

Serverstatus festlegen

MaxScale ermöglicht es, die Galera-Backend-Server temporär vom Load-Balancing-Set auszuschließen, indem der Wartungsmodus aktiviert wird. Wir können dies erreichen, indem wir den Befehl "set server" verwenden:

 maxctrl: set server mariadbgalera3 maintenance
OK

Wenn wir uns den Status des Servers ansehen, sollten wir Folgendes sehen:

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

Wenn sich ein Server im Wartungsmodus befindet, werden keine Verbindungen zu ihm hergestellt und bestehende Verbindungen werden geschlossen. Um den Wartungsstatus vom Host zu löschen, verwenden Sie den Befehl „clear server“:

 maxctrl: clear server mariadbgalera3 maintenance
OK

Mit "show server" bestätigen:

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

Monitorverwaltung

Monitor erstellen

Das MaxScale-Monitormodul für MariaDB-Cluster heißt galeramon. Die Definition eines korrekten Überwachungsmoduls ist notwendig, damit MaxScale das beste Routing für Abfragen in Abhängigkeit vom Zustand der Knoten bestimmen kann. Wenn beispielsweise ein Galera-Knoten als Spender für einen Joiner-Knoten dient, sollte er Teil der gesunden Knoten sein? In einigen Fällen, z. B. wenn die Datenbankgröße so klein ist, ist das Markieren eines Spenderknotens als fehlerfrei (durch Festlegen des Parameters available_when_donor=true in MaxScale) kein schlechter Plan und verbessert manchmal die Leistung des Abfrageroutings.

Um einen Dienst (Router) zu erstellen, muss man einen Überwachungsbenutzer im Backend von MariaDB-Servern erstellen. Üblicherweise würde man denselben Überwachungsbenutzer verwenden, den wir für das Überwachungsmodul definiert haben. Wenn der überwachende Benutzer für Galera Cluster nicht existiert, erstellen Sie ihn einfach auf einem der Knoten mit den folgenden Berechtigungen:

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

Verwenden Sie den "create monitor"-Befehl und geben Sie einen Namen mit galeramon als Monitor-Modul an:

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

Beachten Sie, dass wir das MaxScale-Geheimnis nicht konfiguriert haben, was bedeutet, dass wir das Benutzerkennwort im Klartextformat speichern. Um die Verschlüsselung zu aktivieren, sehen Sie sich das Beispiel in diesem Blogbeitrag Einführung in die MaxScale-Verwaltung mit maxctrl für MariaDB-Cluster im Abschnitt Hinzufügen von Überwachung zu MaxScale an.

Monitore auflisten/anzeigen

So listen Sie alle Monitore auf:

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

Um einen detaillierteren Blick auf den Monitor zu bekommen, verwenden Sie den Befehl "show 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              │
│                     │ }                                         │
└─────────────────────┴───────────────────────────────────────────┘

Monitor stoppen/starten

Durch das Stoppen eines Monitors wird die Überwachung der Server angehalten. Dies wird häufig in Verbindung mit dem Befehl "set server" verwendet, um Serverzustände manuell zu steuern. Verwenden Sie zum Stoppen des Überwachungsdienstes den Befehl „Stop Monitor“:

 maxctrl: stop monitor MariaDB-Monitor
OK

Überprüfen Sie den Status mit "show monitor":

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

Um ihn wieder zu starten, verwenden Sie den "Monitor starten":

 maxctrl: start monitor MariaDB-Monitor
OK

Parameter des Monitors ändern

Um einen Parameter für diesen Monitor zu ändern, verwenden Sie den Befehl „alter monitor“ und geben Sie den Schlüssel/Wert des Parameters wie folgt an:

 maxctrl: alter monitor MariaDB-Monitor available_when_donor true
OK

Verwenden Sie den Befehl "show monitor" und sehen Sie im Abschnitt Parameter nach einer Liste von Parametern, die für das Galeramon-Modul geändert werden können:

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              │
│                     │ }                                         │

Einen Monitor löschen

Um einen Monitor zu löschen, müssen zunächst alle mit dem Monitor verknüpften Server entfernt werden. Betrachten Sie beispielsweise den folgenden Monitor in MaxScale:

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

Alle Server von diesem bestimmten Dienst entfernen:

 maxctrl: unlink monitor MariaDB-Monitor mariadbgalera1 mariadbgalera2 mariadbgalera3

OK

Unser Monitor sieht jetzt so aus:

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

Erst dann können wir den Monitor löschen:

 maxctrl: destroy monitor MariaDB-Monitor
OK

Server zu Monitor hinzufügen/entfernen

Nachdem wir einen Monitor erstellt haben, können wir den Befehl „link monitor“ verwenden, um die Galera-Server zum Monitor hinzuzufügen. Verwenden Sie den Namen des Servers, wie er im Abschnitt Server erstellen erstellt wurde:

 maxctrl: link monitor MariaDB-Monitor mariadbgalera1 mariadbgalera2 mariadbgalera3
OK

Um einen Server aus dem Dienst zu entfernen, verwenden Sie einfach den Befehl "unlink monitor":

 maxctrl: unlink monitor MariaDB-Monitor mariadbgalera3
OK

Überprüfen Sie dies mit dem Befehl „Liste Monitore“ oder „Show Monitors“.

Dienstverwaltung

Dienst erstellen

Um einen Dienst (Router) zu erstellen, muss man einen Überwachungsbenutzer im Backend von MariaDB-Servern erstellen. Üblicherweise würde man denselben Überwachungsbenutzer verwenden, den wir für das Überwachungsmodul definiert haben. Wenn der überwachende Benutzer für Galera Cluster nicht existiert, erstellen Sie ihn einfach auf einem der Knoten mit den folgenden Berechtigungen:

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

Wobei 192.168.0.220 die IP-Adresse des MaxScale-Hosts ist.

Geben Sie dann den Namen des Dienstes, den Routing-Typ zusammen mit einem überwachenden Benutzer für MaxScale an, um sich mit den Backend-Servern zu verbinden:

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

Außerdem können Sie beim Erstellen des Dienstes zusätzliche Parameter angeben. In diesem Beispiel möchten wir, dass der „Master“-Knoten in das Round-Robin-Balancing-Set für unseren MariaDB Galera-Cluster aufgenommen wird:

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

Verwenden Sie den Befehl "show service", um die unterstützten Parameter anzuzeigen. Für Round-Robin-Router sieht die Liste wie folgt aus:

  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.