sql >> Database >  >> RDS >> MariaDB

MaxScale Basic Management MaxCtrl gebruiken voor MariaDB Cluster - deel twee

In de vorige blogpost hebben we 4 basisbeheercomponenten behandeld met behulp van de MaxCtrl-opdrachtregelclient. In deze blogpost gaan we het resterende deel van de MaxScale-componenten behandelen die vaak worden gebruikt in een MariaDB-cluster:

  • Filterbeheer
  • MaxScale-beheer
  • Logboekbeheer

Alle opdrachten in deze blogpost zijn gebaseerd op MaxScale 2.5.3.

Filterbeheer

Het filter is een module in MaxScale die fungeert als de verwerkings- en routeringsengine voor een MaxScale-service. Het filteren gebeurt tussen de clientverbinding met MaxScale en de MaxScale-verbinding met de backend-databaseservers. Dit pad (de clientzijde van MaxScale naar de eigenlijke databaseservers) kan worden beschouwd als een pijplijn, filters kunnen vervolgens in die pijplijn worden geplaatst om de inhoud die er doorheen stroomt te bewaken, wijzigen, kopiëren of blokkeren.

Er zijn veel filters die kunnen worden toegepast om de verwerkingsmogelijkheden van een MaxScale-service uit te breiden, zoals weergegeven in de volgende tabel:

Filternaam

Beschrijving

Binlog

Repliceert selectief de binaire loggebeurtenissen naar slave-servers in combinatie met een binlogrouter-service.

Cache

Een eenvoudige cache die het resultaat van SELECT's kan cachen, zodat daaropvolgende identieke SELECT's rechtstreeks door MaxScale worden bediend, zonder dat de query's naar een server.

Consistent kritisch lezen

Maakt consistente kritische leesbewerkingen mogelijk via MaxScale, terwijl scale-out van niet-kritieke leesbewerkingen nog steeds mogelijk is.

Database-firewall

Blokkeert zoekopdrachten die overeenkomen met een set regels. Dit filter moet worden gezien als een best-effort-oplossing die bedoeld is om te beschermen tegen onbedoeld misbruik in plaats van kwaadaardige aanvallen.

Hint

Voegt routeringshints toe aan een service en instrueert de router om een ​​query naar een bepaald type server te routeren.

Stream invoegen

Converteert bulk-inserts in CSV-gegevensstromen die worden gebruikt door de backend-server via het LOAD DATA LOCAL INFILE-mechanisme

Lua

Roept een set functies in een Lua-script aan.

Masker

Verdoezelt de geretourneerde waarde van een bepaalde kolom

Maxrows

Beperking van het aantal rijen dat een SELECT, een voorbereide instructie of opgeslagen procedure kan retourneren naar de clienttoepassing.

Named Server

Routeert zoekopdrachten naar servers op basis van reguliere expressie (regex) overeenkomsten.

Alle querylogboeken

Hiermee wordt de query-inhoud in CSV-indeling in een bestand vastgelegd.

Regex

Herschrijft query-inhoud met behulp van reguliere expressie-overeenkomsten en tekstvervanging.

T-shirt

Maak kopieën van verzoeken van de client en stuur de kopieën naar een andere service binnen MariaDB MaxScale.

Gashendel

Vervangt en breidt de limit_queries-functionaliteit van het Database Firewall-filter uit

Bovenaan

Bewaakt de queryprestaties van de geselecteerde SQL-instructie die door het filter gaat.

Controle van transactieprestaties

Bewaakt elke SQL-instructie die door het filter gaat, gegroepeerd per transactie, voor analyse van transactieprestaties.

Elk filter heeft zijn eigen manieren om te configureren. Filters zijn gewoonlijk gekoppeld aan een MaxScale-service. Een binlog-filter kan bijvoorbeeld worden toegepast op de binlogrouter-service, om alleen een subset van gegevens naar een slave-server te repliceren, wat de schijfruimte voor enorme tabellen enorm kan verminderen. Bekijk de MaxScale-filterdocumentatie voor de juiste manier om de parameters voor het bijbehorende filter te configureren.

Een filter maken

Elk MaxScale-filter heeft zijn eigen manier om te worden geconfigureerd. In dit voorbeeld gaan we een maskeerfilter maken om onze gevoelige gegevens voor kolom "card_no" in onze tabel "credit_cards" te maskeren. Masking vereist een regelbestand, geschreven in JSON-indeling. Maak eerst een map om onze regelbestanden te hosten:

$ mkdir /var/lib/maxscale/rules

