MariaDB
 sql >> Teknologi Basis Data >  >> RDS >> MariaDB

Manajemen Dasar MaxScale Menggunakan MaxCtrl untuk Cluster MariaDB - Bagian Kedua

Dalam posting blog sebelumnya, kita telah membahas 4 komponen manajemen dasar menggunakan klien baris perintah MaxCtrl. Dalam posting blog ini, kita akan membahas bagian yang tersisa dari komponen MaxScale yang biasanya digunakan dalam Cluster MariaDB:

  • Pengelolaan filter
  • Manajemen MaxScale
  • Manajemen pencatatan

Semua perintah dalam posting blog ini didasarkan pada MaxScale 2.5.3.

Manajemen Filter

Filter adalah modul di MaxScale yang bertindak sebagai mesin pemrosesan dan perutean untuk layanan MaxScale. Pemfilteran terjadi antara koneksi klien ke MaxScale dan koneksi MaxScale ke server database backend. Jalur ini (sisi klien MaxScale keluar ke server database sebenarnya) dapat dianggap sebagai jalur pipa, filter kemudian dapat ditempatkan di jalur tersebut untuk memantau, memodifikasi, menyalin, atau memblokir konten yang mengalir melaluinya.

Ada banyak filter yang dapat diterapkan untuk memperluas kemampuan pemrosesan layanan MaxScale, seperti yang ditunjukkan pada tabel berikut:

Nama Filter

Deskripsi

Binlog

Secara selektif mereplikasi peristiwa log biner ke server slave yang digabungkan bersama dengan layanan binlogrouter.

Tembolok

Cache sederhana yang mampu menyimpan hasil SELECT, sehingga SELECT identik berikutnya dilayani langsung oleh MaxScale, tanpa kueri dirutekan ke server.

Bacaan Kritis yang Konsisten

Memungkinkan pembacaan kritis yang konsisten dilakukan melalui MaxScale sambil tetap mengizinkan penskalaan pembacaan non-kritis.

Firewall Basis Data

Memblokir kueri yang cocok dengan serangkaian aturan. Filter ini harus dilihat sebagai solusi upaya terbaik yang dimaksudkan untuk melindungi dari penyalahgunaan yang tidak disengaja daripada serangan berbahaya.

Petunjuk

Menambahkan petunjuk perutean ke layanan, menginstruksikan perute untuk merutekan kueri ke jenis server tertentu.

Sisipkan Aliran

Mengonversi penyisipan massal menjadi aliran data CSV yang digunakan oleh server backend melalui mekanisme LOAD DATA LOCAL INFILE

Lua

Memanggil sekumpulan fungsi dalam skrip Lua.

Masker

Mengaburkan nilai yang dikembalikan dari kolom tertentu

Maksrow

Membatasi jumlah baris yang dapat dikembalikan oleh SELECT, pernyataan yang disiapkan, atau prosedur tersimpan ke aplikasi klien.

Server Bernama

Merutekan kueri ke server berdasarkan kecocokan ekspresi reguler (regex).

Log Kueri Semua

Mencatat konten kueri ke file dalam format CSV.

Regeks

Menulis ulang konten kueri menggunakan pencocokan ekspresi reguler dan substitusi teks.

Tee

Buat salinan permintaan dari klien dan kirim salinannya ke layanan lain dalam MariaDB MaxScale.

Throttle

Mengganti dan memperluas fungsionalitas limit_queries filter Database Firewall

Atas

Memantau kinerja kueri dari pernyataan SQL yang dipilih yang melewati filter.

Pemantauan Kinerja Transaksi

Memantau setiap pernyataan SQL yang melewati filter, dikelompokkan sesuai transaksi, untuk analisis kinerja transaksi.

Setiap filter memiliki cara sendiri untuk mengkonfigurasi. Filter biasanya dilampirkan ke layanan MaxScale. Misalnya, filter binlog dapat diterapkan ke layanan binlogrouter, untuk hanya mereplikasi sebagian data ke server budak yang dapat sangat mengurangi ruang disk untuk tabel besar. Lihat dokumentasi filter MaxScale untuk mengetahui cara yang benar dalam mengonfigurasi parameter untuk filter yang sesuai.

Buat Filter

Setiap filter MaxScale memiliki caranya sendiri untuk dikonfigurasi. Dalam contoh ini, kita akan membuat filter penyamaran, untuk menutupi data sensitif kita untuk kolom "card_no" di tabel "credit_cards". Masking membutuhkan file aturan, yang ditulis dalam format JSON. Pertama, buat direktori untuk meng-host file aturan kami:

$ mkdir /var/lib/maxscale/rules

Kemudian, buat file teks:

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

Tentukan baris seperti di bawah ini:

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

Aturan sederhana di atas hanya akan mengaburkan output kolom card_no untuk tabel apa pun, untuk melindungi data sensitif agar dapat dilihat oleh klien MariaDB.

Setelah file aturan dibuat, kita dapat membuat filter, menggunakan perintah berikut:

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

Perhatikan bahwa beberapa filter memerlukan parameter yang berbeda. Untuk filter masking ini, parameter dasarnya adalah "rules", di mana kita perlu menentukan file aturan masking yang dibuat dalam format JSON.

Lampirkan Filter ke Layanan

Filter hanya dapat diaktifkan dengan melampirkannya ke layanan. Memodifikasi layanan yang ada menggunakan MaxCtrl hanya didukung oleh beberapa parameter, dan menambahkan filter bukan salah satunya. Kita harus menambahkan komponen filter di bawah file konfigurasi layanan MaxScale untuk melampirkan filter. Dalam contoh ini, kita akan menerapkan filter "Obfuscates-card" ke layanan round-robin yang ada yang disebut rr-service.

Buka direktori /var/lib/maxscale/maxscale.cnf.d dan temukan rr-service.cnf, buka dengan editor teks lalu tambahkan baris berikut:

filters=Obfuscates-card

Restart MaxScale diperlukan untuk memuat perubahan baru:

$ systemctl restart maxscale

Untuk menguji filter, kami akan menggunakan klien MariaDB dan membandingkan output dengan menghubungkan ke dua layanan yang berbeda. Layanan rw kami dilampirkan ke pendengar yang mendengarkan pada port 3306, tanpa filter apa pun yang dikonfigurasi. Oleh karena itu, kita akan melihat respons tanpa filter dari 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 |
+----+-----------+-----------------+-------------+-----------+---------+

Saat menyambungkan ke rr-service listener pada port 3307, yang dikonfigurasi dengan filter kami, nilai "card_no" kami dikaburkan dengan keluaran omong kosong:

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

Pemfilteran ini dilakukan oleh MaxScale, mengikuti aturan pencocokan di dalam masking.json yang telah kita buat sebelumnya.

Filter Daftar

Untuk membuat daftar semua filter yang dibuat, gunakan perintah "daftar filter":

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

Dalam contoh di atas, kami telah membuat 3 filter. Namun, hanya filter kartu Obfuscate yang ditautkan ke layanan.

Untuk menampilkan semua layanan secara detail:

maxctrl: show filters

Atau jika Anda ingin menampilkan layanan tertentu:

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

Menghapus Filter

Untuk menghapus filter, seseorang harus memutuskan tautan dari layanan terkait terlebih dahulu. Misalnya, pertimbangkan filter berikut di MaxScale:

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

Untuk filter qla, kita cukup menggunakan perintah berikut untuk menghapusnya:

 maxctrl: destroy filter qla
OK

Namun, untuk filter kartu Obfuscates, itu harus diputuskan dengan rr-service dan sayangnya, ini memerlukan modifikasi file konfigurasi dan MaxScale restart. Buka direktori /var/lib/maxscale/maxscale.cnf.d dan temukan rr-service.cnf, buka dengan editor teks lalu hapus baris berikut:

filters=Obfuscates-card

Anda juga dapat menghapus string "Obfuscates-card" dari baris di atas dan membiarkan baris "filters" sama dengan nilai kosong. Kemudian, simpan file dan mulai ulang layanan MaxScale untuk memuat perubahan:

$ systemctl restart maxscale

Baru setelah itu kita dapat menghapus filter kartu Obfuscates dari MaxScale menggunakan perintah "destroy filter":

maxctrl: destroy filter Obfuscates-card
OK

Manajemen Skala Maks

Mencantumkan Pengguna

Untuk membuat daftar semua pengguna MaxScale, gunakan perintah "daftar pengguna":

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

Buat Pengguna MaxScale

Secara default, pengguna yang dibuat adalah pengguna hanya-baca:

 maxctrl: create user dev mySecret
OK

Untuk membuat pengguna administrator, tentukan perintah --type=admin:

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

Menghapus Pengguna MaxScale

Untuk menghapus pengguna, cukup gunakan perintah "hancurkan pengguna":

 maxctrl: destroy user dba
OK

Pengguna administratif terakhir yang tersisa tidak dapat dihapus. Buat pengguna administratif pengganti sebelum mencoba menghapus pengguna administratif terakhir.

Tampilkan Parameter Skala Maks

