MariaDB Cluster bao gồm MariaDB Server với Galera Cluster và MariaDB MaxScale. Là một giải pháp nhân bản đa tổng thể, bất kỳ Máy chủ MariaDB nào có Galera Cluster đều có thể hoạt động như một máy chủ chính. Điều này có nghĩa là các thay đổi được thực hiện đối với bất kỳ nút nào trong cụm sẽ sao chép sang mọi nút khác trong cụm, sử dụng sao chép dựa trên chứng nhận và thứ tự toàn cầu của các giao dịch cho công cụ lưu trữ InnoDB. MariaDB MaxScale là một proxy cơ sở dữ liệu, nằm trên Máy chủ MariaDB, mở rộng tính khả dụng, khả năng mở rộng và bảo mật cao, đồng thời đơn giản hóa việc phát triển ứng dụng bằng cách tách nó khỏi cơ sở hạ tầng cơ sở dữ liệu bên dưới.
Trong loạt bài blog này, chúng ta sẽ xem xét quản trị MaxScale bằng cách sử dụng maxctrl cho Cụm MariaDB của chúng ta. Trong phần đầu tiên của loạt bài blog này, chúng tôi sẽ giới thiệu cho các bạn phần giới thiệu và một số khái niệm cơ bản về tiện ích dòng lệnh maxctrl. Thiết lập của chúng tôi bao gồm một máy chủ MaxScale và một MariaDB 10.4 3 nút với Galera 4, như được minh họa trong sơ đồ sau:
Cụm MariaDB của chúng tôi được triển khai và quản lý bởi ClusterControl, trong khi máy chủ MaxScale của chúng tôi là một máy chủ mới trong cụm và không được ClusterControl triển khai cho mục đích của hướng dẫn này.
Cài đặt MaxScale
Việc cài đặt MaxScale khá đơn giản. Chọn hệ điều hành phù hợp từ trang tải xuống MariaDB cho MaxScale và tải xuống. Ví dụ sau cho thấy cách cài đặt MaxScale trên máy chủ CentOS 8:
$ wget https://dlm.mariadb.com/1067156/MaxScale/2.4.10/centos/8/x86_64/maxscale-2.4.10-1.centos.8.x86_64.rpm
$ yum localinstall maxscale-2.4.10-1.centos.8.x86_64.rpm
$ systemctl enable maxscale
$ systemctl start maxscale
Sau khi khởi động daemon, theo mặc định, các thành phần MaxScale sẽ chạy trên các cổng sau:
- 0.0.0.0:4006 - Trình nghe tách đọc-ghi mặc định.
- 0.0.0.0:4008 - Trình nghe tổng hợp mặc định.
- 127.0.0.1:8989 - MaxScale Rest API.
Các cổng trên có thể thay đổi được. Thông thường một máy chủ MaxScale độc lập đang chạy với phân chia đọc / ghi trên cổng 3306 và vòng lặp trên cổng 3307. Cấu hình này là những gì chúng tôi sẽ triển khai trong bài đăng blog này.
Cấu trúc thư mục và tệp quan trọng
Khi gói được cài đặt, bạn sẽ nhận được các tiện ích / chương trình sau:
- maxscale - Bản thân MaxScale.
- maxctrl - Máy khách quản trị dòng lệnh cho MaxScale sử dụng API REST MaxScale để giao tiếp.
- maxadmin - Ứng dụng khách quản trị và giám sát MaxScale không được dùng nữa. Thay vào đó, hãy sử dụng maxctrl.
- maxkeys - Tiện ích này ghi vào tệp .secrets, trong thư mục được chỉ định, khóa mã hóa AES và vectơ init được tiện ích maxpasswd sử dụng khi mã hóa mật khẩu được sử dụng trong tệp cấu hình MariaDB MaxScale.
- maxpasswd - Tiện ích này tạo mật khẩu được mã hóa bằng tệp .secrets đã được tạo trước đó bằng maxkeys.
MaxScale sẽ tải tất cả các tùy chọn cấu hình từ các vị trí sau, theo thứ tự cụ thể:
- / etc / maxscale.cnf
- / etc / maxscale.cnf.d / *. cnf
- / var / lib / maxscale / maxscale.cnf.d / *. cnf
Để hiểu thêm về cấu hình MaxScale, hãy xem Hướng dẫn cấu hình MaxScale.
Khi MaxScale được khởi tạo, các tệp và cấu trúc thư mục mặc định là:
- Thư mục dữ liệu MaxScale:/ var / lib / maxscale
- Tệp PID MaxScale:/var/run/maxscale/maxscale.pid
- Tệp nhật ký MaxScale:/var/log/maxscale/maxscale.log
- Tài liệu về MaxScale:/ usr / share / maxscale
MaxCtrl - CLI
Sau khi bắt đầu, chúng ta có thể sử dụng máy khách dòng lệnh MaxCtrl để quản trị MaxScale bằng cách sử dụng API MaxScale REST lắng nghe trên cổng 8989 trên máy chủ cục bộ. Thông tin xác thực mặc định cho REST API là "admin:mariadb". Người dùng được sử dụng bởi REST API cũng giống như những người dùng được sử dụng bởi giao diện mạng MaxAdmin. Điều này có nghĩa là bất kỳ người dùng nào được tạo cho giao diện mạng MaxAdmin phải hoạt động với API MaxScale REST và MaxCtrl.
Chúng ta có thể sử dụng tiện ích maxctrl trong chế độ tương tác, tương tự như ứng dụng khách mysql. Chỉ cần nhập "maxctrl" và bạn sẽ vào chế độ tương tác (nơi lời nhắc đã thay đổi từ dấu nhắc shell thành lời nhắc maxctrl), giống như ảnh chụp màn hình sau:
Ngoài ra, chúng ta có thể thực hiện lệnh tương tự trực tiếp trong dấu nhắc trình bao, ví dụ:
Tùy chọn lệnh MaxCtrl tùy thuộc vào phiên bản MaxScale đi kèm với nó. Tại thời điểm viết bài này, phiên bản MaxScale là 2.4 và bạn nên xem tài liệu này để biết danh sách đầy đủ các lệnh. MaxCtrl sử dụng giao diện MaxScale REST API, giao diện này giải thích chi tiết tại đây.
Thêm Máy chủ MariaDB vào MaxScale
Khi chúng ta khởi động MaxScale lần đầu tiên, nó sẽ tạo một tệp cấu hình tại /etc/maxscale.cnf với một số tham số và ví dụ mặc định. Chúng tôi sẽ không sử dụng cấu hình này và thay vào đó chúng tôi sẽ tạo cấu hình của riêng mình. Tạo bản sao lưu của tệp này vì chúng tôi muốn làm trống tệp sau này:
$ mv /etc/maxscale.cnf /etc/maxscale.cnf.bak
$ cat /dev/null > /etc/maxscale.cnf # empty the file
Khởi động lại MaxScale để bắt đầu mọi thứ mới:
$ systemctl restart maxscale
Thuật ngữ "máy chủ" trong MaxScale về cơ bản có nghĩa là máy chủ MariaDB phụ trợ, như trong trường hợp này, tất cả 3 nút của Cụm MariaDB của chúng tôi. Để thêm tất cả 3 máy chủ Cụm MariaDB vào thời gian chạy MaxScale, hãy sử dụng các lệnh sau:
$ maxctrl create server mariadbgalera1 192.168.0.221 3306
$ maxctrl create server mariadbgalera2 192.168.0.222 3306
$ maxctrl create server mariadbgalera3 192.168.0.222 3306
Để xác minh các máy chủ đã thêm, hãy sử dụng lệnh danh sách:
$ maxctrl list servers
Và bạn sẽ thấy kết quả sau:
Thêm Giám sát vào MaxScale
Điều tiếp theo là cấu hình dịch vụ giám sát cho việc sử dụng MaxScale. MaxScale hỗ trợ một số mô-đun giám sát tùy thuộc vào loại cơ sở dữ liệu, cụ thể là:
- MariaDB Monitor
- Galera Monitor
- Clustrix Monitor
- ColumnStore Monitor
- Aurora Monitor
Trong thiết lập này, chúng tôi sẽ sử dụng mô-đun Galera Monitor được gọi là "galeramon". Đầu tiên, chúng ta cần tạo một người dùng cơ sở dữ liệu để MaxScale sử dụng trên một trong các máy chủ trong MariaDB Cluster. Trong ví dụ này, chúng tôi chọn mariadbgalera1, 192.168.0.221 để chạy các câu lệnh sau:
MariaDB> CREATE USER [email protected]'192.168.0.220' IDENTIFIED BY 'MaXSc4LeP4ss';
MariaDB> GRANT SELECT ON mysql.* TO 'maxscale_monitor'@'192.168.0.220';
MariaDB> GRANT SHOW DATABASES ON *.* TO 'maxscale_monitor'@'192.168.0.220';
Trong đó 192.168.0.220 là địa chỉ IP của máy chủ MaxScale của chúng tôi.
Không an toàn khi lưu trữ mật khẩu người dùng maxscale_monitor ở dạng văn bản thuần túy. Thay vào đó, bạn nên lưu trữ mật khẩu ở định dạng được mã hóa. Để đạt được điều này, chúng ta cần tạo một khóa bí mật dành riêng cho phiên bản MaxScale này. Sử dụng tiện ích "maxkeys" để tạo khóa bí mật sẽ được MaxScale sử dụng cho mục đích mã hóa và giải mã:
$ maxkeys
Generating .secrets file in /var/lib/maxscale.
Bây giờ chúng ta có thể sử dụng tiện ích maxpasswd để tạo giá trị được mã hóa cho mật khẩu của chúng ta:
$ maxpasswd MaXSc4LeP4ss
D91DB5813F7C815B351CCF7D7F1ED6DB
Thay vào đó, chúng tôi sẽ luôn sử dụng giá trị trên khi lưu trữ thông tin đăng nhập người dùng giám sát của chúng tôi bên trong MaxScale. Bây giờ chúng tôi đã sẵn sàng thêm dịch vụ giám sát Galera vào MaxScale bằng cách sử dụng maxctrl:
maxctrl> create monitor galera_monitor galeramon servers=mariadbgalera1,mariadbgalera2,mariadbgalera3 user=maxscale_monitor password=D91DB5813F7C815B351CCF7D7F1ED6DB
Xác minh bằng lệnh sau:
Thêm Dịch vụ vào MaxScale
Dịch vụ về cơ bản là cách MaxScale định tuyến các truy vấn đến các máy chủ phụ trợ. MaxScale 2.4 hỗ trợ nhiều dịch vụ (hoặc bộ định tuyến), cụ thể là:
- Avrorouter
- Binlogrouter
- Con mèo
- CLI
- HintRouter
- Readconnroute
- Readwritesplit
- SchemaRouter
- SmartRouter
Đối với Cụm MariaDB của chúng tôi, chúng tôi chỉ cần hai dịch vụ định tuyến - Phân chia đọc-ghi và cân bằng tải vòng quanh. Đối với phân tách đọc-ghi, các truy vấn ghi sẽ chỉ được chuyển tiếp đến một máy chủ MariaDB duy nhất cho đến khi máy chủ không thể truy cập được, nơi MaxScale sau đó sẽ chuyển tiếp các truy vấn ghi tới nút có sẵn tiếp theo. Để cân bằng theo vòng tròn, các truy vấn sẽ được chuyển tiếp đến tất cả các nút phụ trợ theo kiểu vòng tròn.
Tạo dịch vụ định tuyến cho round-robin (hoặc multi-master):
maxctrl> create service Round-Robin-Service readconnroute user=maxscale_monitor password=D91DB5813F7C815B351CCF7D7F1ED6DB --servers mariadbgalera1 mariadbgalera2 mariadbgalera3
Tạo một dịch vụ định tuyến khác để phân tách đọc-ghi (hoặc một cái chính):
maxctrl> create service Read-Write-Service readwritesplit user=maxscale_monitor password=D91DB5813F7C815B351CCF7D7F1ED6DB --servers mariadbgalera1 mariadbgalera2 mariadbgalera3
Xác minh bằng:
Tất cả các thành phần được MaxCtrl tạo thành công sẽ tạo tệp cấu hình của riêng nó trong / var / lib / maxscale / maxscale.cnf.d. Tại thời điểm này, thư mục trông giống như sau:
$ ls -l /var/lib/maxscale/maxscale.cnf.d
total 24
-rw-r--r--. 1 maxscale maxscale 532 Jul 5 13:18 galera_monitor.cnf
-rw-r--r--. 1 maxscale maxscale 250 Jul 5 12:55 mariadbgalera1.cnf
-rw-r--r--. 1 maxscale maxscale 250 Jul 5 12:55 mariadbgalera2.cnf
-rw-r--r--. 1 maxscale maxscale 250 Jul 5 12:56 mariadbgalera3.cnf
-rw-r--r--. 1 maxscale maxscale 1128 Jul 5 16:01 Read-Write-Service.cnf
-rw-r--r--. 1 maxscale maxscale 477 Jul 5 16:00 Round-Robin-Service.cnf
Thêm Trình nghe vào MaxScale
Người nghe đại diện cho các cổng mà dịch vụ sẽ lắng nghe các kết nối đến. Nó có thể là một cổng hoặc tệp ổ cắm UNIX và loại thành phần phải là "người nghe". Thông thường, người nghe bị ràng buộc với các dịch vụ. Trong thiết lập của chúng tôi, chúng tôi sẽ tạo hai trình nghe - Trình nghe đọc-ghi trên cổng 3306 và Trình nghe Round-Robin trên cổng 3307:
maxctrl> create listener Read-Write-Service Read-Write-Listener 3306 --interface=0.0.0.0 --authenticator=MariaDBAuth
maxctrl> create listener Round-Robin-Service Round-Robin-Listener 3307 --interface=0.0.0.0 --authenticator=MariaDBAuth
Xác minh bằng các lệnh sau:
Tại thời điểm này, MaxScale của chúng tôi hiện đã sẵn sàng để cân bằng các truy vấn để Cụm MariaDB của chúng tôi. Từ các ứng dụng, gửi các truy vấn đến máy chủ MaxScale trên cổng 3306, nơi các truy vấn ghi sẽ luôn đến cùng một nút cơ sở dữ liệu trong khi các truy vấn đọc sẽ được gửi đến hai nút khác. Đây còn được gọi là thiết lập một người viết. Nếu bạn muốn sử dụng thiết lập nhiều người viết, nơi các bản ghi sẽ được chuyển tiếp đến tất cả các nút MariaDB phụ trợ dựa trên các thuật toán cân bằng vòng lặp. Bạn có thể tinh chỉnh thêm việc cân bằng bằng cách sử dụng mức độ ưu tiên và trọng lượng.
Một lần nữa, khi thay đổi các tùy chọn cấu hình qua maxctrl, tất cả các thành phần được tạo thành công sẽ có tệp cấu hình riêng bên trong /var/lib/maxscale/maxscale.cnf.d, như được hiển thị trong đầu ra sau:
$ ls -l /var/lib/maxscale/maxscale.cnf.d
-rw-r--r--. 1 maxscale maxscale 532 Jul 5 13:18 galera_monitor.cnf
-rw-r--r--. 1 maxscale maxscale 250 Jul 5 12:55 mariadbgalera1.cnf
-rw-r--r--. 1 maxscale maxscale 250 Jul 5 12:55 mariadbgalera2.cnf
-rw-r--r--. 1 maxscale maxscale 250 Jul 5 12:56 mariadbgalera3.cnf
-rw-r--r--. 1 maxscale maxscale 259 Jul 5 16:06 Read-Write-Listener.cnf
-rw-r--r--. 1 maxscale maxscale 1128 Jul 5 16:06 Read-Write-Service.cnf
-rw-r--r--. 1 maxscale maxscale 261 Jul 5 16:06 Round-Robin-Listener.cnf
-rw-r--r--. 1 maxscale maxscale 477 Jul 5 16:06 Round-Robin-Service.cnf
Các tùy chọn cấu hình trên có thể được sửa đổi trực tiếp để phù hợp hơn với nhu cầu của bạn, nhưng nó yêu cầu khởi động lại dịch vụ MaxScale để tải các thay đổi mới. Nếu bạn muốn làm mới lại, bạn có thể xóa mọi thứ trong thư mục này và khởi động lại MaxScale.
Trong tập tiếp theo, chúng ta sẽ xem xét các lệnh quản lý và giám sát của MaxCtrl cho Cụm MariaDB của chúng ta.