Maak vervolgens een tekstbestand:

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

Specificeer de regels zoals hieronder:

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

De bovenstaande eenvoudige regels verdoezelen eenvoudig de uitvoer van column card_no voor alle tabellen, om de gevoelige gegevens te beschermen die door de MariaDB-client kunnen worden gezien.

Nadat het regelbestand is gemaakt, kunnen we het filter maken met behulp van de volgende opdracht:

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

Merk op dat sommige filters andere parameters vereisen. Wat dit maskeringsfilter betreft, is de basisparameter "regels", waarbij we het gemaakte maskeringsregelbestand in JSON-indeling moeten specificeren.

Een filter aan een service koppelen

Een filter kan alleen worden geactiveerd door deze aan een dienst te koppelen. Het wijzigen van een bestaande service met MaxCtrl wordt alleen ondersteund door enkele parameters, en het toevoegen van een filter is daar niet een van. We moeten het filteronderdeel toevoegen onder het serviceconfiguratiebestand van MaxScale om het filter in feite te bevestigen. In dit voorbeeld gaan we het filter "Obfuscates-card" toepassen op onze bestaande round-robin-service genaamd rr-service.

Ga naar de map /var/lib/maxscale/maxscale.cnf.d en zoek rr-service.cnf, open het met een teksteditor en voeg de volgende regel toe:

filters=Obfuscates-card

Een MaxScale-herstart is vereist om de nieuwe wijziging te laden:

$ systemctl restart maxscale

Om het filter te testen, gebruiken we een MariaDB-client en vergelijken we de uitvoer door verbinding te maken met twee verschillende services. Onze rw-service is gekoppeld aan een luisteraar die luistert op poort 3306, zonder dat er filters zijn geconfigureerd. Daarom zouden we het ongefilterde antwoord van de MaxScale moeten zien:

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

Wanneer u verbinding maakt met de rr-service-listener op poort 3307, die is geconfigureerd met ons filter, wordt onze "card_no"-waarde versluierd met een wartaal-uitvoer:

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

Deze filtering wordt uitgevoerd door MaxScale, volgens de overeenkomende regels in masking.json die we eerder hebben gemaakt.

Lijstfilters

Gebruik de opdracht "lijst filters" om alle gemaakte filters weer te geven:

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

In de bovenstaande voorbeelden hebben we 3 filters gemaakt. Alleen het filter van de Obfuscates-kaart is echter aan een dienst gekoppeld.

Om alle services in detail weer te geven:

maxctrl: show filters

Of als u een bepaalde dienst wilt laten zien:

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

Een filter verwijderen

Om een ​​filter te verwijderen, moet men eerst ontkoppelen van de bijbehorende services. Overweeg bijvoorbeeld de volgende filters in MaxScale:

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

Voor het qla-filter kunnen we eenvoudig de volgende opdracht gebruiken om het te verwijderen:

 maxctrl: destroy filter qla
OK

Voor de Obfuscates-kaartfilter moet deze echter worden ontkoppeld met rr-service en helaas vereist dit een wijziging van het configuratiebestand en een herstart van MaxScale. Ga naar de map /var/lib/maxscale/maxscale.cnf.d en zoek rr-service.cnf, open het met een teksteditor en verwijder de volgende regel:

filters=Obfuscates-card

Je zou ook de "Obfuscates-card" string uit de bovenstaande regel kunnen verwijderen en de regel "filters" gelijk kunnen stellen aan een lege waarde. Sla vervolgens het bestand op en start de MaxScale-service opnieuw om de wijzigingen te laden:

$ systemctl restart maxscale

Alleen dan kunnen we het Obfuscates-kaartfilter uit MaxScale verwijderen met het commando "destroy filter":

maxctrl: destroy filter Obfuscates-card
OK

MaxScale-beheer

Gebruikerslijst

Gebruik de opdracht "list users" om alle MaxScale-gebruikers weer te geven:

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

Maak een MaxScale-gebruiker

Standaard is een aangemaakte gebruiker een alleen-lezen gebruiker:

 maxctrl: create user dev mySecret
OK

Om een ​​administrator-gebruiker aan te maken, specificeert u het --type=admin commando:

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

Een MaxScale-gebruiker verwijderen

Om een ​​gebruiker te verwijderen, gebruik je gewoon de opdracht "gebruiker vernietigen":

 maxctrl: destroy user dba
OK

De laatst overgebleven beheerder kan niet worden verwijderd. Maak een vervangende gebruiker met beheerdersrechten aan voordat u probeert de laatste gebruiker met beheerdersrechten te verwijderen.

