Hướng Dẫn Cài Đặt Percona XtraDB Cluster Trên Ubuntu/Debian Chi Tiết
Percona XtraDB Cluster (PXC) là giải pháp clustering cao cấp cho MySQL, đảm bảo high-availability, chống downtime và mất dữ liệu, có khả năng mở rộng tuyến tính. Trong bài viết này, chúng ta sẽ đi chi tiết từ khái niệm đến cách cài đặt và vận hành một cluster hoàn chỉnh.
Percona XtraDB Cluster Là Gì?
Percona XtraDB Cluster là giải pháp database clustering mã nguồn mở, kết hợp:
- Percona Server for MySQL với XtraDB storage engine
- Galera Library cho write-set replication (đồng bộ hóa các thành phần)
- Percona XtraBackup làm phương thức truyền dữ liệu mặc định (SST)
Tính năng nổi bật
- Replication đồng bộ – Dữ liệu được ghi vào tất cả các node cùng lúc, hoặc không ghi nếu bất kỳ node nào thất bại
- Multi-master replication – Bất kỳ node nào cũng có thể kích hoạt cập nhật dữ liệu
- Parallel replication – Nhiều thread thực hiện replication ở mức row
- Tự động thêm node – Node mới được thêm vào sẽ tự động đồng bộ
- Tính nhất quán dữ liệu – Không còn tình trạng các node không đồng bộ
- Mã hóa SSL tự động – Bảo mật dữ liệu khi truyền giữa các node
Kiến trúc Cluster
Cluster gồm các node, mỗi node chứa cùng bộ dữ liệu và được đồng bộ nhau. Cấu hình khuyến nghị là ít nhất 3 node, tuy nhiên 2 node vẫn hoạt động được.
Những lưu ý quan trọng
- Node mới cần copy toàn bộ dataset (chi phí cho CSDL lớn)
- Không lý tưởng cho việc scale ghi – ghi phải truyền tới tất cả các node
- Dữ liệu được nhân bản trên các node
Hướng Dẫn Cài Đặt Chi Tiết
Bước 1: Cập Nhật Hệ Thống
sudo apt update sudo apt upgrade -y
Bước 2: Cài Đặt Các Gói Phụ Thuộc
sudo apt install -y wget gnupg2 lsb-release curl
Bước 3: Tải Và Cài Đặt Percona Repository
wget https://repo.percona.com/apt/percona-release_latest.generic_all.deb sudo dpkg -i percona-release_latest.generic_all.deb
Bước 4: Kích Hoạt Repository PXC 8.0
sudo apt update sudo percona-release setup pxc80
Bước 5: Cài Đặt Percona XtraDB Cluster
sudo apt install -y percona-xtradb-cluster
Trong quá trình cài đặt, bạn sẽ được yêu cầu đặt root password cho database.
Tùy chọn: Cài Đặt Phiên Bản Đầy Đủ
Nếu cần thêm công cụ debug, cài đặt phiên bản đầy đủ:
sudo apt install -y percona-xtradb-cluster-full
Cấu Hình Cơ Bản
Cấu Hình Node trong File Config
Mở file cấu hình tại /etc/mysql/mysql.conf.d/pxc.cnf hoặc /etc/my.cnf:
[mysqld] # Node identification server-id=1 pxc-node-name=pxc1 # Cluster communication wsrep_provider=/usr/lib/galera3/libgalera_smm.so wsrep_cluster_name=my_cluster wsrep_cluster_address=gcomm://192.168.1.101,192.168.1.102,192.168.1.103 # Replication settings wsrep_sst_method=xtrabackup-v2 wsrep_sst_auth=sstuser:password # Performance settings innodb_buffer_pool_size=256M innodb_log_file_size=64M # PXC specific pxc_encrypt_cluster_traffic=ON
Các Tham Số Quan Trọng
| Tham số | Mô tả |
|---|---|
wsrep_cluster_address | Địa chỉ các node trong cluster |
wsrep_cluster_name | Tên cluster |
wsrep_sst_method | Phương thức State Snapshot Transfer (xtrabackup-v2, clone, rsync) |
wsrep_sst_auth | Credentials cho SST (cần tạo trước) |
pxc-node-name | Tên duy nhất cho node |
innodb_buffer_pool_size | Bộ đệm cho InnoDB (khuyến nghị 50-80% RAM) |
Tạo User Cho SST
Đăng nhập MySQL và tạo user cho State Snapshot Transfer:
mysql> CREATE USER 'sstuser'@'localhost' IDENTIFIED BY 'password'; mysql> GRANT PROCESS, RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'sstuser'@'localhost'; mysql> FLUSH PRIVILEGES;
Khởi Động Và Kiểm Tra Cluster
Bước 1: Khởi Động Node Đầu Tiên (Bootstrap)
sudo systemctl start mysql@bootstrap
Quan trọng: Node được khởi động với mysql@bootstrap phải được dùng bằng cú pháp cùng tên.
Bước 2: Kiểm Tra Trạng Thái
mysql> show status like 'wsrep%';
Các chỉ số quan trọng cần kiểm tra:
| Variable | Giá trị mong muốn | Mô tả |
|---|---|---|
wsrep_cluster_size | 1 (lúc đầu) | Số node trong cluster |
wsrep_cluster_status | Primary | Trạng thái cluster (Primary = bình thường) |
wsrep_local_state_comment | Synced | Trạng thái đồng bộ của node |
wsrep_ready | ON | Node sẵn sàng xử lý query |
Bước 3: Thêm Node Khác
Sau khi node đầu tiên hoạt động, các node khác có thể khởi động bình thường:
sudo systemctl start mysql
Bước 4: Kiểm Tra Cluster Toàn Phần
mysql> show status like 'wsrep_cluster_size'; mysql> show status like 'wsrep_incoming_addresses';
Các Lệnh Quản Lý Cluster
Khởi Động/Dừng Node
# Khởi động node đầu tiên (bootstrap) sudo systemctl start mysql@bootstrap # Dừng node bootstrap sudo systemctl stop mysql@bootstrap # Khởi động node thông thường sudo systemctl start mysql # Dừng node sudo systemctl stop mysql # Restart node sudo systemctl restart mysql
Kiểm Tra Trạng Thái
# Xem tất cả wsrep status SHOW STATUS LIKE 'wsrep%'; # Xem các biến quan trọng SHOW STATUS LIKE 'wsrep_cluster_size'; SHOW STATUS LIKE 'wsrep_cluster_status'; SHOW STATUS LIKE 'wsrep_ready'; SHOW STATUS LIKE 'wsrep_local_state_comment'; SHOW STATUS LIKE 'wsrep_incoming_addresses'; # Từ command line mysqladmin -u root -p status mysqladmin -u root -p variables | grep wsrep
Kiểm Tra Log
# Xem log realtime sudo journalctl -u mysql -f # Xem error log sudo cat /var/log/mysql/error.log
Quản Lý User Replication
# Tạo user cho replication CREATE USER 'repl'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; # Kiểm tra user kết nối SHOW PROCESSLIST;
Những Lưu Ý Quan Trọng Khi Vận Hành
- Cluster tối thiểu 3 node để đảm bảo high-availability thực sự
- Không nên shutdown tất cả node cùng lúc – có thể mất dữ liệu
- Dùng
mysql@bootstrapchỉ khi khởi động cluster lần đầu hoặc sau khi tất cả node đã dừng - Backup trước khi thay đổi cấu hình
- Theo dõi
wsrep_cluster_sizethường xuyên để đảm bảo tất cả node đang hoạt động
So Sánh PXC Với MySQL Replication Truyền Thống
| Tiêu chí | Percona XtraDB Cluster | MySQL Replication |
|---|---|---|
| Replication | Đồng bộ (Synchronous) | Bất đồng bộ (Asynchronous) |
| Conflict Resolution | Tự động | Thủ công |
| Data Consistency | Nhất quán cao | Có thể khác nhau |
| Failover | Tự động, không downtime | Cần手动 xử lý |
| Write Scalability | Hạn chế (ghi phải đến tất cả) | Tốt hơn |
| Độ phức tạp | Cao hơn | Đơn giản hơn |
Kết Luận
Percona XtraDB Cluster là giải pháp high-availability mạnh mẽ cho MySQL, phù hợp cho các ứng dụng yêu cầu uptime cao và dữ liệu nhất quán. Tuy nhiên, việc triển khai đòi hỏi hiểu biết về Galera cluster và các tham số cấu hình.
Nếu bạn cần một giải pháp đơn giản hơn với replication bất đồng bộ, có thể cân nhắc MySQL Group Replication hoặc MariaDB Galera Cluster.
Câu Hỏi Thường Gặp (FAQ)
Percona XtraDB Cluster cần tối thiểu bao nhiêu node?
Khuyến nghị tối thiểu 3 node để đảm bảo high-availability thực sự. Tuy nhiên, 2 node vẫn hoạt động được nhưng không đảm bảo failover nếu một node bị lỗi.
Sự khác nhau giữa SST và IST trong PXC?
SST (State Snapshot Transfer) là truyền toàn bộ dữ liệu từ một node sang node mới. IST (Incremental State Transfer) chỉ truyền các thay đổi增量, nhanh hơn nhưng chỉ áp dụng khi node cần join lại cluster.
Có thể dùng PXC cho ứng dụng write-heavy không?
PXC không lý tưởng cho write-heavy vì mỗi ghi phải được truyền đến tất cả các node. Với workload write-intensive, nên cân nhắc sharding hoặc các giải pháp có thể scale writes.
Làm sao để backup dữ liệu trên PXC?
Sử dụng Percona XtraBackup để backup từ bất kỳ node nào. Khuyến nghị backup từ node không phải donor để tránh ảnh hưởng đến cluster.
Cluster bị split-brain xử lý thế nào?
Galera library xử lý split-brain bằng cách chỉ cho phép partition có đa số node hoạt động. Nếu cluster bị chia đôi, partition nhỏ hơn sẽ không chấp nhận ghi.