MariaDB
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> MariaDB

Quản lý cơ bản MaxScale bằng cách sử dụng MaxCtrl cho MariaDB Cluster - Phần thứ hai

Trong bài đăng trên blog trước, chúng ta đã trình bày về 4 thành phần quản lý cơ bản sử dụng máy khách dòng lệnh MaxCtrl. Trong bài đăng blog này, chúng tôi sẽ đề cập đến phần còn lại của các thành phần MaxScale thường được sử dụng trong MariaDB Cluster:

  • Quản lý bộ lọc
  • Quản lý MaxScale
  • Quản lý nhật ký

Tất cả các lệnh trong bài đăng trên blog này đều dựa trên MaxScale 2.5.3.

Quản lý Bộ lọc

Bộ lọc là một mô-đun trong MaxScale hoạt động như một công cụ xử lý và định tuyến cho một dịch vụ MaxScale. Quá trình lọc xảy ra giữa kết nối máy khách tới MaxScale và kết nối MaxScale tới các máy chủ cơ sở dữ liệu phụ trợ. Đường dẫn này (phía máy khách của MaxScale đến các máy chủ cơ sở dữ liệu thực tế) có thể được coi là một đường dẫn, các bộ lọc sau đó có thể được đặt trong đường dẫn đó để theo dõi, sửa đổi, sao chép hoặc chặn nội dung truyền qua đó.

Có nhiều bộ lọc có thể được áp dụng để mở rộng khả năng xử lý của dịch vụ MaxScale, như thể hiện trong bảng sau:

Tên bộ lọc

Mô tả

Binlog

Sao chép có chọn lọc các sự kiện nhật ký nhị phân tới các máy chủ phụ được kết hợp với dịch vụ binlogrouter.

Bộ nhớ đệm

Bộ nhớ đệm đơn giản có khả năng lưu vào bộ nhớ đệm kết quả của các CHỌN, để các CHỌN giống hệt nhau tiếp theo được MaxScale phân phối trực tiếp mà không cần chuyển đến bất kỳ truy vấn nào máy chủ.

Đọc Phê bình Nhất quán

Cho phép thực hiện các lần đọc quan trọng nhất quán thông qua MaxScale trong khi vẫn cho phép chia tỷ lệ các lần đọc không quan trọng.

Tường lửa cơ sở dữ liệu

Chặn các truy vấn phù hợp với một bộ quy tắc. Bộ lọc này nên được xem như một giải pháp nỗ lực tốt nhất nhằm bảo vệ khỏi việc vô tình lạm dụng thay vì các cuộc tấn công độc hại.

Gợi ý

Thêm gợi ý định tuyến vào dịch vụ, hướng dẫn bộ định tuyến định tuyến truy vấn đến một loại máy chủ nhất định.

Chèn Luồng

Chuyển đổi số lượng lớn các chèn thành các luồng dữ liệu CSV được sử dụng bởi máy chủ phụ trợ thông qua cơ chế TẢI DỮ LIỆU ĐỊA PHƯƠNG THÔNG TIN

Lua

Gọi một tập hợp các hàm trong tập lệnh Lua.

Đắp mặt nạ

Làm xáo trộn giá trị trả về của một cột cụ thể

Maxrows

Hạn chế số hàng mà SELECT, câu lệnh đã chuẩn bị hoặc thủ tục được lưu trữ có thể trả về ứng dụng khách.

Máy chủ Được đặt tên

Định tuyến các truy vấn đến máy chủ dựa trên các kết quả khớp biểu thức chính quy (regex).

Tất cả nhật ký truy vấn

Ghi nội dung truy vấn vào một tệp ở định dạng CSV.

Regex

Viết lại nội dung truy vấn bằng cách sử dụng đối sánh biểu thức chính quy và thay thế văn bản.

Áo thun

Tạo bản sao của các yêu cầu từ khách hàng và gửi các bản sao đến một dịch vụ khác trong MariaDB MaxScale.

Throttle

Thay thế và mở rộng chức năng limit_queries của bộ lọc Tường lửa Cơ sở dữ liệu

