Cách cấu hình Galera Cluster với MariaDB trên máy chủ CentOS 7
MariaDB là một hệ thống cơ sở dữ liệu quan hệ mã nguồn mở, hoàn toàn tương thích với hệ thống quản lý cơ sở dữ liệu MySQL. Galera Cluster là một giải pháp cụm cơ sở dữ liệu cho phép bạn thiết lập nhiều cụm master sử dụng sao chép đồng bộ. Galera tự động xử lý việc giữ cho dữ liệu trên các node khác nhau đồng bộ, trong khi đó bạn có thể gửi các truy vấn đọc và ghi đến bất kỳ node nào trong cụm.
Clustering (cụm) giúp tăng tính khả dụng cao cho cơ sở dữ liệu của bạn bằng cách phân phối các thay đổi đến các máy chủ khác nhau. Trong trường hợp một trong các phiên bản (instances) gặp sự cố, các phiên bản khác nhanh chóng sẵn sàng để tiếp tục phục vụ.
Cụm có hai cấu hình chung là active-passive và active-active. Trong cụm active-passive, tất cả các ghi chép được thực hiện trên một máy chủ active duy nhất và sau đó sao chép đến một hoặc nhiều máy chủ passive sẵn sàng tiếp quản khi máy chủ active gặp sự cố. Một số cụm active-passive cũng cho phép thực hiện truy vấn SELECT trên các nút passive. Trong cụm active-active, mỗi nút đều có thể đọc/ghi và sự thay đổi trên một nút được sao chép đến tất cả các nút khác.
Trong hướng dẫn này, bạn sẽ cấu hình một cụm active-active MariaDB Galera. Vì mục đích thử nghiệm, bạn sẽ cấu hình và kiểm tra ba Droplets CentOS 7, nó sẽ hoạt động như các node trong cụm. Đây là cụm nhỏ nhất có thể cấu hình.
Một số yêu cầu cần thiết trước khi cấu hình Galera Cluster
Để làm theo hướng dẫn này, bạn sẽ cần một tài khoản DigitalOcean, cùng với các yêu cầu sau:
- Ba Droplets CentOS 7 với kết nối mạng riêng được kích hoạt, mỗi máy chủ có một người dùng không phải root nhưng có đặc quyền sudo và tường lửa đã được kích hoạt.
Mặc dù các bước trong hướng dẫn này đã được viết và kiểm tra trên các Droplets của DigitalOcean nhưng nhiều bước cũng có thể áp dụng cho các máy chủ không phải DigitalOcean với kết nối mạng riêng đã được kích hoạt.
Hướng dẫn cấu hình Galera Cluster MariaDB trên CentOS 7
Bước 1 - Thêm các kho lưu trữ (repositories) MariaDB vào tất cả các máy chủ
Trong bước đầu tiên để cấu hình Galera Cluster, bạn sẽ thêm các kho lưu trữ gói MariaDB tương ứng vào từng máy chủ trong ba máy chủ để bạn có thể cài đặt phiên bản MariaDB phù hợp. Khi các kho lưu trữ được cập nhật trên cả ba máy chủ, bạn sẽ sẵn sàng cài đặt MariaDB.
Một điều lưu ý về MariaDB là nó ban đầu được phát triển như một sự thay thế tức thời cho MySQL, do đó trong nhiều tệp cấu hình và kịch bản khởi động, bạn sẽ thấy "mysql" thay vì "mariadb". Trong nhiều trường hợp, chúng có thể thay thế lẫn nhau. Vì sự nhất quán, trong hướng dẫn này, chúng ta sẽ sử dụng "mariadb" khi cả hai có thể hoạt động.
Trong hướng dẫn này, bạn sẽ sử dụng phiên bản MariaDB Vì phiên bản này không được bao gồm trong các kho lưu trữ mặc định của CentOS, bạn sẽ bắt đầu bằng cách thêm kho lưu trữ CentOS bên ngoài.
Lưu ý: MariaDB là một nhà cung cấp đáng tin cậy nhưng không phải tất cả các kho lưu trữ bên ngoài đều đáng tin cậy. Hãy chắc chắn chỉ cài đặt từ các nguồn uy tín.
Trước tiên, bạn sẽ thêm khóa của kho lưu trữ MariaDB bằng cách tạo một tệp kho lưu trữ với trình soạn thảo văn bản. Trong hướng dẫn này, chúng ta sẽ sử dụng trình soạn thảo vi:
$ sudo vi /etc/yum.repos.d/mariadb.repo
Tiếp theo, thêm nội dung sau vào tệp bằng cách nhấn i để vào chế độ chèn, sau đó thêm nội dung sau:
[mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.4/centos7-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1
Nhấn phím "Esc" để quay lại chế độ bình thường, sau đó gõ ":wq" để lưu và thoát khỏi tệp.
Sau khi bạn đã tạo tệp kho lưu trữ, bật nó bằng lệnh sau:
$ sudo yum makecache --disablerepo='*' --enablerepo='mariadb'
Lệnh "makecache" sẽ lưu trữ metadata của kho lưu trữ để trình quản lý gói có thể cài đặt MariaDB, với các tùy chọn "--disablerepo" và "--enablerepo" nhắm vào tệp kho lưu trữ mariadb mà bạn vừa tạo.
Bạn sẽ nhận được kết quả sau đây:
Output Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile mariadb | 2.9 kB 00:00:00 (1/3): mariadb/primary_db | 43 kB 00:00:00 (2/3): mariadb/other_db | 8.3 kB 00:00:00 (3/3): mariadb/filelists_db | 238 kB 00:00:00 Metadata Cache Created
Sau khi bạn đã bật kho lưu trữ trên máy chủ đầu tiên, lặp lại việc này cho máy chủ thứ hai và thứ ba.
Cài đặt MariaDB trên tất cả các máy chủ
Trong bước này, bạn sẽ cài đặt các gói MariaDB thực tế trên ba máy chủ.
Bắt đầu từ phiên bản 10.1 trở đi, các gói MariaDB Server và MariaDB Galera Server đã được kết hợp, vì vậy việc cài đặt MariaDB-server sẽ tự động cài đặt Galera và một số phụ thuộc:
$ sudo yum install MariaDB-server MariaDB-client
Bạn sẽ được hỏi xác nhận liệu bạn có muốn tiếp tục cài đặt không. Nhập "yes" để tiếp tục với việc cài đặt. Sau đó, bạn sẽ được yêu cầu chấp nhận khóa GPG xác thực gói MariaDB. Nhập "yes" một lần nữa.
Khi quá trình cài đặt hoàn tất, khởi động dịch vụ mariadb bằng cách chạy lệnh sau:
$ sudo systemctl start mariadb
Bật dịch vụ mariadb để tự động khởi động khi máy chủ được bật bằng cách thực hiện lệnh sau:
$ sudo systemctl enable mariadb
Từ phiên bản MariaDB 10.4 trở đi, người dùng root của MariaDB không có mật khẩu mặc định. Để đặt mật khẩu cho người dùng root bắt đầu bằng cách đăng nhập vào MariaDB:
$ sudo mysql -uroot
Khi bạn đã vào trong giao diện dòng lệnh của MariaDB, thay đổi mật khẩu bằng cách thực hiện câu lệnh sau, thay thế your_password bằng mật khẩu mong muốn của bạn:
MariaDB[(none)]> set password = password("your_password");
Bạn sẽ nhận được kết quả sau đây, cho thấy mật khẩu đã được đặt thành công:
Output Query OK, 0 rows affected (0.001 sec)
Để thoát khỏi giao diện dòng lệnh của MariaDB, chạy lệnh sau:
MariaDB[(none)]> quit;
Bây giờ bạn đã có tất cả các thành phần cần thiết để bắt đầu cấu hình Galera Cluster. Hãy đảm bảo các gói rsync và policycoreutils-python đã được cài đặt vì chúng dùng để đồng bộ hóa máy chủ, kiểm soát Security-Enhanced Linux (SELinux) trong các bước sau:
$ sudo yum install rsync policycoreutils-python
Điều này sẽ xác nhận rằng phiên bản mới nhất của rsync và policycoreutils-python đã có sẵn hoặc sẽ yêu cầu bạn nâng cấp cũng như cài đặt chúng. Sau khi bạn đã hoàn thành các bước này, lặp lại chúng cho hai máy chủ khác.
Bây giờ bạn đã cài đặt MariaDB thành công trên từng trong ba máy chủ, bạn có thể tiếp tục đến bước cấu hình trong phần tiếp theo.
Bước 3 - Cấu hình node đầu tiên
Trong bước này, bạn sẽ cấu hình node Galera đầu tiên. Mỗi node trong cụm cần có một cấu hình gần như giống nhau. Do đó, bạn sẽ thực hiện toàn bộ cấu hình trên máy chủ đầu tiên và sau đó sao chép nó sang các node khác.
Theo như mặc định, MariaDB được cấu hình để kiểm tra thư mục /etc/mysql/conf.d, lấy các thiết lập cấu hình bổ sung từ các tệp kết thúc bằng .cnf. Tạo một tệp trong thư mục này với tất cả các chỉ thị cụm của bạn:
galera-node01$ sudo vi /etc/my.cnf.d/galera.cnf
Thêm cấu hình sau vào tệp. Cấu hình này xác định các tùy chọn cụm khác nhau, chi tiết về máy chủ hiện tại và các máy chủ khác trong cụm, các thiết lập liên quan đến sao chép. Lưu ý rằng các địa chỉ IP trong cấu hình là các địa chỉ IP riêng tư của các máy chủ tương ứng của bạn. Hãy thay thế các dòng được tô sáng bằng các địa chỉ IP thích hợp:
[mysqld] binlog_format=ROW default-storage-engine=innodb innodb_autoinc_lock_mode=2 bind-address=0.0.0.0 # Galera Provider Configuration wsrep_on=ON wsrep_provider=/usr/lib64/galera-4/libgalera_smm.so # Galera Cluster Configuration wsrep_cluster_name="test_cluster" wsrep_cluster_address="gcomm://First_Node_IP,Second_Node_IP,Third_Node_IP" # Galera Synchronization Configuration wsrep_sst_method=rsync # Galera Node Configuration wsrep_node_address="This_Node_IP" wsrep_node_name="This_Node_Name"
- Phần đầu tiên điều chỉnh hoặc xác nhận các thiết lập MariaDB/MySQL để cho phép Galera Cluster hoạt động chính xác. Ví dụ, Galera sẽ không hoạt động với các lưu trữ không giao dịch như MyISAM và mysqld. Vì thế chúng không nên được ràng buộc vào địa chỉ IP cho localhost.
- Phần "Cấu hình cung cấp Galera" cấu hình các thành phần MariaDB cung cấp API sao chép WriteSet. Trong trường hợp này thì đó là Galera, vì Galera là nhà cung cấp wsrep (WriteSet Replication). Bạn chỉ định các tham số chung để cấu hình môi trường sao chép ban đầu. Điều này không yêu cầu bất kỳ tùy chỉnh nào.
- Phần "Cấu hình Galera Cluster" xác định cụm, xác định các thành viên của cụm bằng địa chỉ IP hoặc tên miền có thể phân giải và tạo tên cụm để đảm bảo các thành viên tham gia vào nhóm chính xác. Bạn có thể thay đổi wsrep_cluster_name thành một cái tên ý nghĩa hơn so với test_cluster hoặc để nó như vậy, nhưng bạn phải cập nhật wsrep_cluster_address với các địa chỉ IP riêng tư của ba máy chủ.
- Phần "Cấu hình đồng bộ hóa Galera" xác định cách cụm sẽ giao tiếp và đồng bộ dữ liệu giữa các thành viên. Điều này chỉ được sử dụng cho việc truyền trạng thái xảy ra khi một node trở thành trực tuyến. Đối với cài đặt ban đầu thì bạn đang sử dụng rsync, vì nó có sẵn và thực hiện công việc bạn cần cho đến lúc này.
- Phần "Cấu hình node Galera" làm rõ địa chỉ IP và tên của máy chủ hiện tại. Điều này hữu ích khi cố gắng chẩn đoán các vấn đề trong các tệp nhật ký và tham chiếu đến mỗi máy chủ theo nhiều cách. wsrep_node_address phải khớp với địa chỉ máy mà bạn đang sử dụng nhưng bạn có thể chọn bất kỳ tên nào bạn muốn để giúp xác định node trong các tệp nhật ký.
Khi bạn hài lòng với tệp cấu hình Galera Cluster của mình hãy sao chép nội dung vào clipboard và lưu tệp sau đó đóng nó lại.
Bây giờ bạn đã cấu hình thành công node đầu tiên, bạn có thể tiếp tục cấu hình các node còn lại trong phần tiếp theo.
Cấu hình các nút còn lại
Trong bước này, bạn sẽ cấu hình hai node còn lại. Trên node thứ hai, mở tệp cấu hình:
galera-node-02$ sudo vi /etc/mysql/my.cnf.d/galera.cnf
Dán cấu hình bạn đã sao chép từ node đầu tiên, sau đó cập nhật cấu hình node Galera để sử dụng địa chỉ IP hoặc tên miền có thể phân giải cho node cụ thể mà bạn đang thiết lập. Cuối cùng, cập nhật tên của nó, bạn có thể đặt tên bạn muốn giúp xác định node trong các tệp nhật ký:
. . . # Galera Node Configuration wsrep_node_address="This_Node_IP" wsrep_node_name="This_Node_Name" . . .
Lưu và thoát khỏi tệp.
Khi bạn hoàn thành các bước này, lặp lại chúng trên node thứ ba.
Với việc cấu hình Galera Cluster trên tất cả các node của bạn, bạn đã gần hoàn tất việc khởi động cụm. Tuy nhiên, trước khi làm điều đó, hãy đảm bảo rằng các cổng phù hợp đã được mở trong tường lửa và một chính sách SELinux đã được tạo cho Galera.
Bước 5 - Mở tường lửa trên mỗi máy chủ
Trong bước này, bạn sẽ cấu hình tường lửa để mở các cổng cần thiết cho việc giao tiếp giữa các node.
Trên mỗi máy chủ, kiểm tra trạng thái của tường lửa mà bạn đã thiết lập trong phần đầu tiên bằng cách chạy lệnh:
$ sudo firewall-cmd --list-all
Trong trường hợp này, chỉ có lưu lượng SSH, DHCP, HTTP và HTTPS được cho phép thông qua tường lửa.
Output public target: default icmp-block-inversion: no interfaces: sources: services: ssh dhcpv6-client http https ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
Nếu bạn cố gắng khởi động cụm hiện tại, nó sẽ thất bại vì tường lửa sẽ chặn các kết nối giữa các node. Để giải quyết vấn đề này, thêm các quy tắc cho phép lưu lượng của MariaDB và Galera thông qua.
Galera có thể sử dụng bốn cổng:
- 3306: Dành cho kết nối khách hàng MariaDB và chuyển đổi trạng thái SnapShot sử dụng phương pháp mysqldump.
- 4567: Dành cho lưu lượng sao chép Galera Cluster. Sao chép Multicast sử dụng cả giao thức UDP và TCP trên cổng này.
- 4568: Dành cho truyền trạng thái tích lũy hoặc IST, quá trình mà một trạng thái bị mất được nhận bởi các node khác trong cụm.
- 4444: Dành cho tất cả các trạng thái SnapShot tích lũy hoặc SST khác, cơ chế mà node gia nhập nhận trạng thái và dữ liệu từ node tài trợ.
Trong ví dụ này, bạn sẽ mở cả bốn cổng trong quá trình cài đặt. Khi bạn đã xác nhận sao chép hoạt động thì sẽ đóng bất kỳ cổng nào mà bạn thực sự không sử dụng và giới hạn lưu lượng chỉ đến các máy chủ trong cụm.
Mở các cổng bằng các lệnh sau đây:
$ sudo firewall-cmd --permanent --zone=public --add-port=3306/tcp $ sudo firewall-cmd --permanent --zone=public --add-port=4567/tcp $ sudo firewall-cmd --permanent --zone=public --add-port=4568/tcp $ sudo firewall-cmd --permanent --zone=public --add-port=4444/tcp $ sudo firewall-cmd --permanent --zone=public --add-port=4567/udp
Sử dụng --zone=public và --add-port=, lệnh firewall-cmd sẽ mở các cổng này cho lưu lượng công cộng. --permanent đảm bảo các quy tắc này tồn tại sau khi khởi động lại.
Lưu ý: Tùy thuộc vào những gì đang chạy trên máy chủ của bạn, bạn có thể muốn hạn chế quyền truy cập ngay lập tức.
Bây giờ, thêm mỗi máy chủ vào khu vực public bằng cách thực hiện các lệnh sau đây, thay thế văn bản được đánh dấu bằng địa chỉ IP riêng tư tương ứng của các node của bạn:
$ sudo firewall-cmd --permanent --zone=public --add-source=galera-node-1-ip/32 $ sudo firewall-cmd --permanent --zone=public --add-source=galera-node-2-ip/32 $ sudo firewall-cmd --permanent --zone=public --add-source=galera-node-3-ip/32
Tải lại tường lửa để áp dụng các thay đổi:
$ sudo firewall-cmd --reload
Sau khi bạn đã cấu hình tường lửa trên node đầu tiên, tạo cùng các thiết lập tường lửa trên node thứ hai và thứ ba.
Bây giờ bạn đã cấu hình tường lửa thành công, bạn đã sẵn sàng tạo chính sách SELinux trong bước tiếp theo.
Tạo chính sách SELinux
Trong phần này, bạn sẽ tạo một chính sách SELinux cho phép tất cả các node trong cụm có thể giao tiếp với nhau và thực hiện các hoạt động của cụm.
SELinux là một module kernel Linux cải thiện tính bảo mật của các hệ điều hành bằng việc hỗ trợ kiểm soát truy cập và chính sách kiểm soát bắt buộc. Nó được kích hoạt mặc định trên CentOS 7 và hạn chế daemon MariaDB thực hiện nhiều hoạt động.
Để tạo chính sách, bạn sẽ thực hiện các hoạt động khác nhau trên cụm với SELinux ở chế độ permissive cho MariaDB. Sau đó, bạn sẽ tạo chính sách từ các sự kiện được ghi lại và cuối cùng đặt SELinux ở chế độ enforcing sau khi chính sách được cài đặt thành công.
Đầu tiên, cho phép truy cập vào các cổng liên quan bằng cách chạy các lệnh sau trên tất cả ba máy chủ:
$ sudo semanage port -a -t mysqld_port_t -p tcp 4567 $ sudo semanage port -a -t mysqld_port_t -p udp 4567 $ sudo semanage port -a -t mysqld_port_t -p tcp 4568 $ sudo semanage port -a -t mysqld_port_t -p tcp 4444
Chú ý: Bạn có thể nhận được lỗi ValueError khi cho phép truy cập vào một số cổng này. Điều đó có nghĩa là trạng thái SELinux của cổng đó đã được thiết lập và trong trường hợp này nó sẽ không ảnh hưởng đến quá trình của hướng dẫn bên dưới.
Trong các lệnh này, bạn sử dụng công cụ quản lý SELinux là semanage với tùy chọn -a để thêm các cổng cụ thể và bỏ qua máy chủ cơ sở dữ liệu.
Tiếp theo, chạy lệnh sau trên tất cả ba máy chủ, chuyển chế độ SELinux của MySQL sang chế độ permissive tạm thời:
$ sudo semanage permissive -a mysqld_t
Lệnh này có thể mất một vài phút để hoàn thành và sẽ không hiển thị bất kỳ đầu ra nào.
Tiếp theo, dừng máy chủ cơ sở dữ liệu trên tất cả các nút để bạn có thể khởi tạo cụm cơ sở dữ liệu với các chính sách SELinux được chia sẻ. Để làm điều này, chạy lệnh sau trên tất cả ba node:
$ sudo systemctl stop mariadb
Bây giờ, hãy khởi tạo cụm để tạo ra các sự kiện giao tiếp giữa các node mà sẽ được thêm vào chính sách SELinux. Trên node đầu tiên, khởi tạo cụm bằng cách thực thi lệnh:
galera-node-01$ sudo galera_new_cluster
Tạo một cơ sở dữ liệu và bảng cho mục đích cụ thể là ghi nhật ký các sự kiện SST bằng cách thực thi lệnh sau trên node đầu tiên:
galera-node-01$ mysql -u root -p -e 'CREATE DATABASE selinux; galera-node-01$ CREATE TABLE selinux.selinux_policy (id INT NOT NULL AUTO_INCREMENT, PRIMARY KEY(id)); galera-node-01$ INSERT INTO selinux.selinux_policy VALUES ();'
Bây giờ, hãy bắt đầu máy chủ trên node thứ hai bằng cách chạy lệnh sau:
galera-node-02$ sudo systemctl start mariadb
Tiếp theo, thực hiện cùng các bước trên node thứ ba:
galera-node-03$ sudo systemctl start mariadb
Bạn sẽ không thấy bất kỳ đầu ra nào cho các lệnh trước đó. Để tạo các sự kiện IST (Incremental State Transfer), thực thi lệnh sau trên cả ba máy chủ:
$ mysql -u root -p -e 'INSERT INTO selinux.selinux_policy VALUES ();'
Bây giờ, hãy tạo và bật chính sách SELinux bằng cách thực thi các lệnh sau trên cả ba máy chủ:
$ sudo grep mysql /var/log/audit/audit.log | sudo audit2allow -M Galera
Lệnh đầu tiên, tìm kiếm các sự kiện đã tạo trong tệp audit.log và đưa chúng vào một module có tên mariadb được tạo bởi công cụ audit2allow. Điều này sẽ cho kết quả đầu ra sau đây:
Output ******************** IMPORTANT *********************** To make this policy package active, execute: semodule -i Galera.pp
Tiếp theo, hãy làm theo hướng dẫn trong đầu ra và sử dụng lệnh sau để cài đặt module đã tạo:
$ sudo semodule -i Galera.pp
Bây giờ chính sách đã được kích hoạt, vui lòng tắt chế độ permissive cho máy chủ MariaDB bằng cách thực thi lệnh sau:
$ sudo semanage permissive -d mysqld_t
Bạn đã thành công trong việc tạo chính sách SELinux và kích hoạt nó, hãy sẵn sàng để khởi động cụm trong phần tiếp theo.
Bước 7 - Khởi động Galera Cluster:
Trong bước này, bạn sẽ khởi động cụm MariaDB của mình. Để bắt đầu, bạn cần dừng dịch vụ MariaDB đang chạy để có thể đưa cụm lên hoạt động.
-
Dừng dịch vụ MariaDB trên tất cả ba máy chủ
Khi dừng dịch vụ MariaDB, việc thực hiện hành động này trên máy chủ của bạn theo một thứ tự cụ thể là rất quan trọng. Trình tự tắt máy chắc chắn sẽ giúp máy chủ đầu tiên khởi động cụm mạng một cách an toàn khi nó bắt đầu hoạt động lại.
Đầu tiên, thực hiện lệnh sau trên máy chủ thứ ba:
galera-node-03$ sudo systemctl stop mariadb
Tiếp đến, dừng các dịch vụ trên node thứ 2:
galera-node-02$ sudo systemctl stop mariadb
Cuối cùng, dừng dịch vụ trên node thứ nhất:
galera-node-01$ sudo systemctl stop mariadb
systemctl không hiển thị kết quả của tất cả các lệnh quản lý dịch vụ, vì vậy để đảm bảo rằng bạn đã thực hiện thành công, sử dụng lệnh sau trên mỗi máy chủ của bạn:
$ sudo systemctl status mariadb
Dòng cuối cùng sẽ có dạng như sau:
Output . . . Apr 26 03:34:23 galera-node-01 systemd[1]: Stopped MariaDB 10.4.4 database server.
Sau khi đã tắt MariaDB trên tất cả các máy chủ, bạn đã sẵn sàng tiếp tục.
-
Khởi động node đầu tiên
Để khởi động node đầu tiên, bạn sẽ cần sử dụng một tập lệnh khởi động đặc biệt. Cách bạn đã cấu hình Galera Cluster là mỗi node khi khởi động sẽ cố gắng kết nối tới ít nhất một node khác được chỉ định trong tệp galera.cnf để lấy trạng thái ban đầu của nó.
Nếu không sử dụng tập lệnh galera_new_cluster, cho phép systemd truyền tham số --wsrep-new-cluster, việc sử dụng systemctl start mariadb thông thường sẽ thất bại vì không có node nào đang chạy để node đầu tiên kết nối.
galera-node-01$ sudo galera_new_cluster
Tập lệnh này sẽ không hiển thị bất kỳ kết quả nào khi thực thi thành công. Khi tập lệnh này thành công, node sẽ được đăng ký là một phần của Galera Cluster và bạn có thể kiểm tra bằng tập lệnh sau:
galera-node-01$ mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
Bạn sẽ thấy đầu ra sau đây chỉ ra rằng có một node trong cluster:
Output +--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 1 | +--------------------+-------+
Trên các node còn lại, bạn có thể bắt đầu mariadb bình thường. Chúng sẽ tìm kiếm bất kỳ thành viên nào trong danh sách cluster đang hoạt động, sau đó họ sẽ tham gia vào Galera Cluster.
-
Khởi động node thứ 2
Bây giờ bạn có thể khởi động node thứ hai. Khởi động mariadb bằng cách chạy lệnh sau:
galera-node-02$ sudo systemctl start mariadb
Không có đầu ra hiển thị nếu thực thi thành công. Bạn sẽ thấy kích thước cụm tăng lên khi mỗi node kết nối thành công:
galera-node-02$ mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
Bạn sẽ thấy đầu ra sau đây cho biết node thứ hai đã tham gia vào cụm và tổng số node là hai.
Output +--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 2 | +--------------------+-------+
-
Khởi động node thứ 3
Bây giờ là lúc đưa node thứ ba lên. Khởi động mariadb với:
galera-node-03$ sudo systemctl start mariadb
Chạy lệnh sau để tìm kích thước của Galera Cluster:
galera-node-03$ mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
Bạn sẽ thấy đầu ra sau đây, cho thấy node thứ ba đã tham gia vào cụm và tổng số node trong cụm là ba.
Output +--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 3 | +--------------------+-------+
Tại thời điểm này, toàn bộ cụm đã hoạt động và giao tiếp thành công. Tiếp theo, bạn có thể đảm bảo việc thiết lập hoạt động bằng cách kiểm tra sao chép dữ liệu trong phần tiếp theo.
Bước 8 - Kiểm tra sao chép dữ liệu (replication)
Các bước trước đó để cụm của bạn có thể thực hiện sao chép dữ liệu từ bất kỳ node nào đến các node khác, được gọi là sao chép hoạt động- hoạt động (active-active replication). Tiếp theo, làm theo các bước sau để kiểm tra và xem xét xem sao chép dữ liệu có hoạt động như dự kiến không:
-
Ghi dữ liệu vào node đầu tiên
Đầu tiên, bạn sẽ thực hiện các thay đổi cơ sở dữ liệu trên node đầu tiên. Các lệnh sau sẽ tạo một cơ sở dữ liệu có tên "playground" và một bảng trong cơ sở dữ liệu này có tên "equipment".
galera-node-01$ mysql -u root -p -e 'CREATE DATABASE playground; galera-node-01$ CREATE TABLE playground.equipment ( id INT NOT NULL AUTO_INCREMENT, type VARCHAR(50), quant INT, color VARCHAR(25), PRIMARY KEY(id)); galera-node-01$ INSERT INTO playground.equipment (type, quant, color) VALUES ("slide", 2, "blue");'
Trong lệnh trước đó, câu lệnh CREATE DATABASE tạo một cơ sở dữ liệu có tên là "playground". Câu lệnh CREATE tạo một bảng có tên "equipment" bên trong cơ sở dữ liệu playground, với một cột định danh tự động tăng gọi là id và các cột khác. Các cột type, quant và color được định nghĩa để lưu trữ loại, số lượng và màu sắc của trang thiết bị tương ứng. Câu lệnh INSERT chèn một dòng dữ liệu có loại slide, số lượng 2 và màu sắc là blue.
Bây giờ bạn có một giá trị trong bảng của bạn.
-
Đọc và ghi dữ liệu trên node thứ hai
Tiếp theo, hãy kiểm tra trên node thứ hai để xác minh rằng việc sao chép dữ liệu đang hoạt động:
galera-node-02$ mysql -u root -p -e 'SELECT * FROM playground.equipment;'
Nếu việc sao chép dữ liệu đang hoạt động, dữ liệu mà bạn đã nhập trên node đầu tiên sẽ được hiển thị trên node thứ hai.
Output +----+-------+-------+-------+ | id | type | quant | color | +----+-------+-------+-------+ | 1 | slide | 2 | blue | +----+-------+-------+-------+
Từ cùng một node này, bạn có thể ghi dữ liệu vào cụm.
galera-node-02$ mysql -u root -p -e 'INSERT INTO playground.equipment (type, quant, color) VALUES ("swing", 10, "yellow");'
-
Đọc và ghi dữ liệu trên node thứ 3
Từ node thứ ba, bạn có thể đọc tất cả dữ liệu này bằng cách truy vấn bảng một lần nữa.
galera-node-03$ mysql -u root -p -e 'SELECT * FROM playground.equipment;'
Bạn sẽ thấy đầu ra sau đây hiển thị hai hàng:
Output +----+-------+-------+--------+ | id | type | quant | color | +----+-------+-------+--------+ | 1 | slide | 2 | blue | | 2 | swing | 10 | yellow | +----+-------+-------+--------+
Từ node thứ ba, bạn có thể thêm một giá trị khác:
galera-node-03$ mysql -u root -p -e 'INSERT INTO playground.equipment (type, quant, color) VALUES ("seesaw", 3, "green");'
-
Đọc dữ liệu trên node thứ nhất
Trở lại node đầu tiên, bạn có thể xác minh rằng dữ liệu của bạn đã có ở mọi nơi:
galera-node-01$ mysql -u root -p -e 'SELECT * FROM playground.equipment;'
Bạn sẽ thấy đầu ra sau đây, cho thấy các hàng dữ liệu có sẵn trên node đầu tiên.
Output +----+--------+-------+--------+ | id | type | quant | color | +----+--------+-------+--------+ | 1 | slide | 2 | blue | | 2 | swing | 10 | yellow | | 3 | seesaw | 3 | green | +----+--------+-------+--------+
Bạn đã xác minh thành công rằng bạn có thể ghi dữ liệu vào tất cả các node và sao chép đang diễn ra đúng cách.
Ở thời điểm này, bạn đã có một Galera Cluster thử nghiệm với ba node hoạt động. Nếu bạn định sử dụng một Galera Cluster trong môi trường sản xuất, bạn nên bắt đầu với ít nhất năm node.
Trước khi sử dụng trong sản xuất, bạn có thể xem xét một số công cụ khác để sao chép trạng thái (SST) như XtraBackup. Chúng giúp bạn thiết lập các node mới một cách nhanh chóng và không gây gián đoạn lớn đến các node đang hoạt động. Điều này không ảnh hưởng đến sao chép thực tế nhưng là một vấn đề khi các node được khởi tạo.
Mọi người cũng tìm kiếm: mysql cluster là gì, mariadb cluster, mariadb galera cluster, cluster mariadb, mariadb active active, galera cluster mariadb.
Mọi người cùng tìm kiếm: mysql cluster là gì, galera, mariadb galera cluster, galera cluster mariadb, cluster galera mariadb