Kiến thức Hữu ích 😍

Cấu hình Galera Cluster MariaDB trên CentOS 7 | Hướng dẫn chi tiết


Bạn đã bao giờ tự hỏi làm thế nào các hệ thống lớn như website thương mại điện tử hay ứng dụng tài chính có thể hoạt động liên tục mà không bị gián đoạn, ngay cả khi một máy chủ gặp sự cố? Câu trả lời nằm ở các giải pháp đồng bộ hóa và tính sẵn sàng cao, và Galera Cluster chính là một trong những công nghệ hàng đầu cho mục tiêu này. Trong môi trường doanh nghiệp, việc mất mát dữ liệu hoặc ngừng hoạt động dù chỉ trong vài phút cũng có thể gây ra thiệt hại nghiêm trọng.

Các phương pháp sao lưu truyền thống thường đối mặt với thách thức về độ trễ, khi dữ liệu trên các máy chủ phụ không được cập nhật tức thời so với máy chủ chính. Điều này tạo ra rủi ro mất dữ liệu quan trọng khi có sự cố bất ngờ. Galera Cluster ra đời để giải quyết triệt để vấn đề này. Kết hợp với MariaDB, nó tạo thành một hệ thống cơ sở dữ liệu mạnh mẽ, cung cấp giải pháp clustering đa chủ (multi-master), nơi mọi node trong cụm đều có thể đọc và ghi dữ liệu. Dữ liệu được đồng bộ hóa gần như ngay lập tức trên toàn bộ cluster, đảm bảo tính nhất quán và loại bỏ hoàn toàn điểm lỗi đơn.

Bài viết này sẽ hướng dẫn bạn chi tiết từng bước để cấu hình Galera Cluster với MariaDB trên hệ điều hành CentOS 7, từ khâu chuẩn bị môi trường, cài đặt, thiết lập cấu hình cho đến kiểm tra và tối ưu hóa hệ thống.

Hình minh họa

Chuẩn bị môi trường và cài đặt CentOS 7

Trước khi đi sâu vào cấu hình phần mềm, việc chuẩn bị một nền tảng phần cứng và hệ điều hành ổn định là bước đầu tiên và quan trọng nhất. Một môi trường được thiết lập đúng cách sẽ đảm bảo cluster hoạt động hiệu quả và tránh được các sự cố không đáng có sau này.

Kiến trúc hệ thống và yêu cầu phần cứng

Để xây dựng một Galera Cluster, bạn cần tối thiểu ba máy chủ (node) để đảm bảo tính toàn vẹn dữ liệu và cơ chế phân xử (Quorum) hoạt động chính xác. Việc sử dụng số lẻ các node (3, 5, 7,…) được khuyến nghị để tránh tình trạng “split-brain”, nơi cluster không thể quyết định được node nào là chính xác khi mất kết nối mạng.

Về yêu cầu phần cứng, mỗi máy chủ nên có cấu hình tối thiểu như sau:

  • CPU: 2 cores
  • RAM: 2 GB (DDR4 là gì là công nghệ RAM phổ biến giúp tối ưu hiệu năng)
  • Ổ cứng: 20 GB (SSD được khuyến nghị để tăng tốc độ ghi và đồng bộ)

Yếu tố quan trọng nhất chính là mạng. Các node trong cluster cần được kết nối qua một mạng nội bộ (LAN) tốc độ cao và có độ trễ thấp. Mọi sự chậm trễ trong mạng sẽ ảnh hưởng trực tiếp đến hiệu suất đồng bộ hóa của toàn bộ cluster. Do đó, hãy đảm bảo băng thông mạng ổn định, lý tưởng là từ 1Gbps trở lên.

Hình minh họa

Cài đặt và cấu hình CentOS 7

Quá trình cài đặt hệ điều hành CentOS 7 khá đơn giản và bạn có thể chọn phiên bản “Minimal Install” để có một hệ thống gọn nhẹ và bảo mật. Sau khi cài đặt xong hệ điều hành trên tất cả các node, bước tiếp theo là cấu hình mạng và tường lửa.

