sql >> Databáze >  >> RDS >> MariaDB

Základní správa MaxScale pomocí MaxCtrl pro MariaDB Cluster – část druhá

V předchozím příspěvku na blogu jsme probrali 4 základní součásti správy pomocí klienta příkazového řádku MaxCtrl. V tomto příspěvku na blogu se budeme zabývat zbývající částí komponent MaxScale, které se běžně používají v clusteru MariaDB:

  • Správa filtrů
  • Správa MaxScale
  • Správa protokolování

Všechny příkazy v tomto příspěvku na blogu jsou založeny na MaxScale 2.5.3.

Správa filtrů

Filtr je modul v MaxScale, který funguje jako procesor pro zpracování a směrování pro službu MaxScale. K filtrování dochází mezi připojením klienta k MaxScale a připojením MaxScale k backendovým databázovým serverům. Tuto cestu (klientskou stranu MaxScale ven ke skutečným databázovým serverům) lze považovat za kanál, do kterého lze poté umístit filtry, které monitorují, upravují, kopírují nebo blokují obsah, který přes něj proudí.

Existuje mnoho filtrů, které lze použít k rozšíření schopností zpracování služby MaxScale, jak ukazuje následující tabulka:

Název filtru

Popis

Binlog

Selektivně replikuje události binárního protokolu na podřízené servery v kombinaci se službou binlogrouter.

Mezipaměť

Jednoduchá mezipaměť, která je schopna ukládat do mezipaměti výsledek SELECTů, takže následné identické SELECTy jsou obsluhovány přímo MaxScale, aniž by byly dotazy směrovány do jakékoli server.

Konzistentní kritické čtení

Umožňuje provádět konzistentní kritická čtení prostřednictvím MaxScale a zároveň umožňuje škálování nekritických čtení.

Databázový firewall

Blokuje dotazy, které odpovídají sadě pravidel. Tento filtr by měl být považován za nejlepší řešení určené k ochraně před náhodným zneužitím spíše než před škodlivými útoky.

Nápověda

Přidává směrovací tipy do služby a dává směrovači pokyn, aby směroval dotaz na určitý typ serveru.

Vložit stream

Převádí hromadné vkládání do datových toků CSV, které spotřebovává backendový server prostřednictvím mechanismu LOAD DATA LOCAL INFILE

Lua

Volá sadu funkcí ve skriptu Lua.

Maskování

Zatemňuje vrácenou hodnotu konkrétního sloupce

Maxrows

Omezení počtu řádků, které může SELECT, připravený příkaz nebo uložená procedura vrátit klientské aplikaci.

Pojmenovaný server

Směruje dotazy na servery na základě shod regulárních výrazů (regulárních výrazů).

Všechny protokoly dotazů

Zaznamenává obsah dotazu do souboru ve formátu CSV.

Regulační výraz

Přepíše obsah dotazu pomocí shod regulárních výrazů a nahrazení textu.

Tričko

Vytvářejte kopie požadavků od klienta a odešlete kopie do jiné služby v rámci MariaDB MaxScale.

Throt

Nahrazuje a rozšiřuje funkci limit_queries filtru Database Firewall

Nahoře

Monitoruje výkon dotazu vybraného příkazu SQL, který projde filtrem.

Monitorování výkonu transakcí

Monitoruje každý příkaz SQL, který projde filtrem, seskupený podle transakce, za účelem analýzy výkonu transakce.

Každý filtr má své vlastní způsoby konfigurace. Filtry jsou běžně připojeny ke službě MaxScale. Na službu binlogrouter lze například použít filtr binlog, který replikuje pouze podmnožinu dat na podřízený server, což může výrazně snížit místo na disku pro velké tabulky. Podívejte se do dokumentace k filtrům MaxScale, kde najdete správný způsob konfigurace parametrů pro odpovídající filtr.

Vytvořit filtr

Každý filtr MaxScale má svůj vlastní způsob konfigurace. V tomto příkladu vytvoříme maskovací filtr, abychom maskovali naše citlivá data pro sloupec "card_no" v naší tabulce "credit_cards". Maskování vyžaduje soubor pravidel napsaný ve formátu JSON. Nejprve vytvořte adresář pro hostitele našich souborů pravidel:

$ mkdir /var/lib/maxscale/rules

