MariaDB
 sql >> Baza danych >  >> RDS >> MariaDB

MaxScale Podstawowe zarządzanie przy użyciu MaxCtrl dla klastra MariaDB — część druga

W poprzednim wpisie na blogu omówiliśmy 4 podstawowe komponenty zarządzania przy użyciu klienta wiersza poleceń MaxCtrl. W tym poście na blogu omówimy pozostałą część komponentów MaxScale, które są powszechnie używane w klastrze MariaDB:

  • Zarządzanie filtrami
  • Zarządzanie MaxScale
  • Zarządzanie logowaniem

Wszystkie polecenia w tym poście na blogu są oparte na MaxScale 2.5.3.

Zarządzanie filtrami

Filtr to moduł w MaxScale, który działa jako silnik przetwarzania i routingu dla usługi MaxScale. Filtrowanie odbywa się między połączeniem klienta z MaxScale i połączeniem MaxScale z serwerami baz danych zaplecza. Ta ścieżka (strona klienta MaxScale do rzeczywistych serwerów baz danych) może być uważana za potok, filtry można następnie umieścić w tym potoku w celu monitorowania, modyfikowania, kopiowania lub blokowania treści, które przez nią przepływają.

Istnieje wiele filtrów, które można zastosować w celu rozszerzenia możliwości przetwarzania usługi MaxScale, jak pokazano w poniższej tabeli:

Nazwa filtra

Opis

Binlog

Wybiórczo replikuje zdarzenia dziennika binarnego na serwery podrzędne w połączeniu z usługą binlogrouter.

Pamięć podręczna

Prosta pamięć podręczna, która może buforować wyniki SELECT, dzięki czemu kolejne identyczne SELECTy są obsługiwane bezpośrednio przez MaxScale, bez kierowania zapytań do żadnego serwer.

Spójny odczyt krytyczny

Pozwala na wykonywanie spójnych krytycznych odczytów za pomocą MaxScale, jednocześnie umożliwiając skalowanie odczytów niekrytycznych.

Zapora bazy danych

Blokuje zapytania pasujące do zestawu reguł. Ten filtr należy postrzegać jako najlepsze rozwiązanie przeznaczone do ochrony przed przypadkowym niewłaściwym użyciem, a nie złośliwymi atakami.

Wskazówka

Dodaje wskazówki dotyczące routingu do usługi, instruując router, aby skierował zapytanie do określonego typu serwera.

Wstaw strumień

Konwertuje zbiorcze wstawki na strumienie danych CSV, które są zużywane przez serwer zaplecza za pośrednictwem mechanizmu LOAD DATA LOCAL INFILE

Lua

Wywołuje zestaw funkcji w skrypcie Lua.

Maskowanie

Zaciemnia zwróconą wartość konkretnej kolumny

Maksymalne wiersze

Ograniczanie liczby wierszy, które polecenie SELECT, przygotowana instrukcja lub procedura składowana może zwrócić do aplikacji klienckiej.

Serwer nazwany

Kieruje zapytania do serwerów na podstawie dopasowań wyrażeń regularnych (regex).

Dziennik zapytań wszystko

Zapisuje treść zapytania do pliku w formacie CSV.

Wyrażenie regularne

Przepisuje treść zapytania przy użyciu dopasowań wyrażeń regularnych i podstawienia tekstu.

Koszulki

Tworzenie kopii żądań od klienta i wysyłanie kopii do innej usługi w ramach MariaDB MaxScale.

Przepustnica

Zastępuje i rozszerza funkcjonalność limit_queries filtra zapory bazy danych

Góra

Monitoruje wydajność zapytania wybranej instrukcji SQL, która przechodzi przez filtr.

Monitorowanie wydajności transakcji

Monitoruje każdą instrukcję SQL przechodzącą przez filtr, pogrupowaną według transakcji, w celu analizy wydajności transakcji.

Każdy filtr ma swoje własne sposoby konfiguracji. Filtry są zwykle dołączane do usługi MaxScale. Na przykład filtr binlog można zastosować do usługi binlogrouter, aby replikować tylko podzbiór danych na serwerze podrzędnym, co może znacznie zmniejszyć miejsce na dysku dla dużych tabel. Zapoznaj się z dokumentacją filtrów MaxScale, aby dowiedzieć się, jak prawidłowo skonfigurować parametry dla odpowiedniego filtra.

Utwórz filtr

Każdy filtr MaxScale ma swój własny sposób konfiguracji. W tym przykładzie stworzymy filtr maskujący, aby zamaskować nasze poufne dane dla kolumny „card_no” w naszej tabeli „credit_cards”. Maskowanie wymaga pliku reguł zapisanego w formacie JSON. Najpierw utwórz katalog do przechowywania naszych plików reguł:

$ mkdir /var/lib/maxscale/rules

Następnie utwórz plik tekstowy:

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

Określ linie jak poniżej:

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

Powyższe proste zasady po prostu zaciemnią dane wyjściowe kolumny card_no dla dowolnych tabel, aby chronić poufne dane, które będą widoczne dla klienta MariaDB.

Po utworzeniu pliku reguły możemy utworzyć filtr za pomocą następującego polecenia:

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

Zauważ, że niektóre filtry wymagają innych parametrów. Jeśli chodzi o ten filtr maskujący, podstawowym parametrem jest „rules”, gdzie musimy określić utworzony plik reguł maskowania w formacie JSON.

Dołącz filtr do usługi

Filtr można aktywować tylko przez dołączenie go do usługi. Modyfikowanie istniejącej usługi za pomocą MaxCtrl jest obsługiwane tylko przez niektóre parametry, a dodanie filtra nie jest jednym z nich. Musimy dodać składnik filtra w pliku konfiguracyjnym usługi MaxScale, aby w zasadzie dołączyć filtr. W tym przykładzie zastosujemy filtr „Obfuscates-card” do naszej istniejącej usługi round-robin o nazwie rr-service.

Przejdź do katalogu /var/lib/maxscale/maxscale.cnf.d i znajdź rr-service.cnf, otwórz go za pomocą edytora tekstu, a następnie dodaj następujący wiersz:

filters=Obfuscates-card

Aby wczytać nową zmianę, wymagane jest ponowne uruchomienie MaxScale:

$ systemctl restart maxscale

Aby przetestować filtr, użyjemy klienta MariaDB i porównamy dane wyjściowe, łącząc się z dwiema różnymi usługami. Nasza usługa rw jest dołączona do słuchacza nasłuchującego na porcie 3306, bez skonfigurowanych żadnych filtrów. Dlatego powinniśmy zobaczyć niefiltrowaną odpowiedź 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 |
+----+-----------+-----------------+-------------+-----------+---------+

Podczas łączenia się z listenerem usługi rr na porcie 3307, który został skonfigurowany za pomocą naszego filtra, nasza wartość "card_no" jest zaciemniana przez bezużyteczne wyjście:

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

To filtrowanie jest wykonywane przez MaxScale, zgodnie z regułami dopasowania w masking.json, które stworzyliśmy wcześniej.

Lista filtrów

Aby wyświetlić listę wszystkich utworzonych filtrów, użyj polecenia „list filters”:

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

W powyższych przykładach stworzyliśmy 3 filtry. Jednak tylko filtr kart zaciemniających jest połączony z usługą.

Aby wyświetlić szczegóły wszystkich usług:

maxctrl: show filters

Lub jeśli chcesz pokazać konkretną usługę:

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

Usuń filtr

Aby usunąć filtr, należy najpierw odłączyć się od powiązanych usług. Rozważmy na przykład następujące filtry w MaxScale:

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

W przypadku filtra qla możemy po prostu użyć następującego polecenia, aby go usunąć:

 maxctrl: destroy filter qla
OK

Jednak filtr karty Obfuscates musi być odłączony od usługi rr i niestety wymaga to modyfikacji pliku konfiguracyjnego i restartu MaxScale. Przejdź do katalogu /var/lib/maxscale/maxscale.cnf.d i znajdź rr-service.cnf, otwórz go w edytorze tekstu, a następnie usuń następujący wiersz:

filters=Obfuscates-card

Możesz również usunąć ciąg „Obfuscates-card” z powyższej linii i pozwolić, aby wiersz „filtry” był równy pustej wartości. Następnie zapisz plik i uruchom ponownie usługę MaxScale, aby załadować zmiany:

$ systemctl restart maxscale

Dopiero wtedy możemy usunąć filtr Obfuscates-card z MaxScale za pomocą polecenia „destroy filter”:

maxctrl: destroy filter Obfuscates-card
OK

Zarządzanie maksymalną skalą

Lista użytkowników

Aby wyświetlić listę wszystkich użytkowników MaxScale, użyj polecenia „list users”:

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

Utwórz użytkownika MaxScale

Domyślnie utworzony użytkownik jest użytkownikiem tylko do odczytu:

 maxctrl: create user dev mySecret
OK

Aby utworzyć użytkownika administratora, określ --type=admin polecenie:

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

Usuń użytkownika MaxScale

Aby usunąć użytkownika, po prostu użyj polecenia „zniszcz użytkownika”:

 maxctrl: destroy user dba
OK

Nie można usunąć ostatniego pozostałego użytkownika administracyjnego. Utwórz zastępczego użytkownika administracyjnego przed próbą usunięcia ostatniego użytkownika administracyjnego.

Pokaż parametry MaxScale

