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

MaxScale Basic Management ved hjælp af MaxCtrl til MariaDB Cluster - Anden del

I det forrige blogindlæg har vi dækket 4 grundlæggende administrationskomponenter ved hjælp af MaxCtrl-kommandolinjeklienten. I dette blogindlæg vil vi dække den resterende del af MaxScale-komponenterne, som almindeligvis bruges i en MariaDB-klynge:

  • Filterstyring
  • MaxScale-styring
  • Logføringsstyring

Alle kommandoerne i dette blogindlæg er baseret på MaxScale 2.5.3.

Filterstyring

Filteret er et modul i MaxScale, der fungerer som behandlings- og routingmotor for en MaxScale-tjeneste. Filtreringen sker mellem klientforbindelsen til MaxScale og MaxScale-forbindelsen til backend-databaseserverne. Denne sti (klientsiden af ​​MaxScale ud til de faktiske databaseservere) kan betragtes som en pipeline, filtre kan derefter placeres i den pipeline for at overvåge, ændre, kopiere eller blokere indholdet, der flyder igennem den.

Der er mange filtre, der kan anvendes til at udvide behandlingsmulighederne for en MaxScale-tjeneste, som vist i følgende tabel:

Filternavn

Beskrivelse

Binlog

Replikerer selektivt de binære loghændelser til slaveservere kombineret med en binlogrouter-tjeneste.

Cache

En simpel cache, der er i stand til at cache resultatet af SELECT'er, så efterfølgende identiske SELECT'er betjenes direkte af MaxScale, uden at forespørgslerne bliver dirigeret til evt. server.

Konsekvent kritisk læsning

Tillader konsekvente kritiske læsninger at udføres gennem MaxScale, mens de stadig tillader skalering af ikke-kritiske læsninger.

Database Firewall

Blokerer forespørgsler, der matcher et sæt regler. Dette filter skal ses som en bedst mulig løsning beregnet til at beskytte mod utilsigtet misbrug snarere end ondsindede angreb.

Tip

Tilføjer routingtip til en tjeneste og instruerer routeren om at dirigere en forespørgsel til en bestemt type server.

Indsæt stream

Konverterer masseindsættelser til CSV-datastrømme, der forbruges af backend-serveren via LOAD DATA LOCAL INFILE-mekanismen

Lua

Kalder et sæt funktioner i et Lua-script.

Maskning

Forslører den returnerede værdi af en bestemt kolonne

Maxrows

Begrænsning af antallet af rækker, som en SELECT, en forberedt sætning eller lagret procedure kan returnere til klientapplikationen.

Navnet server

Ruterer forespørgsler til servere baseret på match med regulære udtryk (regex).

Forespørgselslog alle

Logger forespørgselsindhold til en fil i CSV-format.

Regex

Omskriver forespørgselsindhold ved hjælp af matches med regulære udtryk og tekstsubstitution.

T-shirt

Lav kopier af anmodninger fra klienten og send kopierne til en anden tjeneste inden for MariaDB MaxScale.

Throttle

Erstatter og udvider limit_queries-funktionaliteten i Database Firewall-filteret

Top

Overvåger forespørgselsydeevnen for den valgte SQL-sætning, der passerer gennem filteret.

Overvågning af transaktionsydelse

Overvåger hver SQL-sætning, der passerer gennem filteret, grupperet efter transaktion, til analyse af transaktionsydelse.

Hvert filter har sine egne måder at konfigurere på. Filtre er almindeligvis knyttet til en MaxScale-tjeneste. For eksempel kan et binlog-filter anvendes på binlogrouter-tjenesten, for kun at replikere en delmængde af data til en slaveserver, hvilket kan reducere diskpladsen til enorme tabeller enormt. Se dokumentationen til MaxScale-filtre for den rigtige måde at konfigurere parametrene for det tilsvarende filter på.

Opret et filter

Hvert MaxScale-filter har sin egen måde at blive konfigureret på. I dette eksempel skal vi oprette et maskeringsfilter for at maskere vores følsomme data for kolonnen "card_no" i vores tabel "credit_cards". Maskering kræver en regelfil, skrevet i JSON-format. For det første skal du oprette en mappe til at være vært for vores regelfiler:

$ mkdir /var/lib/maxscale/rules

Opret derefter en tekstfil:

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

