sql >> Databasteknik >  >> RDS >> MariaDB

MaxScale Basic Management med MaxCtrl för MariaDB Cluster - Del två

I det tidigare blogginlägget har vi täckt fyra grundläggande hanteringskomponenter med MaxCtrl-kommandoradsklienten. I det här blogginlägget kommer vi att täcka den återstående delen av MaxScale-komponenterna som vanligtvis används i ett MariaDB-kluster:

  • Filterhantering
  • MaxScale-hantering
  • Logghantering

Alla kommandon i det här blogginlägget är baserade på MaxScale 2.5.3.

Filterhantering

Filtret är en modul i MaxScale som fungerar som process- och routingmotor för en MaxScale-tjänst. Filtreringen sker mellan klientanslutningen till MaxScale och MaxScale-anslutningen till backend-databasservrarna. Den här sökvägen (klientsidan av MaxScale ut till de faktiska databasservrarna) kan betraktas som en pipeline, filter kan sedan placeras i den pipeline för att övervaka, modifiera, kopiera eller blockera innehållet som flödar genom den.

Det finns många filter som kan användas för att utöka bearbetningsmöjligheterna för en MaxScale-tjänst, som visas i följande tabell:

Filternamn

Beskrivning

Binlog

Replikerar selektivt de binära logghändelserna till slavservrar kombinerat med en binlogrouter-tjänst.

Cache

En enkel cache som kan cachelagra resultatet av SELECT, så att efterföljande identiska SELECT:er betjänas direkt av MaxScale, utan att frågorna dirigeras till någon server.

Konsekvent kritisk läsning

Tillåter att konsekventa kritiska läsningar görs genom MaxScale samtidigt som det tillåter skalning av icke-kritiska läsningar.

Databasbrandvägg

Blockerar frågor som matchar en uppsättning regler. Det här filtret bör ses som en bästa lösning avsedd för att skydda mot oavsiktlig missbruk snarare än skadliga attacker.

Tips

Lägger till routingtips till en tjänst och instruerar routern att dirigera en fråga till en viss typ av server.

Infoga ström

Konverterar massinlägg till CSV-dataströmmar som konsumeras av backend-servern via mekanismen LADDA DATA LOCAL INFILE

Lua

Anropar en uppsättning funktioner i ett Lua-skript.

Maskning

Obfuskerar det returnerade värdet för en viss kolumn

Maxrows

Begränsning av antalet rader som en SELECT, en förberedd sats eller lagrad procedur kan returnera till klientapplikationen.

Namnställd server

Dirigerar frågor till servrar baserat på matchningar med reguljära uttryck (regex).

Frågelogg alla

Loggar frågeinnehåll till en fil i CSV-format.

Regex

Skrivar om frågeinnehåll med hjälp av reguljära uttrycksmatchningar och textersättning.

T-shirt

Gör kopior av förfrågningar från klienten och skicka kopiorna till en annan tjänst inom MariaDB MaxScale.

Gåpa

Ersätter och utökar limit_queries-funktionen för databasbrandväggsfiltret

Överst

Övervakar frågeprestanda för den valda SQL-satsen som passerar genom filtret.

Övervakning av transaktionsprestanda

Övervakar varje SQL-sats som passerar genom filtret, grupperad per transaktion, för analys av transaktionsprestanda.

Varje filter har sina egna sätt att konfigurera. Filter är vanligtvis kopplade till en MaxScale-tjänst. Till exempel kan ett binlog-filter appliceras på binlogrouter-tjänsten, för att bara replikera en delmängd av data till en slavserver, vilket avsevärt kan minska diskutrymmet för enorma tabeller. Kolla in MaxScale-filterdokumentationen för det rätta sättet att konfigurera parametrarna för motsvarande filter.

Skapa ett filter

Varje MaxScale-filter har sitt eget sätt att konfigureras. I det här exemplet kommer vi att skapa ett maskeringsfilter för att maskera våra känsliga data för kolumnen "card_no" i vår tabell "credit_cards". Maskering kräver en regelfil, skriven i JSON-format. Skapa först en katalog för våra regelfiler:

$ mkdir /var/lib/maxscale/rules

Skapa sedan en textfil:

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

Ange raderna enligt nedan:

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

Ovanstående enkla regler kommer helt enkelt att fördunkla utdata från kolumn card_no för alla tabeller, för att skydda den känsliga data som ska ses av MariaDB-klienten.

Efter att regelfilen har skapats kan vi skapa filtret med följande kommando:

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

Observera att vissa filter kräver olika parametrar. När det gäller detta maskeringsfilter är grundparametern "regler", där vi måste specificera den skapade maskeringsregelfilen i JSON-format.

Bifoga ett filter till en tjänst

Ett filter kan bara aktiveras genom att det kopplas till en tjänst. Att ändra en befintlig tjänst med MaxCtrl stöds endast av vissa parametrar, och att lägga till ett filter är inte en av dem. Vi måste lägga till filterkomponenten under MaxScales tjänstkonfigurationsfil för att i princip bifoga filtret. I det här exemplet kommer vi att tillämpa filtret "Obfuscates-card" på vår befintliga round-robin-tjänst som heter rr-service.

Gå till katalogen /var/lib/maxscale/maxscale.cnf.d och hitta rr-service.cnf, öppna den med en textredigerare och lägg sedan till följande rad:

filters=Obfuscates-card

En MaxScale-omstart krävs för att ladda den nya ändringen:

$ systemctl restart maxscale

För att testa filtret kommer vi att använda en MariaDB-klient och jämföra utdata genom att ansluta till två olika tjänster. Vår rw-tjänst är kopplad till en lyssnare som lyssnar på port 3306, utan några filter konfigurerade. Därför bör vi se det ofiltrerade svaret från 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 ansluter till rr-service-lyssnaren på port 3307, som är konfigurerad med vårt filter, fördunklas vårt "card_no"-värde med en floskelutgång:

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

Denna filtrering utförs av MaxScale, enligt matchningsreglerna inuti maskering.json som vi har skapat tidigare.

Lista filter

För att lista ut alla skapade filter, använd kommandot "list filters":

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

I exemplen ovan har vi skapat 3 filter. Det är dock bara Obfuscates-kortfiltret som är kopplat till en tjänst.

För att visa alla tjänster i detalj:

maxctrl: show filters

Eller om du vill visa en viss tjänst:

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

Ta bort ett filter

För att radera ett filter måste man först ta bort länken från de tillhörande tjänsterna. Tänk till exempel på följande filter i MaxScale:

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

För qla-filtret kan vi helt enkelt använda följande kommando för att ta bort det:

 maxctrl: destroy filter qla
OK

Men för Obfuscates-kortfiltret måste det kopplas bort med rr-service och tyvärr kräver detta en konfigurationsfiländring och omstart av MaxScale. Gå till katalogen /var/lib/maxscale/maxscale.cnf.d och hitta rr-service.cnf, öppna den med en textredigerare och ta sedan bort följande rad:

filters=Obfuscates-card

Du kan också ta bort "Obfuscates-card"-strängen från ovanstående rad och låta "filters"-raden vara lika med ett tomt värde. Spara sedan filen och starta om MaxScale-tjänsten för att ladda ändringarna:

$ systemctl restart maxscale

Först då kan vi ta bort Obfuscates-kortfiltret från MaxScale med kommandot "destroy filter":

maxctrl: destroy filter Obfuscates-card
OK

MaxScale Management

Lista användare

För att lista alla MaxScale-användare, använd kommandot "list users":

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

Skapa en MaxScale-användare

Som standard är en skapad användare en skrivskyddad användare:

 maxctrl: create user dev mySecret
OK

För att skapa en administratörsanvändare anger du kommandot --type=admin:

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

Ta bort en MaxScale-användare

För att ta bort en användare, använd helt enkelt kommandot "förstör användare":

 maxctrl: destroy user dba
OK

Den sista kvarvarande administrativa användaren kan inte tas bort. Skapa en ersättningsadministrativ användare innan du försöker ta bort den sista administrativa användaren.