Toon MaxScale-parameters

Gebruik de opdracht "show maxscale" om alle geladen parameters voor de MaxScale-instantie weer te geven:

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

MaxScale-parameters wijzigen

  • auth_connect_timeout
  • auth_read_timeout
  • auth_write_timeout
  • admin_auth
  • admin_log_auth_failures
  • passief

De rest van de parameters moet worden ingesteld in /etc/maxscale.conf, wat een herstart van MaxScale vereist om de nieuwe wijzigingen toe te passen.

MaxScale GUI

MaxGUI is een nieuwe browsergebaseerde tool voor het configureren en beheren van MaxScale, geïntroduceerd in versie 2.5. Het is toegankelijk via poort 8989 van de MaxScale-host op de localhost-interface, 127.0.0.1. Het is standaard vereist om admin_secure_gui=true in te stellen en zowel de parameters admin_ssl_key als admin_ssl_cert te configureren. In deze blogpost gaan we echter connectiviteit via de gewone HTTP toestaan ​​door de volgende regel toe te voegen onder [maxctrl]-richtlijn in /etc/maxscale.cnf:

admin_secure_gui = false

Start de MaxScale-service opnieuw om de wijziging te laden:

$ systemctl restart maxscale

Omdat de GUI luistert op de localhost-interface, kunnen we SSH-tunneling gebruiken om toegang te krijgen tot de GUI vanaf ons lokale werkstation:

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

Open vervolgens een webbrowser, verwijs de URL naar http://127.0.0.1:8989/ en log in. MaxGUI gebruikt dezelfde inloggegevens als maxctrl, dus het standaardwachtwoord is "admin" met het wachtwoord "mariadb". Om veiligheidsredenen moet men speciaal voor dit doel een nieuwe admin-gebruiker maken met een sterker wachtwoord. Nadat u bent ingelogd, ziet u het MaxGUI-dashboard zoals hieronder:

De meeste MaxCtrl-beheeropdrachten die we in deze blogreeks hebben laten zien, kunnen rechtstreeks vanuit deze GUI worden uitgevoerd. Als u op de knop "Nieuwe maken" klikt, krijgt u het volgende dialoogvenster te zien:

Zoals u kunt zien, kunnen alle belangrijke MaxScale-componenten direct worden beheerd vanuit de GUI, met een mooie intuïtieve, strakke uitstraling, maakt dingen veel eenvoudiger en eenvoudiger te beheren. Het koppelen van een filter kan bijvoorbeeld rechtstreeks vanuit de gebruikersinterface worden gedaan, zonder dat de MaxScale-service opnieuw hoeft te worden gestart, zoals wordt weergegeven in het gedeelte 'Een filter aan een service koppelen' in deze blogpost.

Bekijk deze MaxGUI-gids voor meer informatie over deze nieuwe GUI.

Logboekbeheer

Toon logboekparameters

Gebruik de opdracht "show logging" om de logparameters weer te geven:

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

Logboekparameters bewerken

Alle logparameters zoals hierboven weergegeven, kunnen tijdens runtime worden geconfigureerd via de opdracht MaxCtrl. We kunnen bijvoorbeeld de log_info aanzetten door het "alter logging" commando te gebruiken:

maxctrl: alter logging log_info true

Logboeken roteren

Standaard biedt de MaxScale een configuratiebestand voor het roteren van logbestanden onder /etc/logrotate.d/maxscale_logrotate. Op basis van de logrotatieconfiguratie wordt het logbestand maandelijks geroteerd en maakt het gebruik van MaxCtrl's "rotate logs"-commando. We kunnen de logrotatie onmiddellijk forceren met het volgende commando:

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

Verifieer met het volgende commando:

$ 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

Conclusie

We zijn aan het einde gekomen van de reeks van MaxScale-implementatie en -beheer met behulp van de MaxCtrl-client. In deze blogreeks hebben we een aantal verschillende nieuwste MaxScale-versies gebruikt (ten opzichte van de opschrijfdatum) en we hebben in elke versie veel significante verbeteringen gezien.

Een pluim voor het MariaDB MaxScale-team voor hun harde werk om van MaxScale een van de beste load balancer-tools voor databases op de markt te maken.


  1. Automatische verwijdering van vergeten transacties in MS SQL Server

  2. Afronding op 2 decimalen in SQL

  3. Hoe een-op-een, een-op-veel en veel-op-veel relaties te implementeren tijdens het ontwerpen van tabellen?

  4. selecteer rownum uit salaris waarbij rownum=3;