Angiv linjerne som nedenfor:

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

Ovenstående enkle regler vil simpelthen sløre outputtet af kolonne card_no for alle tabeller for at beskytte de følsomme data, der skal ses af MariaDB-klienten.

Efter at regelfilen er blevet oprettet, kan vi oprette filteret ved at bruge følgende kommando:

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

Bemærk, at nogle filtre kræver forskellige parametre. Hvad angår dette maskeringsfilter, er den grundlæggende parameter "regler", hvor vi skal angive den oprettede maskeringsregelfil i JSON-format.

Vedhæft et filter til en tjeneste

Et filter kan kun aktiveres ved at tilslutte det til en tjeneste. Ændring af en eksisterende tjeneste ved hjælp af MaxCtrl understøttes kun af nogle parametre, og tilføjelse af et filter er ikke en af ​​dem. Vi er nødt til at tilføje filterkomponenten under MaxScales servicekonfigurationsfil for grundlæggende at vedhæfte filteret. I dette eksempel vil vi anvende filteret "Obfuscates-card" på vores eksisterende round-robin-tjeneste kaldet rr-service.

Gå til mappen /var/lib/maxscale/maxscale.cnf.d og find rr-service.cnf, åbn den med en teksteditor og tilføj derefter følgende linje:

filters=Obfuscates-card

En MaxScale-genstart er påkrævet for at indlæse den nye ændring:

$ systemctl restart maxscale

For at teste filteret bruger vi en MariaDB-klient og sammenligner outputtet ved at oprette forbindelse til to forskellige tjenester. Vores rw-service er knyttet til en lytter, der lytter på port 3306, uden at der er konfigureret nogen filtre. Derfor bør vi se det ufiltrerede svar fra 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 |
+----+-----------+-----------------+-------------+-----------+---------+

Når du forbinder til rr-service-lytteren på port 3307, som er konfigureret med vores filter, er vores "card_no"-værdi sløret med et volapyk-output:

$ 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 |
+----+-----------+-----------------+-------------+-----------+---------+

Denne filtrering udføres af MaxScale efter matchningsreglerne inde i masking.json, som vi har oprettet tidligere.

Vis filtre

Brug kommandoen "liste filtre" for at få vist alle oprettede filtre:

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

I ovenstående eksempler har vi lavet 3 filtre. Det er dog kun Obfuscates-kortfilteret, der er knyttet til en tjeneste.

For at vise alle tjenester i detaljer:

maxctrl: show filters

Eller hvis du vil vise en bestemt tjeneste:

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

Slet et filter

For at slette et filter, skal man først fjerne linket fra de tilknyttede tjenester. Overvej f.eks. følgende filtre i MaxScale:

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

For qla-filteret kan vi blot bruge følgende kommando til at slette det:

 maxctrl: destroy filter qla
OK

Men for Obfuscates-kortfilteret skal det kobles fra med rr-service, og desværre kræver dette en konfigurationsfilændring og MaxScale genstart. Gå til mappen /var/lib/maxscale/maxscale.cnf.d og find rr-service.cnf, åbn den med en teksteditor og fjern derefter følgende linje:

filters=Obfuscates-card

Du kan også fjerne "Obfuscates-card"-strengen fra ovenstående linje og lade "filtre"-linjen svare til en tom værdi. Gem derefter filen og genstart MaxScale-tjenesten for at indlæse ændringerne:

$ systemctl restart maxscale

Først da kan vi fjerne Obfuscates-kortfilteret fra MaxScale ved at bruge kommandoen "destroy filter":

maxctrl: destroy filter Obfuscates-card
OK

MaxScale Management

Angiv brugere

For at liste alle MaxScale-brugere, brug kommandoen "list users":

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

Opret en MaxScale-bruger

Som standard er en oprettet bruger en skrivebeskyttet bruger:

 maxctrl: create user dev mySecret
OK

For at oprette en administratorbruger skal du angive kommandoen --type=admin:

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

Slet en MaxScale-bruger

For at slette en bruger skal du blot bruge kommandoen "ødelæg bruger":

 maxctrl: destroy user dba
OK

Den sidste resterende administrative bruger kan ikke fjernes. Opret en erstatningsadministrativ bruger, før du forsøger at fjerne den sidste administrative bruger.