Visa MaxScale-parametrar

För att visa alla inlästa parametrar för MaxScale-instansen, använd kommandot "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                                         │
│              │ }                                                                    │
└──────────────┴──────────────────────────────────────────────────────────────────────┘

Ändra MaxScale-parametrar

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

Resten av parametrarna måste ställas in i /etc/maxscale.conf, vilket kräver en omstart av MaxScale för att tillämpa de nya ändringarna.

MaxScale GUI

MaxGUI är ett nytt webbläsarbaserat verktyg för att konfigurera och hantera MaxScale, introducerat i version 2.5. Den är tillgänglig via port 8989 på MaxScale-värden på localhost-gränssnittet, 127.0.0.1. Som standard är det nödvändigt att ställa in admin_secure_gui=true och konfigurera både admin_ssl_key och admin_ssl_cert parametrarna. Men i det här blogginlägget kommer vi att tillåta anslutning via vanlig HTTP genom att lägga till följande rad under [maxctrl]-direktivet inuti /etc/maxscale.cnf:

admin_secure_gui = false

Starta om MaxScale-tjänsten för att ladda ändringen:

$ systemctl restart maxscale

Eftersom det grafiska användargränssnittet lyssnar på det lokala värdgränssnittet kan vi använda SSH-tunnling för att komma åt det grafiska användargränssnittet från vår lokala arbetsstation:

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

Öppna sedan en webbläsare, peka URL:en till http://127.0.0.1:8989/ och logga in. MaxGUI använder samma referenser som maxctrl, därför är standardlösenordet "admin" med lösenordet "mariadb". Av säkerhetsskäl bör man skapa en ny administratörsanvändare med ett starkare lösenord specifikt för detta ändamål. När du har loggat in bör du se MaxGUI-instrumentpanelen enligt nedan:

De flesta av MaxCtrl-hanteringskommandona som vi har visat i den här bloggserien kan utföras direkt från detta GUI. Om du klickar på knappen "Skapa ny" kommer du att få följande dialogruta:

Som du kan se kan alla viktiga MaxScale-komponenter hanteras direkt från GUI, med ett snyggt intuitivt rent utseende, gör saker mycket enklare och enklare att hantera. Till exempel kan associering av ett filter göras direkt från användargränssnittet, utan att behöva starta om MaxScale-tjänsten, som visas under avsnittet "Bifoga ett filter till en tjänst" i det här blogginlägget.

För mer information om detta nya GUI, kolla in denna MaxGUI-guide.

Logghantering

Visa loggningsparametrar

För att visa loggningsparametrarna, använd kommandot "visa loggning":

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

Redigera loggningsparametrar

Alla loggningsparametrar som visas ovan kan konfigureras via MaxCtrl-kommandot under körning. Till exempel kan vi aktivera log_info genom att använda kommandot "alter logging":

maxctrl: alter logging log_info true

Rotera loggar

Som standard tillhandahåller MaxScale en konfigurationsfil för loggrotering under /etc/logrotate.d/maxscale_logrotate. Baserat på loggrotationskonfigurationen roteras loggfilen månadsvis och använder sig av MaxCtrls kommando "rotate logs". Vi kan tvinga loggrotation att ske omedelbart med följande kommando:

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

Verifiera med följande 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

Slutsats

Vi har nått slutet av serien av MaxScale-distribution och hantering med MaxCtrl-klienten. I den här bloggserien har vi använt ett par olika senaste MaxScale-versioner (i förhållande till uppskrivningsdatumet) och vi har sett många betydande förbättringar i varje version.

Kudos till MariaDB MaxScale-teamet för deras hårda arbete med att göra MaxScale till ett av de bästa databaslastbalanseringsverktygen på marknaden.


  1. Hur man ändrar begränsning

  2. PGError:ERROR:aggregeringar är inte tillåtna i WHERE-satsen på en AR-fråga för ett objekt och dess has_many-objekt

  3. NANVL() Funktion i Oracle

  4. Varför begår SQL*Plus vid exit?