MariaDB
 sql >> база данни >  >> RDS >> MariaDB

Основно управление на MaxScale с помощта на MaxCtrl за MariaDB клъстер - част втора

В предишната публикация в блога разгледахме 4 основни компонента за управление с помощта на клиента от командния ред MaxCtrl. В тази публикация в блога ще покрием останалата част от компонентите MaxScale, които обикновено се използват в MariaDB клъстер:

  • Управление на филтри
  • Управление на MaxScale
  • Управление на регистриране

Всички команди в тази публикация в блога са базирани на MaxScale 2.5.3.

Управление на филтри

Филтърът е модул в MaxScale, който действа като машина за обработка и маршрутизиране за услуга MaxScale. Филтрирането се случва между клиентската връзка към MaxScale и връзката на MaxScale към сървърите на базата данни. Този път (от клиентската страна на MaxScale към действителните сървъри на база данни) може да се счита за тръбопровод, след това в този тръбопровод могат да се поставят филтри, за да наблюдават, променят, копират или блокират съдържанието, което преминава през него.

Има много филтри, които могат да бъдат приложени за разширяване на възможностите за обработка на услугата MaxScale, както е показано в следната таблица:

Име на филтъра

Описание

Binlog

Селективно репликира бинарните регистрационни събития към подчинени сървъри, комбинирани заедно с услуга binlogrouter.

Кеш

Прост кеш, който е в състояние да кешира резултата от SELECTs, така че следващите идентични SELECT да се обслужват директно от MaxScale, без заявките да се насочват към сървър.

Последователно критично четене

Позволява извършването на последователни критични четения чрез MaxScale, като същевременно позволява мащабиране на некритични четения.

Защитна стена на базата данни

Блокира заявки, които съответстват на набор от правила. Този филтър трябва да се разглежда като най-доброто решение, предназначено за защита срещу случайна злоупотреба, а не от злонамерени атаки.

Съвет

Добавя намеци за маршрутизиране към услуга, като инструктира рутера да насочи заявка към определен тип сървър.

Вмъкване на поток

Преобразува груповите вмъквания в CSV потоци от данни, които се консумират от бекенд сървъра чрез механизма LOAD DATA LOCAL INFILE

Lua

Извиква набор от функции в Lua скрипт.

Маскиране

Обфуцира върнатата стойност на конкретна колона

Maxrows

Ограничаване на броя на редовете, които SELECT, подготвен израз или съхранена процедура може да върне на клиентското приложение.

Сървър с име

Насочва заявки към сървъри въз основа на съвпадения на регулярни изрази (регулярни изрази).

Всички регистрационни файлове на заявките

Регистрира съдържание на заявка във файл във формат CSV.

Регулярен израз

Пренаписва съдържанието на заявката, използвайки съвпадения на регулярни изрази и заместване на текст.

Таничка

Направете копия на заявки от клиента и изпратете копията до друга услуга в рамките на MariaDB MaxScale.

Дросел

Заменя и разширява функционалността на limit_queries на филтъра на защитната стена на базата данни

Нагоре

Наблюдава ефективността на заявката на избрания SQL израз, който преминава през филтъра.

Мониторинг на ефективността на транзакциите

Наблюдава всеки SQL израз, който преминава през филтъра, групиран според транзакцията, за анализ на ефективността на транзакциите.

Всеки филтър има свои собствени начини за конфигуриране. Филтрите обикновено са свързани към услуга MaxScale. Например, binlog филтър може да се приложи към услугата binlogrouter, за да репликира само подмножество от данни на подчинен сървър, което може значително да намали дисковото пространство за огромни таблици. Разгледайте документацията на филтрите MaxScale за правилния начин за конфигуриране на параметрите за съответния филтър.

Създайте филтър

Всеки MaxScale филтър има свой собствен начин да бъде конфигуриран. В този пример ще създадем маскиращ филтър, за да маскираме нашите чувствителни данни за колона „card_no“ в нашата таблица „credit_cards“. Маскирането изисква файл с правила, написан във формат JSON. Първо, създайте директория за хостване на нашите файлове с правила:

$ mkdir /var/lib/maxscale/rules

