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