Untuk menampilkan semua parameter yang dimuat untuk instance MaxScale, gunakan perintah "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                                         │
│              │ }                                                                    │
└──────────────┴──────────────────────────────────────────────────────────────────────┘

Ubah parameter MaxScale

  • auth_connect_timeout
  • auth_read_timeout
  • auth_write_timeout
  • admin_auth
  • admin_log_auth_failures
  • pasif

Parameter lainnya harus diatur di dalam /etc/maxscale.conf, yang memerlukan restart MaxScale untuk menerapkan perubahan baru.

GUI Skala Maks

MaxGUI adalah alat berbasis browser baru untuk mengonfigurasi dan mengelola MaxScale, diperkenalkan di versi 2.5. Ini dapat diakses melalui port 8989 dari host MaxScale pada antarmuka localhost, 127.0.0.1. Secara default, diperlukan untuk mengatur admin_secure_gui=true dan mengkonfigurasi parameter admin_ssl_key dan admin_ssl_cert. Namun, dalam posting blog ini, kami akan mengizinkan konektivitas melalui HTTP biasa dengan menambahkan baris berikut di bawah direktif [maxctrl] di dalam /etc/maxscale.cnf:

admin_secure_gui = false

Mulai ulang layanan MaxScale untuk memuat perubahan:

$ systemctl restart maxscale

Karena GUI mendengarkan pada antarmuka localhost, kita dapat menggunakan tunneling SSH untuk mengakses GUI dari stasiun kerja lokal kita:

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

Kemudian, buka browser web, arahkan URL ke http://127.0.0.1:8989/ dan masuk. MaxGUI menggunakan kredensial yang sama dengan maxctrl, jadi kata sandi default adalah "admin" dengan kata sandi "mariadb". Untuk tujuan keamanan, seseorang harus membuat pengguna admin baru dengan kata sandi yang lebih kuat khusus untuk tujuan ini. Setelah masuk, Anda akan melihat dasbor MaxGUI seperti di bawah ini:

Sebagian besar perintah manajemen MaxCtrl yang telah kami tampilkan di seri blog ini dapat dilakukan langsung dari GUI ini. Jika Anda mengklik tombol "Buat Baru", Anda akan disajikan dialog berikut:

Seperti yang Anda lihat, semua komponen MaxScale yang penting dapat dikelola secara langsung dari GUI, dengan tampilan bersih intuitif yang bagus, membuat segalanya lebih sederhana dan lebih mudah untuk dikelola. Misalnya, mengaitkan filter dapat dilakukan langsung dari UI, tanpa perlu memulai ulang layanan MaxScale, seperti yang ditunjukkan di bagian "Lampirkan filter ke layanan" di entri blog ini.

Untuk informasi lebih lanjut tentang GUI baru ini, lihat panduan MaxGUI ini.

Manajemen Logging

Tampilkan Parameter Logging

Untuk menampilkan parameter logging, gunakan perintah "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      │
│                    │     }                          │
│                    │ }                              │
└────────────────────┴────────────────────────────────┘

Edit Parameter Logging

Semua parameter logging seperti yang ditunjukkan di atas dapat dikonfigurasi melalui perintah MaxCtrl di runtime. Misalnya, kita dapat mengaktifkan log_info dengan menggunakan perintah "alter logging":

maxctrl: alter logging log_info true

Memutar Log

Secara default, MaxScale menyediakan file konfigurasi rotasi log di bawah /etc/logrotate.d/maxscale_logrotate. Berdasarkan konfigurasi rotasi log, file log dirotasi setiap bulan dan menggunakan perintah "rotate logs" MaxCtrl. Kita dapat memaksa rotasi log terjadi segera dengan perintah berikut:

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

Verifikasi dengan perintah berikut:

$ 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

Kesimpulan

Kami telah mencapai akhir dari rangkaian penerapan dan manajemen MaxScale menggunakan klien MaxCtrl. Di seluruh seri blog ini, kami telah menggunakan beberapa versi MaxScale terbaru yang berbeda (relatif terhadap tanggal penulisan) dan kami telah melihat banyak peningkatan signifikan di setiap versi.

Kudos kepada tim MariaDB MaxScale atas kerja keras mereka dalam menjadikan MaxScale salah satu alat penyeimbang beban basis data terbaik di pasar.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana RPAD() Bekerja di MariaDB

  2. Atur Set Karakter dan Susunan Tabel di MariaDB

  3. 4 Cara Mendaftar Semua Tampilan di Database MariaDB

  4. MariaDB JSON_EXISTS() Dijelaskan

  5. Bagaimana POSITION() Bekerja di MariaDB