След това създайте текстов файл:

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

Посочете редовете по-долу:

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

Горните прости правила просто ще замъглят изхода на колона card_no за всякакви таблици, за да защитят чувствителните данни, които да бъдат видени от клиента на MariaDB.

След като файлът с правила е създаден, можем да създадем филтъра, като използваме следната команда:

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

Имайте предвид, че някои филтри изискват различни параметри. Що се отнася до този маскиращ филтър, основният параметър е „правила“, където трябва да посочим създадения файл с правила за маскиране във формат JSON.

Прикачете филтър към услуга

Филтър може да се активира само като се прикачи към услуга. Промяната на съществуваща услуга с помощта на MaxCtrl се поддържа само от някои параметри и добавянето на филтър не е един от тях. Трябва да добавим филтърния компонент под конфигурационния файл на услугата на MaxScale, за да прикачим основно филтъра. В този пример ще приложим филтъра „Obfuscates-card“ към нашата съществуваща кръгова услуга, наречена rr-service.

Отидете в директорията /var/lib/maxscale/maxscale.cnf.d и намерете rr-service.cnf, отворете го с текстов редактор и след това добавете следния ред:

filters=Obfuscates-card

Необходимо е рестартиране на MaxScale, за да се зареди новата промяна:

$ systemctl restart maxscale

За да тестваме филтъра, ще използваме клиент на MariaDB и ще сравним изхода, като се свържем с две различни услуги. Нашата rw-услуга е свързана към слушател, който слуша на порт 3306, без никакви конфигурирани филтри. Следователно трябва да видим нефилтрирания отговор от 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 |
+----+-----------+-----------------+-------------+-----------+---------+

Когато се свързвате към слушателя на rr-service на порт 3307, който е конфигуриран с нашия филтър, нашата стойност "card_no" се закрива с безсмислен изход:

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

Това филтриране се извършва от MaxScale, следвайки правилата за съвпадение в masking.json, които създадохме по-рано.

Списъчни филтри

За да изброите всички създадени филтри, използвайте командата "списък на филтрите":

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

В горните примери сме създали 3 филтъра. Въпреки това, само филтърът Obfuscates-card е свързан с услуга.

За да покажете подробно всички услуги:

maxctrl: show filters

Или ако искате да покажете конкретна услуга:

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

Изтриване на филтър

За да изтриете филтър, първо трябва да прекратите връзката със свързаните услуги. Например, помислете за следните филтри в MaxScale:

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

За qla филтъра можем просто да използваме следната команда, за да го изтрием:

 maxctrl: destroy filter qla
OK

Въпреки това, за филтъра Obfuscates-card, той трябва да бъде прекъснат с rr-service и за съжаление това изисква промяна на конфигурационния файл и рестартиране на MaxScale. Отидете в директорията /var/lib/maxscale/maxscale.cnf.d и намерете rr-service.cnf, отворете го с текстов редактор и след това премахнете следния ред:

filters=Obfuscates-card

Можете също да премахнете низа "Obfuscates-card" от горния ред и да оставите ред "filters" да е равен на празна стойност. След това запазете файла и рестартирайте услугата MaxScale, за да заредите промените:

$ systemctl restart maxscale

Само тогава можем да премахнем филтъра на Obfuscates-card от MaxScale, като използваме командата "унищожи филтър":

maxctrl: destroy filter Obfuscates-card
OK

Управление на MaxScale

Списък с потребители

За да изброите всички потребители на MaxScale, използвайте командата "списък потребители":

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

Създайте MaxScale потребител

По подразбиране създаденият потребител е потребител само за четене:

 maxctrl: create user dev mySecret
OK

За да създадете администратор на потребител, посочете командата --type=admin:

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

Изтриване на потребител на MaxScale

За да изтриете потребител, просто използвайте командата „унищожи потребител“:

 maxctrl: destroy user dba
OK

Последният останал администраторски потребител не може да бъде премахнат. Създайте заместващ администратор, преди да се опитате да премахнете последния администраторски потребител.

Показване на параметрите на MaxScale

За да покажете всички заредени параметри за модела MaxScale, използвайте командата "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                                         │
│              │ }                                                                    │
└──────────────┴──────────────────────────────────────────────────────────────────────┘