Poté vytvořte textový soubor:

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

Zadejte řádky, jak je uvedeno níže:

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

Výše uvedená jednoduchá pravidla jednoduše znejasní výstup sloupce card_no pro všechny tabulky, aby ochránila citlivá data, která uvidí klient MariaDB.

Po vytvoření souboru pravidel můžeme vytvořit filtr pomocí následujícího příkazu:

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

Všimněte si, že některé filtry vyžadují různé parametry. Co se týče tohoto maskovacího filtru, základním parametrem je „rules“, kde potřebujeme specifikovat vytvořený soubor maskovacích pravidel ve formátu JSON.

Připojit filtr ke službě

Filtr lze aktivovat pouze připojením ke službě. Úprava existující služby pomocí MaxCtrl je podporována pouze některými parametry a přidání filtru mezi ně nepatří. Musíme přidat komponentu filtru do konfiguračního souboru služby MaxScale, abychom v podstatě připojili filtr. V tomto příkladu použijeme filtr „Obfuscates-card“ na naši stávající službu round-robin nazvanou rr-service.

Přejděte do adresáře /var/lib/maxscale/maxscale.cnf.d a najděte rr-service.cnf, otevřete jej pomocí textového editoru a přidejte následující řádek:

filters=Obfuscates-card

K načtení nové změny je vyžadován restart MaxScale:

$ systemctl restart maxscale

K otestování filtru použijeme klienta MariaDB a porovnáme výstup připojením ke dvěma různým službám. Naše služba rw je připojena k posluchači naslouchajícímu na portu 3306 bez nakonfigurovaných filtrů. Měli bychom tedy vidět nefiltrovanou odpověď z 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 |
+----+-----------+-----------------+-------------+-----------+---------+

Při připojování k naslouchacímu procesu rr-service na portu 3307, který je konfigurován pomocí našeho filtru, je naše hodnota „card_no“ zatemněna nesmyslným výstupem:

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

Toto filtrování provádí MaxScale podle pravidel pro shody v masking.json, která jsme vytvořili dříve.

Seznam filtrů

Chcete-li vypsat všechny vytvořené filtry, použijte příkaz "list filters":

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

Ve výše uvedených příkladech jsme vytvořili 3 filtry. Se službou je však spojen pouze filtr Obfuscates-card.

Pro podrobné zobrazení všech služeb:

maxctrl: show filters

Nebo pokud chcete ukázat konkrétní službu:

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

Smazat filtr

Chcete-li odstranit filtr, musíte se nejprve odpojit od přidružených služeb. Zvažte například následující filtry v MaxScale:

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

Pro filtr qla jej můžeme jednoduše odstranit pomocí následujícího příkazu:

 maxctrl: destroy filter qla
OK

Pro filtr Obfuscates-card však musí být odpojen s rr-service a bohužel to vyžaduje úpravu konfiguračního souboru a restart MaxScale. Přejděte do adresáře /var/lib/maxscale/maxscale.cnf.d a najděte rr-service.cnf, otevřete jej pomocí textového editoru a poté odstraňte následující řádek:

filters=Obfuscates-card

Můžete také odstranit řetězec "Obfuscates-card" z výše uvedeného řádku a nechat řádek "filtry" rovný prázdné hodnotě. Poté soubor uložte a restartujte službu MaxScale, aby se načetly změny:

$ systemctl restart maxscale

Teprve poté můžeme odstranit filtr Obfuscates-card z MaxScale pomocí příkazu "destroy filter":

maxctrl: destroy filter Obfuscates-card
OK

Správa MaxScale

Seznam uživatelů

Chcete-li zobrazit seznam všech uživatelů MaxScale, použijte příkaz "list users":

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

Vytvořte uživatele MaxScale

Ve výchozím nastavení je vytvořený uživatel uživatelem pouze pro čtení:

 maxctrl: create user dev mySecret
OK

Chcete-li vytvořit uživatele správce, zadejte příkaz --type=admin:

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

Smazat uživatele MaxScale

Chcete-li odstranit uživatele, jednoduše použijte příkaz "destroy user":

 maxctrl: destroy user dba
OK

Posledního zbývajícího administrátora nelze odebrat. Než se pokusíte odstranit posledního administrátora, vytvořte náhradního administrátora.