Lên trên

Theo dõi hiệu suất truy vấn của câu lệnh SQL đã chọn đi qua bộ lọc.

Giám sát Hiệu suất Giao dịch

Theo dõi mọi câu lệnh SQL đi qua bộ lọc, được nhóm theo giao dịch, để phân tích hiệu suất giao dịch.

Mỗi bộ lọc đều có những cách riêng để định cấu hình. Bộ lọc thường được đính kèm với dịch vụ MaxScale. Ví dụ, một bộ lọc binlog có thể được áp dụng cho dịch vụ binlogrouter, để chỉ sao chép một tập hợp con dữ liệu lên một máy chủ phụ có thể làm giảm đáng kể dung lượng đĩa cho các bảng lớn. Kiểm tra tài liệu bộ lọc MaxScale để biết cách phù hợp để định cấu hình các thông số cho bộ lọc tương ứng.

Tạo bộ lọc

Mỗi bộ lọc MaxScale đều có cách định cấu hình riêng. Trong ví dụ này, chúng ta sẽ tạo một bộ lọc che, để che dữ liệu nhạy cảm của chúng ta cho cột "card_no" trong bảng "credit_cards" của chúng ta. Tạo mặt nạ yêu cầu tệp quy tắc, được viết ở định dạng JSON. Trước hết, hãy tạo một thư mục để lưu trữ các tệp quy tắc của chúng tôi:

$ mkdir /var/lib/maxscale/rules

Sau đó, tạo một tệp văn bản:

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

Chỉ định các dòng như sau:

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

Các quy tắc đơn giản ở trên sẽ đơn giản làm xáo trộn đầu ra của cột card_no cho bất kỳ bảng nào, để bảo vệ dữ liệu nhạy cảm được ứng dụng khách MariaDB nhìn thấy.

Sau khi tệp quy tắc đã được tạo, chúng ta có thể tạo bộ lọc bằng lệnh sau:

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

Lưu ý rằng một số bộ lọc yêu cầu các thông số khác nhau. Đối với bộ lọc tạo mặt nạ này, tham số cơ bản là "quy tắc", nơi chúng ta cần chỉ định tệp quy tắc tạo mặt nạ ở định dạng JSON.

Đính kèm Bộ lọc vào Dịch vụ

Bộ lọc chỉ có thể được kích hoạt bằng cách gắn nó vào một dịch vụ. Việc sửa đổi dịch vụ hiện có bằng MaxCtrl chỉ được hỗ trợ bởi một số tham số và thêm bộ lọc không phải là một trong số chúng. Chúng tôi phải thêm thành phần bộ lọc trong tệp cấu hình dịch vụ của MaxScale để đính kèm bộ lọc về cơ bản. Trong ví dụ này, chúng tôi sẽ áp dụng bộ lọc "Obfuscates-card" cho dịch vụ tổng hợp hiện có của chúng tôi được gọi là rr-service.

Đi tới thư mục /var/lib/maxscale/maxscale.cnf.d và tìm rr-service.cnf, mở nó bằng trình soạn thảo văn bản rồi thêm dòng sau:

filters=Obfuscates-card

Cần phải khởi động lại MaxScale để tải thay đổi mới:

$ systemctl restart maxscale

Để kiểm tra bộ lọc, chúng tôi sẽ sử dụng một máy khách MariaDB và so sánh kết quả đầu ra bằng cách kết nối với hai dịch vụ khác nhau. Dịch vụ rw của chúng tôi được gắn vào một thiết bị nghe đang nghe trên cổng 3306 mà không có bất kỳ bộ lọc nào được định cấu hình. Do đó, chúng ta sẽ thấy phản hồi chưa được lọc từ 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 |
+----+-----------+-----------------+-------------+-----------+---------+

Khi kết nối với trình nghe rr-service trên cổng 3307, được định cấu hình với bộ lọc của chúng tôi, giá trị "card_no" của chúng tôi bị xáo trộn với đầu ra vô nghĩa:

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

