MariaDB
 sql >> Database >  >> RDS >> MariaDB

Gestione di base di MaxScale tramite MaxCtrl per MariaDB Cluster - Parte seconda

Nel precedente post del blog, abbiamo trattato 4 componenti di gestione di base utilizzando il client della riga di comando MaxCtrl. In questo post del blog, tratteremo la parte rimanente dei componenti MaxScale che sono comunemente usati in un cluster MariaDB:

  • Gestione filtri
  • Gestione MaxScale
  • Gestione della registrazione

Tutti i comandi in questo post del blog sono basati su MaxScale 2.5.3.

Gestione filtri

Il filtro è un modulo in MaxScale che funge da motore di elaborazione e routing per un servizio MaxScale. Il filtraggio avviene tra la connessione client a MaxScale e la connessione MaxScale ai server di database back-end. Questo percorso (dal lato client di MaxScale verso i server di database effettivi) può essere considerato una pipeline, quindi è possibile inserire filtri in tale pipeline per monitorare, modificare, copiare o bloccare il contenuto che scorre attraverso di essa.

Esistono molti filtri che possono essere applicati per estendere le capacità di elaborazione di un servizio MaxScale, come mostrato nella tabella seguente:

Nome filtro

Descrizione

Binlog

Replica selettivamente gli eventi di log binari su server slave combinati insieme a un servizio binlogrouter.

Cache

Una cache semplice in grado di memorizzare nella cache il risultato di SELECT, in modo che i successivi SELECT identici siano serviti direttamente da MaxScale, senza che le query vengano instradate a nessuno server.

Lettura critica coerente

Consente di eseguire letture critiche coerenti tramite MaxScale pur consentendo la scalabilità orizzontale di letture non critiche.

Firewall database

Blocca le query che corrispondono a un insieme di regole. Questo filtro deve essere considerato una soluzione ottimale per la protezione da usi impropri accidentali piuttosto che da attacchi dannosi.

Suggerimento

Aggiunge suggerimenti di instradamento a un servizio, indicando al router di instradare una query a un determinato tipo di server.

Inserisci flusso

Converte gli inserimenti di massa in flussi di dati CSV che vengono consumati dal server back-end tramite il meccanismo LOAD DATA LOCAL INFILE

Lua

Richiama un insieme di funzioni in uno script Lua.

Mascheramento

Offusca il valore restituito di una particolare colonna

Maxrows

Limitazione del numero di righe che un SELECT, un'istruzione preparata o una procedura memorizzata potrebbero restituire all'applicazione client.

Server denominato

Indirizza le query ai server in base a corrispondenze di espressioni regolari (regex).

Interroga registro tutto

Registra il contenuto della query in un file in formato CSV.

Regex

Riscrive il contenuto della query utilizzando le corrispondenze di espressioni regolari e la sostituzione del testo.

Tee

Fai copie delle richieste dal client e invia le copie a un altro servizio all'interno di MariaDB MaxScale.

acceleratore

Sostituisce ed estende la funzionalità limit_queries del filtro Database Firewall

Inizio

Controlla le prestazioni della query dell'istruzione SQL selezionata che passa attraverso il filtro.

Monitoraggio delle prestazioni delle transazioni

Controlla ogni istruzione SQL che passa attraverso il filtro, raggruppata per transazione, per l'analisi delle prestazioni della transazione.

Ogni filtro ha le sue modalità di configurazione. I filtri sono comunemente associati a un servizio MaxScale. Ad esempio, un filtro binlog può essere applicato al servizio binlogrouter, per replicare solo un sottoinsieme di dati su un server slave che può ridurre enormemente lo spazio su disco per tabelle enormi. Consulta la documentazione dei filtri MaxScale per il modo corretto di configurare i parametri per il filtro corrispondente.

Crea un filtro

Ogni filtro MaxScale ha il suo modo di essere configurato. In questo esempio, creeremo un filtro di mascheramento, per mascherare i nostri dati sensibili per la colonna "card_no" nella nostra tabella "credit_cards". Il mascheramento richiede un file di regole, scritto in formato JSON. Innanzitutto, crea una directory per ospitare i nostri file di regole:

$ mkdir /var/lib/maxscale/rules

Quindi, crea un file di testo:

$ vi /var/lib/maxscale/rules/masking.json

Specificare le righe come di seguito:

{
    "rules": [
        {
            "obfuscate": {
                "column": "card_no"
            }
        }
    ]
}

Le semplici regole di cui sopra offuscheranno semplicemente l'output della colonna card_no per qualsiasi tabella, per proteggere i dati sensibili che devono essere visti dal client MariaDB.

Dopo aver creato il file delle regole, possiamo creare il filtro, utilizzando il seguente comando:

maxctrl: create filter Obfuscates-card masking rules=/var/lib/maxscale/rules/masking.json
OK

Si noti che alcuni filtri richiedono parametri diversi. Per quanto riguarda questo filtro di mascheratura, il parametro di base è "regole", dove dobbiamo specificare il file di regole di mascheratura creato in formato JSON.

Collega un filtro a un servizio

Un filtro può essere attivato solo allegandolo a un servizio. La modifica di un servizio esistente utilizzando MaxCtrl è supportata solo da alcuni parametri e l'aggiunta di un filtro non è uno di questi. Dobbiamo aggiungere il componente del filtro nel file di configurazione del servizio di MaxScale per allegare sostanzialmente il filtro. In questo esempio, applicheremo il filtro "Obfuscates-card" al nostro servizio round-robin esistente chiamato rr-service.

Vai alla directory /var/lib/maxscale/maxscale.cnf.d e trova rr-service.cnf, aprilo con un editor di testo e quindi aggiungi la seguente riga:

filters=Obfuscates-card

Per caricare la nuova modifica è necessario un riavvio di MaxScale:

$ systemctl restart maxscale

Per testare il filtro, utilizzeremo un client MariaDB e confronteremo l'output connettendoci a due diversi servizi. Il nostro servizio rw è collegato a un listener in ascolto sulla porta 3306, senza alcun filtro configurato. Quindi, dovremmo vedere la risposta non filtrata da MaxScale:

$ mysql -ucard_user -p -hmaxscale_host -p3306 -e "SELECT * FROM secure.credit_cards LIMIT 1"
+----+-----------+-----------------+-------------+-----------+---------+
| id | card_type | card_no         | card_expiry | card_name | user_id |
+----+-----------+-----------------+-------------+-----------+---------+
|  1 | VISA      | 425388910909238 | NULL        | BOB SAGAT |       1 |
+----+-----------+-----------------+-------------+-----------+---------+

Quando ci si connette al listener rr-service sulla porta 3307, che è stata configurata con il nostro filtro, il nostro valore "card_no" viene offuscato da un output senza senso:

$ mysql -ucard_user -p -hmaxscale_host -p3307 -e "SELECT * FROM secure.credit_cards LIMIT 1"
+----+-----------+-----------------+-------------+-----------+---------+
| id | card_type | card_no         | card_expiry | card_name | user_id |
+----+-----------+-----------------+-------------+-----------+---------+
|  1 | VISA      | ~W~p[=&^M~5f~~M | NULL        | BOB SAGAT |       1 |
+----+-----------+-----------------+-------------+-----------+---------+

Questo filtro viene eseguito da MaxScale, seguendo le regole di corrispondenza all'interno di masking.json che abbiamo creato in precedenza.

Elenco filtri

Per elencare tutti i filtri creati, usa il comando "elenca filtri":

maxctrl: list filters
┌─────────────────┬────────────┬─────────────┐
│ Filter          │ Service    │ Module      │
├─────────────────┼────────────┼─────────────┤
│ qla             │            │ qlafilter   │
├─────────────────┼────────────┼─────────────┤
│ Obfuscates-card │ rr-service │ masking     │
├─────────────────┼────────────┼─────────────┤
│ fetch           │            │ regexfilter │
└─────────────────┴────────────┴─────────────┘

Negli esempi precedenti, abbiamo creato 3 filtri. Tuttavia, solo il filtro della scheda Offuscate è collegato a un servizio.

Per mostrare tutti i servizi in dettaglio:

maxctrl: show filters

Oppure se vuoi mostrare un servizio particolare:

maxctrl: show filter Obfuscates-card
┌────────────┬──────────────────────────────────────────────────────┐
│ Filter     │ Obfuscates-card                                      │
├────────────┼──────────────────────────────────────────────────────┤
│ Module     │ masking                                              │
├────────────┼──────────────────────────────────────────────────────┤
│ Services   │ rr-service                                           │
├────────────┼──────────────────────────────────────────────────────┤
│ Parameters │ {                                                    │
│            │     "check_subqueries": true,                        │
│            │     "check_unions": true,                            │
│            │     "check_user_variables": true,                    │
│            │     "large_payload": "abort",                        │
│            │     "prevent_function_usage": true,                  │
│            │     "require_fully_parsed": true,                    │
│            │     "rules": "/var/lib/maxscale/rules/masking.json", │
│            │     "treat_string_arg_as_field": true,               │
│            │     "warn_type_mismatch": "never"                    │
│            │ }                                                    │
└────────────┴──────────────────────────────────────────────────────┘

Elimina un filtro

Per eliminare un filtro, è necessario prima scollegarsi dai servizi associati. Ad esempio, considera i seguenti filtri in MaxScale:

 maxctrl: list filters
┌─────────────────┬────────────┬───────────┐
│ Filter          │ Service    │ Module    │
├─────────────────┼────────────┼───────────┤
│ qla             │            │ qlafilter │
├─────────────────┼────────────┼───────────┤
│ Obfuscates-card │ rr-service │ masking   │
└─────────────────┴────────────┴───────────┘

Per il filtro qla, possiamo semplicemente usare il seguente comando per eliminarlo:

 maxctrl: destroy filter qla
OK

Tuttavia, per il filtro della scheda Obfuscates, deve essere scollegato con rr-service e, sfortunatamente, ciò richiede una modifica del file di configurazione e il riavvio di MaxScale. Vai alla directory /var/lib/maxscale/maxscale.cnf.d e trova rr-service.cnf, aprilo con un editor di testo e quindi rimuovi la seguente riga:

filters=Obfuscates-card

Puoi anche rimuovere la stringa "Offuscates-card" dalla riga sopra e lasciare che la riga "filtri" sia uguale a un valore vuoto. Quindi, salva il file e riavvia il servizio MaxScale per caricare le modifiche:

$ systemctl restart maxscale

Solo allora possiamo rimuovere il filtro della scheda Offuscate da MaxScale usando il comando "distruggi filtro":

maxctrl: destroy filter Obfuscates-card
OK

Gestione MaxScale

Elenca utenti

Per elencare tutti gli utenti MaxScale, utilizzare il comando "list users":

maxctrl: list users
┌───────┬──────┬────────────┐
│ Name  │ Type │ Privileges │
├───────┼──────┼────────────┤
│ admin │ inet │ admin      │
└───────┴──────┴────────────┘

Crea un utente MaxScale

Per impostazione predefinita, un utente creato è un utente di sola lettura:

 maxctrl: create user dev mySecret
OK

Per creare un utente amministratore, specifica il comando --type=admin:

 maxctrl: create user dba mySecret --type=admin
OK

Elimina un utente MaxScale

Per eliminare un utente, usa semplicemente il comando "distruggi utente":

 maxctrl: destroy user dba
OK

L'ultimo utente amministrativo rimasto non può essere rimosso. Crea un utente amministrativo sostitutivo prima di tentare di rimuovere l'ultimo utente amministrativo.

Mostra parametri MaxScale

Per mostrare tutti i parametri caricati per l'istanza MaxScale, usa il comando "show maxscale":

maxctrl: show maxscale
┌──────────────┬──────────────────────────────────────────────────────────────────────┐
│ Version      │ 2.5.3                                                                │
├──────────────┼──────────────────────────────────────────────────────────────────────┤
│ Commit       │ de3770579523e8115da79b1696e600cce1087664                             │
├──────────────┼──────────────────────────────────────────────────────────────────────┤
│ Started At   │ Mon, 21 Sep 2020 04:44:49 GMT                                        │
├──────────────┼──────────────────────────────────────────────────────────────────────┤
│ Activated At │ Mon, 21 Sep 2020 04:44:49 GMT                                        │
├──────────────┼──────────────────────────────────────────────────────────────────────┤
│ Uptime       │ 1627                                                                 │
├──────────────┼──────────────────────────────────────────────────────────────────────┤
│ Parameters   │ {                                                                    │
│              │     "admin_auth": true,                                              │
│              │     "admin_enabled": true,                                           │
│              │     "admin_gui": true,                                               │
│              │     "admin_host": "127.0.0.1",                                       │
│              │     "admin_log_auth_failures": true,                                 │
│              │     "admin_pam_readonly_service": null,                              │
│              │     "admin_pam_readwrite_service": null,                             │
│              │     "admin_port": 8989,                                              │
│              │     "admin_secure_gui": true,                                        │
│              │     "admin_ssl_ca_cert": null,                                       │
│              │     "admin_ssl_cert": null,                                          │
│              │     "admin_ssl_key": null,                                           │
│              │     "auth_connect_timeout": 10000,                                   │
│              │     "auth_read_timeout": 10000,                                      │
│              │     "auth_write_timeout": 10000,                                     │
│              │     "cachedir": "/var/cache/maxscale",                               │
│              │     "connector_plugindir": "/usr/lib/x86_64-linux-gnu/mysql/plugin", │
│              │     "datadir": "/var/lib/maxscale",                                  │
│              │     "debug": null,                                                   │
│              │     "dump_last_statements": "never",                                 │
│              │     "execdir": "/usr/bin",                                           │
│              │     "language": "/var/lib/maxscale",                                 │
│              │     "libdir": "/usr/lib/x86_64-linux-gnu/maxscale",                  │
│              │     "load_persisted_configs": true,                                  │
│              │     "local_address": null,                                           │
│              │     "log_debug": false,                                              │
│              │     "log_info": false,                                               │
│              │     "log_notice": false,                                             │
│              │     "log_throttling": {                                              │
│              │         "count": 0,                                                  │
│              │         "suppress": 0,                                               │
│              │         "window": 0                                                  │
│              │     },                                                               │
│              │     "log_warn_super_user": false,                                    │
│              │     "log_warning": false,                                            │
│              │     "logdir": "/var/log/maxscale",                                   │
│              │     "max_auth_errors_until_block": 10,                               │
│              │     "maxlog": true,                                                  │
│              │     "module_configdir": "/etc/maxscale.modules.d",                   │
│              │     "ms_timestamp": true,                                            │
│              │     "passive": false,                                                │
│              │     "persistdir": "/var/lib/maxscale/maxscale.cnf.d",                │
│              │     "piddir": "/var/run/maxscale",                                   │
│              │     "query_classifier": "qc_sqlite",                                 │
│              │     "query_classifier_args": null,                                   │
│              │     "query_classifier_cache_size": 0,                                │
│              │     "query_retries": 1,                                              │
│              │     "query_retry_timeout": 5000,                                     │
│              │     "rebalance_period": 0,                                           │
│              │     "rebalance_threshold": 20,                                       │
│              │     "rebalance_window": 10,                                          │
│              │     "retain_last_statements": 0,                                     │
│              │     "session_trace": 0,                                              │
│              │     "skip_permission_checks": false,                                 │
│              │     "sql_mode": "default",                                           │
│              │     "syslog": true,                                                  │
│              │     "threads": 1,                                                    │
│              │     "users_refresh_interval": 0,                                     │
│              │     "users_refresh_time": 30000,                                     │
│              │     "writeq_high_water": 16777216,                                   │
│              │     "writeq_low_water": 8192                                         │
│              │ }                                                                    │
└──────────────┴──────────────────────────────────────────────────────────────────────┘

Modifica i parametri MaxScale

  • auth_connect_timeout
  • auth_read_timeout
  • auth_write_timeout
  • admin_auth
  • admin_log_auth_failures
  • passivo

Il resto dei parametri deve essere impostato all'interno di /etc/maxscale.conf, che richiede un riavvio di MaxScale per applicare le nuove modifiche.

Guida grafica MaxScale

MaxGUI è un nuovo strumento basato su browser per la configurazione e la gestione di MaxScale, introdotto nella versione 2.5. È accessibile tramite la porta 8989 dell'host MaxScale sull'interfaccia localhost, 127.0.0.1. Per impostazione predefinita, è necessario impostare admin_secure_gui=true e configurare entrambi i parametri admin_ssl_key e admin_ssl_cert. Tuttavia, in questo post del blog, consentiremo la connettività tramite il semplice HTTP aggiungendo la seguente riga nella direttiva [maxctrl] all'interno di /etc/maxscale.cnf:

admin_secure_gui = false

Riavvia il servizio MaxScale per caricare la modifica:

$ systemctl restart maxscale

Poiché la GUI è in ascolto sull'interfaccia localhost, possiamo utilizzare il tunneling SSH per accedere alla GUI dalla nostra workstation locale:

$ ssh -L 8989:localhost:8989 [email protected]<Maxscale public IP address>

Quindi, apri un browser web, punta l'URL a http://127.0.0.1:8989/ e accedi. MaxGUI usa le stesse credenziali di maxctrl, quindi la password predefinita è "admin" con la password "mariadb". Per motivi di sicurezza, è necessario creare un nuovo utente amministratore con una password più forte specificatamente per questo scopo. Una volta effettuato l'accesso, dovresti vedere la dashboard di MaxGUI come di seguito:

La maggior parte dei comandi di gestione di MaxCtrl che abbiamo mostrato in questa serie di blog possono essere eseguito direttamente da questa GUI. Se fai clic sul pulsante "Crea nuovo", ti verrà presentata la seguente finestra di dialogo:

Come puoi vedere, tutti i componenti importanti di MaxScale possono essere gestiti direttamente dalla GUI, con un aspetto pulito e intuitivo, rende le cose molto più semplici e dirette da gestire. Ad esempio, l'associazione di un filtro può essere eseguita direttamente dall'interfaccia utente, senza la necessità di riavviare il servizio MaxScale, come mostrato nella sezione "Allega un filtro a un servizio" in questo post del blog.

Per ulteriori informazioni su questa nuova GUI, consulta questa guida MaxGUI.

Gestione registrazione

Mostra parametri di registrazione

Per visualizzare i parametri di registrazione, utilizzare il comando "mostra registrazione":

 maxctrl: show logging
┌────────────────────┬────────────────────────────────┐
│ Current Log File   │ /var/log/maxscale/maxscale.log │
├────────────────────┼────────────────────────────────┤
│ Enabled Log Levels │ alert                          │
│                    │ error                          │
│                    │ warning                        │
│                    │ notice                         │
├────────────────────┼────────────────────────────────┤
│ Parameters         │ {                              │
│                    │     "highprecision": true,     │
│                    │     "log_debug": false,        │
│                    │     "log_info": false,         │
│                    │     "log_notice": true,        │
│                    │     "log_warning": true,       │
│                    │     "maxlog": true,            │
│                    │     "syslog": true,            │
│                    │     "throttling": {            │
│                    │         "count": 10,           │
│                    │         "suppress_ms": 10000,  │
│                    │         "window_ms": 1000      │
│                    │     }                          │
│                    │ }                              │
└────────────────────┴────────────────────────────────┘

Modifica parametri di registrazione

Tutti i parametri di registrazione mostrati sopra possono essere configurati tramite il comando MaxCtrl in runtime. Ad esempio, possiamo attivare log_info usando il comando "alter logging":

maxctrl: alter logging log_info true

Ruota registri

Per impostazione predefinita, MaxScale fornisce un file di configurazione di rotazione del registro in /etc/logrotate.d/maxscale_logrotate. In base alla configurazione della rotazione dei registri, il file di registro viene ruotato mensilmente e utilizza il comando "ruota registri" di MaxCtrl. Possiamo forzare la rotazione del registro in modo che avvenga immediatamente con il seguente comando:

$ logrotate --force /etc/logrotate.d/maxscale_logrotate

Verifica con il seguente comando:

$ ls -al /var/log/maxscale/
total 1544
drwxr-xr-x  2 maxscale maxscale    4096 Sep 21 05:53 ./
drwxrwxr-x 10 root     syslog      4096 Sep 20 06:25 ../
-rw-r--r--  1 maxscale maxscale      75 Sep 21 05:53 maxscale.log
-rw-r--r--  1 maxscale maxscale  253250 Sep 21 05:53 maxscale.log.1
-rw-r--r--  1 maxscale maxscale 1034364 Sep 18 06:25 maxscale.log.2
-rw-r--r--  1 maxscale maxscale  262676 Aug  1 06:25 maxscale.log.3

Conclusione

Abbiamo raggiunto la fine della serie di distribuzione e gestione di MaxScale utilizzando il client MaxCtrl. In questa serie di blog, abbiamo utilizzato un paio di versioni diverse di MaxScale più recenti (relative alla data di scrittura) e abbiamo riscontrato molti miglioramenti significativi in ​​ogni versione.

Complimenti al team di MariaDB MaxScale per il duro lavoro nel rendere MaxScale uno dei migliori strumenti di bilanciamento del carico del database sul mercato.