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. |
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.