Vis MaxScale-parametre

For at vise alle indlæste parametre for MaxScale-forekomsten skal du bruge kommandoen "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                                         │
│              │ }                                                                    │
└──────────────┴──────────────────────────────────────────────────────────────────────┘

Ændre MaxScale-parametre

  • auth_connect_timeout
  • auth_read_timeout
  • auth_write_timeout
  • admin_auth
  • admin_log_auth_failures
  • passiv

Resten af ​​parametrene skal indstilles inde i /etc/maxscale.conf, hvilket kræver en MaxScale-genstart for at anvende de nye ændringer.

MaxScale GUI

MaxGUI er et nyt browserbaseret værktøj til konfiguration og styring af MaxScale, introduceret i version 2.5. Den er tilgængelig via port 8989 på MaxScale-værten på localhost-grænsefladen, 127.0.0.1. Som standard er det nødvendigt at indstille admin_secure_gui=true og konfigurere både admin_ssl_key og admin_ssl_cert parametrene. I dette blogindlæg vil vi dog tillade forbindelse via den almindelige HTTP ved at tilføje følgende linje under [maxctrl]-direktivet inde i /etc/maxscale.cnf:

admin_secure_gui = false

Genstart MaxScale-tjenesten for at indlæse ændringen:

$ systemctl restart maxscale

Da GUI'en lytter på den lokale værtsgrænseflade, kan vi bruge SSH-tunneling til at få adgang til GUI'en fra vores lokale arbejdsstation:

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

Åbn derefter en webbrowser, peg URL'en til http://127.0.0.1:8989/ og log ind. MaxGUI bruger de samme legitimationsoplysninger som maxctrl, så standardadgangskoden er "admin" med adgangskoden "mariadb". Af sikkerhedsmæssige årsager bør man oprette en ny admin-bruger med en stærkere adgangskode specifikt til dette formål. Når du er logget ind, bør du se MaxGUI-dashboardet som nedenfor:

De fleste af de MaxCtrl-styringskommandoer, som vi har vist i denne blogserie, kan udføres direkte fra denne GUI. Hvis du klikker på knappen "Opret ny", vil du blive præsenteret for følgende dialogboks:

Som du kan se, kan alle de vigtige MaxScale-komponenter administreres direkte fra GUI'en, med et flot intuitivt rent udseende, gør tingene meget enklere og mere ligetil at administrere. For eksempel kan tilknytning af et filter ske direkte fra brugergrænsefladen, uden at det er nødvendigt at genstarte MaxScale-tjenesten, som vist under afsnittet "Vedhæft et filter til en tjeneste" i dette blogindlæg.

For mere information om denne nye GUI, tjek denne MaxGUI guide.

Logføringsstyring

Vis logningsparametre

For at vise logningsparametrene, brug kommandoen "vis logning":

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

Rediger logningsparametre

Alle logningsparametre som vist ovenfor kan konfigureres via MaxCtrl-kommandoen i runtime. For eksempel kan vi slå log_info til ved at bruge kommandoen "alter logging":

maxctrl: alter logging log_info true

Rotér logfiler

Som standard giver MaxScale en logrotationskonfigurationsfil under /etc/logrotate.d/maxscale_logrotate. Baseret på logrotationskonfigurationen roteres logfilen månedligt og gør brug af MaxCtrl's "rotate logs" kommando. Vi kan tvinge log-rotation til at ske med det samme med følgende kommando:

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

Bekræft med følgende kommando:

$ 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

Konklusion

Vi er nået til slutningen af ​​serien af ​​MaxScale-implementering og administration ved hjælp af MaxCtrl-klienten. På tværs af denne blogserie har vi brugt et par forskellige nyeste MaxScale-versioner (i forhold til opskrivningsdatoen), og vi har set mange væsentlige forbedringer i hver version.

Kudos til MariaDB MaxScale-teamet for deres hårde arbejde med at gøre MaxScale til et af de bedste database-load balancer-værktøjer på markedet.


  1. Sådan fungerer SQLite Char()

  2. Sådan deaktiverer du CDC på sæt af tabeller ELLER deaktiverer på alle tabeller i en database i SQL Server - SQL Server Tutorial

  3. MySQL fejl 150

  4. 2 måder at få partitionsoplysninger til en tabel i SQL Server (T-SQL)