Bạn cần đặt địa chỉ IP tĩnh cho mỗi node để chúng không thay đổi sau mỗi lần khởi động lại. Điều này rất quan trọng vì địa chỉ IP sẽ được khai báo trong file cấu hình của cluster.

Tiếp theo, chúng ta cần mở các cổng cần thiết trên tường lửa (firewalld) để các node Galera có thể giao tiếp với nhau. Galera Cluster sử dụng các cổng sau:

  • 3306/tcp: Cổng mặc định của MySQL/MariaDB.
  • 4567/tcp/udp: Cổng giao tiếp và sao chép dữ liệu của Galera Cluster.
  • 4568/tcp: Cổng cho Incremental State Transfer (IST).
  • 4444/tcp: Cổng cho State Snapshot Transfer (SST).

Bạn có thể mở các cổng này bằng lệnh sau trên mỗi node:

sudo firewall-cmd --permanent --add-port={3306/tcp,4567/tcp,4567/udp,4568/tcp,4444/tcp}
sudo firewall-cmd --reload

Sau khi hoàn tất, hệ điều hành của bạn đã sẵn sàng cho việc cài đặt MariaDB và Galera.

Cài đặt MariaDB và các phần mềm cần thiết

Khi môi trường CentOS 7 đã được chuẩn bị, chúng ta sẽ tiến hành cài đặt MariaDB và các thành phần mở rộng cần thiết để kích hoạt tính năng Galera Cluster. Việc lựa chọn phiên bản MariaDB phù hợp và cài đặt đúng cách là yếuế chốt để đảm bảo cluster hoạt động ổn định.

Hình minh họa

Thêm repository MariaDB và cập nhật hệ thống

Phiên bản MariaDB mặc định trong kho lưu trữ (repository) của CentOS 7 thường khá cũ và có thể không tương thích tốt nhất với Galera. Vì vậy, chúng ta nên thêm kho lưu trữ chính thức từ MariaDB để cài đặt phiên bản mới và ổn định hơn.

Đầu tiên, hãy tạo một file repository mới. Bạn có thể tạo file /etc/yum.repos.d/MariaDB.repo và thêm nội dung sau vào đó. Ví dụ dưới đây sử dụng MariaDB phiên bản 10.5:

[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.5/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

Sau khi lưu file, hãy chạy lệnh cập nhật hệ thống để làm mới danh sách gói phần mềm từ repository vừa thêm:

sudo yum update -y

Lệnh này sẽ đảm bảo hệ thống của bạn nhận diện được các gói cài đặt từ kho MariaDB mới, sẵn sàng cho bước tiếp theo.

Cài đặt MariaDB và Galera plugin

Với repository đã được cấu hình, giờ đây bạn có thể cài đặt MariaDB server cùng với Galera. Galera không phải là một phần mềm riêng biệt mà là một plugin được tích hợp sẵn trong các gói cài đặt của MariaDB từ phiên bản 10.1 trở đi.

Thực hiện lệnh sau trên tất cả các node để cài đặt các gói cần thiết:

sudo yum install MariaDB-server MariaDB-client galera -y

Gói MariaDB-server chứa máy chủ cơ sở dữ liệu, MariaDB-client cung cấp các công cụ dòng lệnh để tương tác, và galera chứa các thư viện cần thiết cho việc clustering.

Sau khi cài đặt thành công, hãy khởi động dịch vụ MariaDB và kích hoạt nó để tự chạy mỗi khi hệ thống khởi động:

sudo systemctl start mariadb
sudo systemctl enable mariadb

Lúc này, MariaDB đang chạy ở chế độ độc lập (standalone) trên từng node. Bạn có thể chạy lệnh mysql_secure_installation để thiết lập mật khẩu root và gỡ bỏ các cài đặt mặc định không an toàn. Hãy dừng dịch vụ MariaDB trên tất cả các node trước khi chuyển sang bước cấu hình cluster.

sudo systemctl stop mariadb

Đến đây, các phần mềm cần thiết đã được cài đặt và sẵn sàng để được cấu hình thành một cluster hoàn chỉnh.

Hình minh họa

Thiết lập cấu hình Galera Cluster trên MariaDB

Đây là bước quan trọng nhất, nơi chúng ta sẽ biến các máy chủ MariaDB độc lập thành một cụm đồng bộ hóa dữ liệu mạnh mẽ. Việc cấu hình chính xác các thông số trong file my.cnf sẽ quyết định sự thành công của toàn bộ hệ thống cluster.

Cấu hình file my.cnf cho Galera Cluster

Trên mỗi node, bạn cần tạo một file cấu hình riêng cho Galera. Vị trí phổ biến là /etc/my.cnf.d/galera.cnf. Nội dung file này sẽ khai báo các thông số để MariaDB biết cách kết nối và đồng bộ với các node khác.

Dưới đây là một mẫu cấu hình cơ bản cho file galera.cnf. Bạn cần tùy chỉnh các giá trị wsrep_cluster_address, wsrep_node_name, và wsrep_node_address cho từng node tương ứng.

[galera]
# Các thông số bắt buộc
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
wsrep_cluster_name="azweb_cluster"
wsrep_cluster_address="gcomm://192.168.1.101,192.168.1.102,192.168.1.103"
wsrep_sst_method=rsync

# Cấu hình riêng cho từng node
wsrep_node_name="node1"
wsrep_node_address="192.168.1.101"

# Các thông số khác
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2

Giải thích các thông số quan trọng:

  • wsrep_cluster_address: Liệt kê địa chỉ IP của tất cả các node trong cluster. Định dạng gcomm:// là bắt buộc.
  • wsrep_node_address: Địa chỉ IP của chính node đang được cấu hình.
  • wsrep_node_name: Tên định danh duy nhất cho node này.
  • wsrep_cluster_name: Tên của cluster, phải giống nhau trên tất cả các node.
  • wsrep_sst_method: Phương thức truyền tải dữ liệu ban đầu khi một node mới tham gia. rsync là một lựa chọn phổ biến và đơn giản.

Hãy chắc chắn bạn đã tạo và tùy chỉnh file này trên tất cả các node trong cluster của mình.

Hình minh họa

Khởi tạo và đồng bộ các node trong cluster

Sau khi cấu hình, quá trình khởi động cluster cần tuân theo một trình tự đặc biệt. Bạn không thể khởi động tất cả các node cùng một lúc.

Bước 1: Khởi động node đầu tiên (Bootstrap)

Trên node đầu tiên (ví dụ: node1), bạn cần khởi động cluster bằng một lệnh đặc biệt. Lệnh này báo cho MariaDB rằng đây là node khởi tạo một cluster hoàn toàn mới.

sudo galera_new_cluster

Sau khi lệnh này chạy thành công, node đầu tiên sẽ hoạt động và tạo ra một cluster mới với chỉ một thành viên.

Bước 2: Khởi động các node còn lại

Trên node thứ hai và thứ ba, bạn chỉ cần khởi động dịch vụ MariaDB theo cách thông thường:

sudo systemctl start mariadb

Khi các node này khởi động, chúng sẽ đọc file cấu hình galera.cnf, tìm đến địa chỉ trong wsrep_cluster_address (chính là node đầu tiên đang chạy), kết nối và yêu cầu đồng bộ dữ liệu. Quá trình này được gọi là State Snapshot Transfer (SST), nơi node mới sẽ sao chép toàn bộ dữ liệu từ một node hiện có để đảm bảo tính nhất quán.

Sau khi SST hoàn tất, các node mới sẽ chính thức tham gia vào cluster. Bạn có thể kiểm tra trạng thái để xác nhận tất cả các node đã kết nối thành công.

Kiểm tra trạng thái và hiệu năng của cluster

Sau khi đã thiết lập và khởi động thành công cluster, việc quan trọng tiếp theo là kiểm tra để đảm bảo mọi thứ hoạt động đúng như mong đợi. Giám sát trạng thái và hiệu năng thường xuyên sẽ giúp bạn phát hiện sớm các vấn đề và duy trì sự ổn định của hệ thống.

Hình minh họa

Các lệnh kiểm tra trạng thái cluster và đồng bộ dữ liệu

Cách đơn giản nhất để kiểm tra trạng thái của Galera Cluster là đăng nhập vào MariaDB trên bất kỳ node nào và thực thi các câu lệnh SQL đặc biệt.

Đăng nhập vào MariaDB:

mysql -u root -p

Sau đó, chạy các câu lệnh sau để xem các biến trạng thái của wsrep (WriteSet Replication):

SHOW GLOBAL STATUS LIKE 'wsrep_%';

Một số biến quan trọng bạn cần chú ý:

  • wsrep_cluster_size: Hiển thị số lượng node đang hoạt động trong cluster. Giá trị này phải khớp với số node bạn đã cấu hình (ví dụ: 3).
  • wsrep_local_state_comment: Cho biết trạng thái hiện tại của node. Giá trị Synced có nghĩa là node đã đồng bộ và sẵn sàng hoạt động.
  • wsrep_incoming_addresses: Liệt kê địa chỉ IP của các node khác đang kết nối đến node hiện tại.
  • wsrep_cluster_status: Trạng thái của toàn bộ cluster. Giá trị Primary cho thấy cluster đang hoạt động bình thường.

Nếu wsrep_cluster_size hiển thị đúng số lượng node và wsrep_local_state_commentSynced trên tất cả các node, xin chúc mừng, cluster của bạn đã được thiết lập thành công!

Đánh giá hiệu năng và tối ưu hóa cluster

Galera Cluster mang lại tính sẵn sàng cao nhưng cũng có những yếu tố ảnh hưởng đến hiệu năng cần được quan tâm. Việc đồng bộ dữ liệu trên tất cả các node sẽ tạo ra một độ trễ nhất định cho các thao tác ghi.

Các chỉ số hiệu năng cần theo dõi:

  • Flow Control: Khi một node xử lý chậm hơn các node khác, Galera sẽ kích hoạt cơ chế “Flow Control”, tạm dừng các giao dịch trên các node nhanh hơn để node chậm có thời gian bắt kịp. Bạn có thể theo dõi biến wsrep_flow_control_paused để xem tần suất xảy ra tình trạng này. Nếu chỉ số này tăng liên tục, có thể node đó đang bị quá tải hoặc gặp vấn đề về phần cứng.
  • Replication Latency: Độ trễ giữa thời điểm một giao dịch được thực hiện trên một node và thời điểm nó được áp dụng trên các node khác. Độ trễ cao có thể do mạng chậm hoặc do các giao dịch quá lớn.

Để tối ưu hóa, bạn có thể xem xét các kỹ thuật sau:

  • Chia các giao dịch ghi lớn thành nhiều giao dịch nhỏ hơn.
  • Nâng cấp hạ tầng mạng để giảm độ trễ.
  • Sử dụng ổ cứng SSD để tăng tốc độ ghi và đồng bộ.
  • Tinh chỉnh các tham số InnoDB để phù hợp với khối lượng công việc của bạn.

Việc tối ưu hóa là một quá trình liên tục, đòi hỏi sự theo dõi và điều chỉnh thường xuyên để đạt được hiệu suất tốt nhất.

Các lưu ý và mẹo vận hành hệ thống cluster ổn định

Vận hành một hệ thống cluster không chỉ dừng lại ở việc cài đặt và cấu hình ban đầu. Để đảm bảo cluster hoạt động ổn định và an toàn trong dài hạn, bạn cần tuân thủ các nguyên tắc và thực hành tốt nhất trong quá trình quản trị hàng ngày.

  • Thiết lập bảo mật mạng nội bộ: Giao tiếp giữa các node Galera nên được thực hiện trên một mạng riêng biệt và được bảo vệ. Tránh để các cổng giao tiếp của Galera tiếp xúc trực tiếp với Internet. Sử dụng tường lửa để chỉ cho phép kết nối từ các địa chỉ IP của các node trong cluster.
  • Đảm bảo đồng bộ thời gian hệ thống: Thời gian trên tất cả các node phải được đồng bộ hóa một cách chính xác. Sai lệch thời gian có thể gây ra các lỗi không mong muốn trong quá trình đồng bộ dữ liệu. Sử dụng dịch vụ NTP (Network Time Protocol) để tự động đồng bộ thời gian cho tất cả các máy chủ là một yêu cầu bắt buộc.
  • Tự động phát hiện và xử lý node bị lỗi: Một trong những ưu điểm của Galera là khả năng tự động loại bỏ node bị lỗi ra khỏi cluster. Khi một node gặp sự cố và mất kết nối, các node còn lại sẽ tự động cấu hình lại cluster để tiếp tục hoạt động. Khi node đó hoạt động trở lại, nó sẽ tự động kết nối và đồng bộ dữ liệu.
  • Lên kế hoạch backup và kiểm thử khôi phục dữ liệu: Mặc dù cluster cung cấp tính sẵn sàng cao, nó không thay thế cho việc sao lưu dữ liệu. Các lỗi do con người (ví dụ: xóa nhầm bảng) sẽ được nhân bản ngay lập tức trên toàn bộ cluster. Do đó, hãy thiết lập một lịch trình sao lưu định kỳ và quan trọng hơn là thường xuyên kiểm thử quy trình khôi phục để đảm bảo dữ liệu của bạn luôn an toàn.

Bằng cách tuân thủ những lưu ý này, bạn có thể tăng cường đáng kể độ tin cậy và tuổi thọ của hệ thống MariaDB Galera Cluster.

Hình minh họa

Các vấn đề thường gặp và cách khắc phục

Trong quá trình triển khai và vận hành Galera Cluster, bạn có thể sẽ gặp phải một số sự cố phổ biến. Hiểu rõ nguyên nhân và cách khắc phục sẽ giúp bạn giải quyết vấn đề một cách nhanh chóng và hiệu quả.

Node không tham gia được vào cluster

Đây là một trong những lỗi phổ biến nhất khi thiết lập. Một node mới không thể kết nối và đồng bộ với các node hiện có trong cluster.

  • Nguyên nhân phổ biến:
    • Tường lửa chặn kết nối: Các cổng cần thiết (3306, 4567, 4444,…) chưa được mở trên một hoặc nhiều node.
    • Cấu hình sai: Địa chỉ trong wsrep_cluster_address không chính xác hoặc tên wsrep_cluster_name không khớp nhau giữa các node.
    • SELinux: SELinux ở chế độ Enforcing có thể ngăn chặn MariaDB thực hiện các kết nối mạng cần thiết.
    • Lỗi mạng: Các vấn đề về kết nối vật lý hoặc định tuyến giữa các node.
  • Hướng xử lý:
    • Kiểm tra lại cấu hình tường lửa trên tất cả các node.
    • Rà soát kỹ file galera.cnf trên từng node để đảm bảo các thông số là chính xác.
    • Thử tạm thời chuyển SELinux sang chế độ Permissive bằng lệnh sudo setenforce 0 để xem có phải nguyên nhân do SELinux hay không.
    • Sử dụng các công cụ như pingtraceroute để kiểm tra kết nối mạng giữa các node.

Đồng bộ dữ liệu bị chậm hoặc lỗi SST

Quá trình State Snapshot Transfer (SST) xảy ra khi một node mới tham gia và cần sao chép toàn bộ dữ liệu từ một node hiện có. Quá trình này có thể bị chậm hoặc thất bại.

  • Nguyên nhân phổ biến:
    • Dữ liệu quá lớn: Với cơ sở dữ liệu hàng trăm GB, quá trình SST có thể mất rất nhiều thời gian và gây tải nặng lên node nguồn.
    • Mạng chậm: Băng thông mạng không đủ đáp ứng có thể khiến quá trình truyền dữ liệu kéo dài và gặp timeout.
    • Thiếu dung lượng ổ đĩa: Node mới không đủ dung lượng trống để chứa toàn bộ dữ liệu được sao chép.
    • Lỗi quyền: Người dùng được sử dụng cho quá trình SST (thường là root hoặc một người dùng chuyên dụng) không có đủ quyền để đọc/ghi dữ liệu.
  • Hướng xử lý:
    • Cân nhắc sử dụng phương thức SST khác như mariabackup, được cho là hiệu quả hơn rsync đối với cơ sở dữ liệu lớn.
    • Thực hiện SST trong thời gian hệ thống ít tải để giảm ảnh hưởng.
    • Đảm bảo dung lượng đĩa trống trên node mới lớn hơn kích thước của cơ sở dữ liệu.
    • Kiểm tra log của MariaDB trên cả node nguồn và node đích để tìm thông báo lỗi chi tiết liên quan đến SST.

Hình minh họa

Best Practices

Để hệ thống Galera Cluster của bạn không chỉ hoạt động mà còn hoạt động một cách tối ưu, an toàn và dễ quản lý, hãy áp dụng những thực hành tốt nhất sau đây. Đây là những kinh nghiệm được đúc kết từ thực tế vận hành các hệ thống cơ sở dữ liệu quy mô lớn.

  • Luôn kiểm tra cấu hình trước khi thêm node mới: Trước khi khởi động một node mới để tham gia cluster, hãy kiểm tra kỹ lưỡng file cấu hình. Một lỗi nhỏ như gõ sai địa chỉ IP cũng có thể khiến node không thể kết nối.
  • Giữ phiên bản MariaDB và Galera plugin cập nhật: Các phiên bản mới thường đi kèm với các bản vá lỗi bảo mật và cải tiến hiệu năng. Hãy lên kế hoạch cập nhật phần mềm một cách định kỳ, nhưng luôn thực hiện trên môi trường thử nghiệm trước khi áp dụng cho production.
  • Không tắt đồng thời nhiều node, tránh mất Quorum: Việc tắt nhiều hơn một nửa số node trong cluster sẽ khiến cluster mất Quorum và ngừng hoạt động để bảo vệ toàn vẹn dữ liệu. Nếu cần bảo trì, hãy thực hiện tuần tự trên từng node một.
  • Áp dụng giám sát liên tục hệ thống: Sử dụng các công cụ giám sát chuyên dụng như Prometheus, Grafana, hoặc Zabbix để theo dõi các chỉ số quan trọng của cluster (kích thước cluster, trạng thái node, flow control,…). Việc giám sát chủ động giúp bạn phát hiện vấn đề trước khi nó trở nên nghiêm trọng.
  • Cẩn trọng với tối ưu hóa nâng cao, luôn thử trên môi trường test: Mọi thay đổi về cấu hình, đặc biệt là các thông số liên quan đến InnoDB hoặc wsrep, đều có thể ảnh hưởng lớn đến hiệu suất và sự ổn định. Luôn kiểm thử các thay đổi trên một môi trường staging giống hệt production trước khi triển khai chính thức.

Hình minh họa

Kết luận

Qua bài viết này, chúng ta đã cùng nhau đi qua một hành trình chi tiết từ việc chuẩn bị môi trường, cài đặt, cấu hình cho đến vận hành và khắc phục sự cố cho một hệ thống MariaDB Galera Cluster trên CentOS 7. Việc triển khai thành công mô hình này mang lại những lợi ích vô cùng to lớn cho doanh nghiệp: loại bỏ điểm lỗi đơn, đảm bảo tính sẵn sàng cao cho cơ sở dữ liệu và khả năng mở rộng hệ thống một cách linh hoạt khi nhu cầu tăng lên.

Bằng cách áp dụng kiến trúc multi-master, hệ thống của bạn không chỉ an toàn hơn trước các sự cố phần cứng mà còn có thể phân bổ tải đọc và ghi trên nhiều node, cải thiện đáng kể hiệu suất tổng thể. Với hướng dẫn chi tiết từ AZWEB, chúng tôi tin rằng bạn đã có đủ kiến thức nền tảng để tự tin xây dựng một cluster mạnh mẽ và ổn định.

Hãy bắt đầu áp dụng ngay hôm nay để nâng tầm hạ tầng cơ sở dữ liệu của bạn. Đừng quên theo dõi các bài viết tiếp theo của AZWEB, nơi chúng tôi sẽ đi sâu hơn vào các chủ đề nâng cao về quản trị, tối ưu hóa và bảo mật cho hệ thống MariaDB Cluster.

Đánh giá