Промяна на параметрите на MaxScale

  • auth_connect_timeout
  • auth_read_timeout
  • auth_write_timeout
  • admin_auth
  • admin_log_auth_failures
  • пасивен

Останалите параметри трябва да бъдат зададени в /etc/maxscale.conf, което изисква рестартиране на MaxScale за прилагане на новите промени.

GUI на MaxScale

MaxGUI е нов базиран на браузър инструмент за конфигуриране и управление на MaxScale, въведен във версия 2.5. Достъпен е през порт 8989 на хоста MaxScale на интерфейса на локалния хост, 127.0.0.1. По подразбиране се изисква да зададете admin_secure_gui=true и да конфигурирате както параметрите admin_ssl_key, така и admin_ssl_cert. В тази публикация в блога обаче ще разрешим свързаност чрез обикновен HTTP, като добавим следния ред под директивата [maxctrl] в /etc/maxscale.cnf:

admin_secure_gui = false

Рестартирайте услугата MaxScale, за да заредите промяната:

$ systemctl restart maxscale

Тъй като GUI слуша интерфейса на localhost, можем да използваме SSH тунелиране за достъп до GUI от нашата локална работна станция:

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

След това отворете уеб браузър, насочете URL към http://127.0.0.1:8989/ и влезте. MaxGUI използва същите идентификационни данни като maxctrl, така че паролата по подразбиране е "admin" с паролата "mariadb". От съображения за сигурност трябва да създадете нов потребител на администратор с по-силна парола специално за тази цел. След като влезете, трябва да видите таблото за управление на MaxGUI, както следва:

Повечето от командите за управление на MaxCtrl, които показахме в тази серия от блогове, могат да се изпълнява директно от този GUI. Ако щракнете върху бутона „Създаване на нов“, ще ви бъде представен следният диалогов прозорец:

Както можете да видите, всички важни компоненти на MaxScale могат да се управляват директно от GUI, с приятен интуитивен изчистен вид, прави нещата много по-прости и по-лесни за управление. Например, свързването на филтър може да стане директно от потребителския интерфейс, без да е необходимо да рестартирате услугата MaxScale, както е показано в раздела „Прикачване на филтър към услуга“ в тази публикация в блога.

За повече информация относно този нов графичен интерфейс, вижте това ръководство за MaxGUI.

Управление на регистрация

Показване на параметрите за регистриране

За да покажете параметрите за регистриране, използвайте командата "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      │
│                    │     }                          │
│                    │ }                              │
└────────────────────┴────────────────────────────────┘

Редактиране на параметрите за регистриране

Всички параметри за регистриране, както е показано по-горе, могат да бъдат конфигурирани чрез командата MaxCtrl по време на изпълнение. Например, можем да включим log_info, като използваме командата "alter logging":

maxctrl: alter logging log_info true

Завъртане на регистрационните файлове

По подразбиране MaxScale предоставя конфигурационен файл за завъртане на регистрационни файлове под /etc/logrotate.d/maxscale_logrotate. Въз основа на конфигурацията на ротацията на регистрационните файлове, регистрационният файл се завърта ежемесечно и използва командата на MaxCtrl "rotate logs". Можем да принудим ротацията на журнала да се случи незабавно със следната команда:

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

Проверете със следната команда:

$ 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

Заключение

Стигнахме до края на поредицата от внедряване и управление на MaxScale с помощта на клиента MaxCtrl. В тази серия от блогове използвахме няколко различни най-нови версии на MaxScale (спрямо датата на писане) и видяхме много значителни подобрения във всяка версия.

Слава на екипа на MariaDB MaxScale за тяхната упорита работа, за да направи MaxScale един от най-добрите инструменти за балансиране на натоварването на базата данни на пазара.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Използване на MariaDB Audit Plugin за сигурност на базата данни

  2. MariaDB LENGTHB() Обяснено

  3. Върнете само числови стойности в MariaDB

  4. MySQL репликация с ProxySQL на WHM/cPanel сървъри:Част втора

  5. Мигриране на Amazon RDS (MySQL или MariaDB) към On-Prem сървър