Aby wyświetlić wszystkie załadowane parametry dla instancji MaxScale, użyj polecenia „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                                         │
│              │ }                                                                    │
└──────────────┴──────────────────────────────────────────────────────────────────────┘

Zmień parametry MaxScale

  • auth_connect_timeout
  • auth_read_timeout
  • auth_write_timeout
  • admin_auth
  • admin_log_auth_failures
  • pasywny

Pozostałe parametry muszą być ustawione w /etc/maxscale.conf, co wymaga ponownego uruchomienia MaxScale, aby zastosować nowe zmiany.

GUI MaxScale

MaxGUI to nowe narzędzie oparte na przeglądarce do konfiguracji i zarządzania MaxScale, wprowadzone w wersji 2.5. Jest dostępny przez port 8989 hosta MaxScale na interfejsie localhost, 127.0.0.1. Domyślnie wymagane jest ustawienie admin_secure_gui=true i skonfigurowanie parametrów admin_ssl_key i admin_ssl_cert. Jednak w tym poście na blogu zamierzamy zezwolić na łączność przez zwykły HTTP, dodając następujący wiersz pod dyrektywą [maxctrl] wewnątrz /etc/maxscale.cnf:

admin_secure_gui = false

Uruchom ponownie usługę MaxScale, aby załadować zmianę:

$ systemctl restart maxscale

Ponieważ GUI nasłuchuje na interfejsie hosta lokalnego, możemy użyć tunelowania SSH, aby uzyskać dostęp do GUI z naszej lokalnej stacji roboczej:

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

Następnie otwórz przeglądarkę internetową, wskaż adres URL http://127.0.0.1:8989/ i zaloguj się. MaxGUI używa tych samych danych uwierzytelniających, co maxctrl, dlatego domyślne hasło to „admin” z hasło „mariadb”. Ze względów bezpieczeństwa należy utworzyć nowego administratora z silniejszym hasłem specjalnie do tego celu. Po zalogowaniu powinieneś zobaczyć panel MaxGUI, jak poniżej:

Większość poleceń zarządzania MaxCtrl, które pokazaliśmy w tej serii blogów, może być wykonywane bezpośrednio z tego GUI. Jeśli klikniesz przycisk „Utwórz nowy”, pojawi się następujące okno dialogowe:

Jak widać, wszystkimi ważnymi komponentami MaxScale można zarządzać bezpośrednio z GUI, z ładnym, intuicyjnym, czystym wyglądem, znacznie ułatwia zarządzanie. Na przykład powiązanie filtra można wykonać bezpośrednio z interfejsu użytkownika, bez konieczności ponownego uruchamiania usługi MaxScale, jak pokazano w sekcji „Dołącz filtr do usługi” w tym poście na blogu.

Aby uzyskać więcej informacji na temat tego nowego GUI, zapoznaj się z tym przewodnikiem MaxGUI.

Zarządzanie rejestrowaniem

Pokaż parametry rejestrowania

Aby wyświetlić parametry rejestrowania, użyj polecenia „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      │
│                    │     }                          │
│                    │ }                              │
└────────────────────┴────────────────────────────────┘

Edytuj parametry rejestrowania

Wszystkie parametry rejestrowania, jak pokazano powyżej, można skonfigurować za pomocą polecenia MaxCtrl w czasie wykonywania. Na przykład możemy włączyć log_info za pomocą polecenia „zmień rejestrowanie”:

maxctrl: alter logging log_info true

Obróć dzienniki

Domyślnie MaxScale udostępnia plik konfiguracyjny obracania dziennika w /etc/logrotate.d/maxscale_logrotate. Na podstawie konfiguracji rotacji dzienników plik dziennika jest obracany co miesiąc i korzysta z polecenia „obróć dzienniki” MaxCtrl. Możemy wymusić natychmiastową rotację dziennika za pomocą następującego polecenia:

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

Zweryfikuj za pomocą następującego polecenia:

$ 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

Wnioski

Doszliśmy do końca serii wdrażania i zarządzania MaxScale przy użyciu klienta MaxCtrl. W tej serii blogów użyliśmy kilku różnych najnowszych wersji MaxScale (w stosunku do daty napisania) i zauważyliśmy wiele znaczących ulepszeń w każdej wersji.

Podziękowania dla zespołu MariaDB MaxScale za ich ciężką pracę nad uczynieniem MaxScale jednym z najlepszych narzędzi do równoważenia obciążenia bazy danych na rynku.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak działa REVERSE() w MariaDB

  2. Zapowiedź ClusterControl 1.7.3:ulepszona obsługa PostgreSQL i nowe opcje wdrażania w chmurze

  3. Jak działa ASIN() w MariaDB

  4. Jak działa RTRIM_ORACLE() w MariaDB

  5. MariaDB JSON_DEPTH() Objaśnienie