Việc lọc này được thực hiện bởi MaxScale, tuân theo các quy tắc đối sánh bên trong masking.json mà chúng tôi đã tạo trước đó.

Bộ lọc Danh sách

Để liệt kê tất cả các bộ lọc đã tạo, hãy sử dụng lệnh "bộ lọc danh sách":

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

Trong các ví dụ trên, chúng tôi đã tạo 3 bộ lọc. Tuy nhiên, chỉ bộ lọc thẻ Obfuscates được liên kết với một dịch vụ.

Để hiển thị chi tiết tất cả các dịch vụ:

maxctrl: show filters

Hoặc nếu bạn muốn hiển thị một dịch vụ cụ thể:

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

Xóa bộ lọc

Để xóa một bộ lọc, trước tiên người ta phải hủy liên kết khỏi các dịch vụ liên quan. Ví dụ:hãy xem xét các bộ lọc sau trong MaxScale:

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

Đối với bộ lọc qla, chúng ta có thể chỉ cần sử dụng lệnh sau để xóa nó:

 maxctrl: destroy filter qla
OK

Tuy nhiên, đối với bộ lọc thẻ Obfuscates, nó phải được hủy liên kết với rr-service và rất tiếc, điều này yêu cầu sửa đổi tệp cấu hình và khởi động lại MaxScale. Đi tới thư mục /var/lib/maxscale/maxscale.cnf.d và tìm rr-service.cnf, mở nó bằng trình soạn thảo văn bản rồi xóa dòng sau:

filters=Obfuscates-card

Bạn cũng có thể xóa chuỗi "Obfuscates-card" khỏi dòng trên và để dòng "filter" bằng một giá trị trống. Sau đó, lưu tệp và khởi động lại dịch vụ MaxScale để tải các thay đổi:

$ systemctl restart maxscale

Chỉ khi đó, chúng tôi mới có thể xóa bộ lọc thẻ Obfuscates khỏi MaxScale bằng lệnh "hủy bộ lọc":

maxctrl: destroy filter Obfuscates-card
OK

Quản lý MaxScale

Liệt kê Người dùng

Để liệt kê tất cả người dùng MaxScale, hãy sử dụng lệnh "danh sách người dùng":

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

Tạo người dùng MaxScale

Theo mặc định, người dùng được tạo là người dùng chỉ đọc:

 maxctrl: create user dev mySecret
OK

Để tạo người dùng quản trị viên, hãy chỉ định lệnh --type =admin:

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

Xóa người dùng MaxScale

Để xóa người dùng, chỉ cần sử dụng lệnh "hủy người dùng":

 maxctrl: destroy user dba
OK

Người dùng quản trị cuối cùng còn lại không thể bị xóa. Tạo người dùng quản trị thay thế trước khi cố gắng xóa người dùng quản trị cuối cùng.

Hiển thị Thông số Tỷ lệ Tối đa

Để hiển thị tất cả các tham số đã tải cho phiên bản MaxScale, hãy sử dụng lệnh "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                                         │
│              │ }                                                                    │
└──────────────┴──────────────────────────────────────────────────────────────────────┘

Tham số thay đổi MaxScale

  • auth_connect_timeout
  • auth_read_timeout
  • auth_write_timeout
  • admin_auth
  • admin_log_auth_failures
  • bị động

Phần còn lại của các tham số phải được đặt bên trong /etc/maxscale.conf, yêu cầu khởi động lại MaxScale để áp dụng các thay đổi mới.

GUI MaxScale

MaxGUI là một công cụ dựa trên trình duyệt mới để định cấu hình và quản lý MaxScale, được giới thiệu trong phiên bản 2.5. Nó có thể truy cập thông qua cổng 8989 của máy chủ MaxScale trên giao diện máy chủ cục bộ, 127.0.0.1. Theo mặc định, bắt buộc phải đặt admin_secure_gui =true và định cấu hình cả tham số admin_ssl_key và admin_ssl_cert. Tuy nhiên, trong bài đăng blog này, chúng tôi sẽ cho phép kết nối qua HTTP thuần túy bằng cách thêm dòng sau trong lệnh [maxctrl] bên trong /etc/maxscale.cnf:

admin_secure_gui = false

Khởi động lại dịch vụ MaxScale để tải thay đổi:

$ systemctl restart maxscale

Vì GUI đang lắng nghe trên giao diện máy chủ cục bộ, chúng tôi có thể sử dụng đường hầm SSH để truy cập GUI từ máy trạm cục bộ của chúng tôi:

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

Sau đó, mở trình duyệt web, trỏ URL tới http://127.0.0.1:8989/ và đăng nhập. MaxGUI sử dụng thông tin đăng nhập tương tự như maxctrl, do đó mật khẩu mặc định là "admin" với mật khẩu "mariadb". Vì mục đích bảo mật, người ta nên tạo người dùng quản trị mới với mật khẩu mạnh hơn dành riêng cho mục đích này. Sau khi đăng nhập, bạn sẽ thấy bảng điều khiển MaxGUI như bên dưới:

Hầu hết các lệnh quản lý MaxCtrl mà chúng tôi đã trình bày trong loạt bài blog này có thể được thực hiện trực tiếp từ GUI này. Nếu bạn nhấp vào nút "Tạo mới", bạn sẽ thấy hộp thoại sau:

Như bạn có thể thấy, tất cả các thành phần MaxScale quan trọng có thể được quản lý trực tiếp từ GUI, với giao diện trực quan đẹp mắt, làm cho mọi thứ trở nên đơn giản và dễ quản lý hơn nhiều. Ví dụ:việc liên kết bộ lọc có thể được thực hiện trực tiếp từ giao diện người dùng mà không cần khởi động lại dịch vụ MaxScale, như được hiển thị trong phần "Đính kèm bộ lọc vào dịch vụ" trong bài đăng blog này.

Để biết thêm thông tin về GUI mới này, hãy xem hướng dẫn MaxGUI này.

Quản lý ghi nhật ký

Hiển thị các thông số ghi nhật ký

Để hiển thị các thông số ghi nhật ký, hãy sử dụng lệnh "hiển thị nhật ký":

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

Chỉnh sửa thông số ghi nhật ký

Tất cả các tham số ghi nhật ký như được hiển thị ở trên có thể được cấu hình thông qua lệnh MaxCtrl trong thời gian chạy. Ví dụ:chúng ta có thể bật log_info bằng cách sử dụng lệnh "ghi nhật ký thay đổi":

maxctrl: alter logging log_info true

Xoay nhật ký

Theo mặc định, MaxScale cung cấp tệp cấu hình xoay nhật ký theo /etc/logrotate.d/maxscale_logrotate. Dựa trên cấu hình xoay vòng nhật ký, tệp nhật ký được luân chuyển hàng tháng và sử dụng lệnh "xoay nhật ký" của MaxCtrl. Chúng ta có thể buộc việc xoay nhật ký diễn ra ngay lập tức bằng lệnh sau:

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

Xác minh bằng lệnh sau:

$ 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

Kết luận

Chúng ta đã đến phần cuối của loạt bài triển khai và quản lý MaxScale bằng máy khách MaxCtrl. Trên toàn bộ loạt blog này, chúng tôi đã sử dụng một số phiên bản MaxScale mới nhất khác nhau (liên quan đến ngày viết lên) và chúng tôi đã thấy nhiều cải tiến đáng kể trong mọi phiên bản.

Xin chúc mừng nhóm MariaDB MaxScale vì họ đã làm việc chăm chỉ để biến MaxScale trở thành một trong những công cụ cân bằng tải cơ sở dữ liệu tốt nhất trên thị trường.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. HA cho MySQL và MariaDB - So sánh bản sao Master-Master với Galera Cluster

  2. Xử lý các vấn đề sao chép từ các cụm cơ sở dữ liệu MariaDB không phải GTID sang GTID MariaDB

  3. MariaDB JSON_VALID () Giải thích

  4. Cách BIN () hoạt động trong MariaDB

  5. 2 cách trả lại mã ASCII cho một ký tự đã cho trong MariaDB