Zobrazit parametry MaxScale

Chcete-li zobrazit všechny načtené parametry pro instanci MaxScale, použijte příkaz "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                                         │
│              │ }                                                                    │
└──────────────┴──────────────────────────────────────────────────────────────────────┘

Změňte parametry MaxScale

  • auth_connect_timeout
  • auth_read_timeout
  • auth_write_timeout
  • admin_auth
  • admin_log_auth_failures
  • pasivní

Zbývající parametry musí být nastaveny v /etc/maxscale.conf, což vyžaduje restart MaxScale, aby se nové změny uplatnily.

GUI MaxScale

MaxGUI je nový nástroj založený na prohlížeči pro konfiguraci a správu MaxScale, představený ve verzi 2.5. Je přístupný přes port 8989 hostitele MaxScale na rozhraní localhost, 127.0.0.1. Ve výchozím nastavení je nutné nastavit admin_secure_gui=true a nakonfigurovat oba parametry admin_ssl_key a admin_ssl_cert. V tomto příspěvku na blogu však povolíme připojení přes prostý HTTP přidáním následujícího řádku pod direktivu [maxctrl] uvnitř /etc/maxscale.cnf:

admin_secure_gui = false

Restartujte službu MaxScale a načtěte změnu:

$ systemctl restart maxscale

Protože grafické uživatelské rozhraní naslouchá na rozhraní localhost, můžeme použít tunelování SSH pro přístup ke grafickému uživatelskému rozhraní z naší místní pracovní stanice:

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

Potom otevřete webový prohlížeč, nasměrujte URL na http://127.0.0.1:8989/ a přihlaste se. MaxGUI používá stejné přihlašovací údaje jako maxctrl, takže výchozí heslo je „admin“ s heslo "mariadb". Z bezpečnostních důvodů byste měli vytvořit nového administrátora se silnějším heslem speciálně pro tento účel. Po přihlášení byste měli vidět řídicí panel MaxGUI, jak je uvedeno níže:

Většina příkazů pro správu MaxCtrl, které jsme ukázali v této sérii blogů, může provádět přímo z tohoto GUI. Pokud kliknete na tlačítko "Vytvořit nový", zobrazí se následující dialog:

Jak vidíte, všechny důležité komponenty MaxScale lze spravovat přímo z GUI, s pěkným intuitivním čistým vzhledem, dělá věci mnohem jednoduššími a přímočařejšími na správu. Například přidružení filtru lze provést přímo z uživatelského rozhraní, aniž by bylo nutné restartovat službu MaxScale, jak je uvedeno v části „Připojit filtr ke službě“ v tomto příspěvku na blogu.

Další informace o tomto novém GUI najdete v této příručce MaxGUI.

Správa protokolování

Zobrazit parametry protokolování

Chcete-li zobrazit parametry protokolování, použijte příkaz "show logging":

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

Upravit parametry protokolování

Všechny výše uvedené parametry protokolování lze konfigurovat pomocí příkazu MaxCtrl za běhu. Například můžeme zapnout log_info pomocí příkazu "alter logging":

maxctrl: alter logging log_info true

Otáčet protokoly

Ve výchozím nastavení poskytuje MaxScale konfigurační soubor rotace protokolů pod /etc/logrotate.d/maxscale_logrotate. Na základě konfigurace rotace protokolů se soubor protokolu měsíčně otáčí a využívá příkaz MaxCtrl „rotate logs“. Okamžitou rotaci protokolu můžeme vynutit pomocí následujícího příkazu:

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

Ověřte pomocí následujícího příkazu:

$ 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

Závěr

Dosáhli jsme konce série nasazení a správy MaxScale pomocí klienta MaxCtrl. V této sérii blogů jsme použili několik různých nejnovějších verzí MaxScale (vzhledem k datu zápisu) a v každé verzi jsme viděli mnoho významných vylepšení.

Sláva týmu MariaDB MaxScale za jejich tvrdou práci při vytváření MaxScale jedním z nejlepších nástrojů pro vyrovnávání zatížení databáze na trhu.


  1. Instalace SQL Server 2017 krok za krokem -2

  2. Nainstalujte SQL Server 2019 na Mac

  3. Vložit data do tabulek propojených cizím klíčem

  4. Příklad Oracle WHILE LOOP