Cấu hình GlusterFS trên CentOS Stream 9: Xây dựng ‘pháo đài’ lưu trữ dữ liệu chịu lỗi

CentOS tutorial - IT technology blog
CentOS tutorial - IT technology blog

Lưu trữ dữ liệu: Khi một ổ cứng là chưa đủ

Nếu bạn từng thức trắng đêm vì server bỗng dưng lăn đùng ra chết ổ cứng, bạn sẽ hiểu cảm giác kinh hoàng khi dữ liệu khách hàng bốc hơi chỉ trong tích tắc. Mình từng dùng rsync để backup định kỳ, nhưng thực tế luôn có độ trễ. Nếu server sập lúc 2h sáng, 15 phút dữ liệu quý giá bị mất giữa hai lần backup vẫn là một thảm họa cho doanh nghiệp. Để đạt được tính sẵn sàng cao (High Availability), chúng ta cần một giải pháp “cứng” hơn: GlusterFS.

GlusterFS là hệ thống tệp phân tán cho phép gom nhiều ổ cứng từ các server vật lý khác nhau thành một kho lưu trữ khổng lồ duy nhất. Khả năng nhân bản (replication) dữ liệu theo thời gian thực chính là điểm đắt giá nhất của nó. Khi một node gặp sự cố, node còn lại vẫn hoạt động bình thường. Người dùng cuối thậm chí không hề nhận thấy sự gián đoạn nào.

Sau khi migrate hệ thống từ CentOS 7 cũ kỹ sang CentOS Stream 9, mình nhận ra việc setup trên nền tảng mới có vài thay đổi quan trọng về repository. Nếu không nắm rõ, bạn rất dễ lúng túng khi gặp lỗi dependency.

Chuẩn bị môi trường Lab

Trong bài hướng dẫn này, mình sẽ dùng 2 node CentOS Stream 9. Thực tế khi triển khai production, mình khuyên bạn nên dùng ít nhất 3 node. Con số 3 giúp hệ thống đạt được trạng thái Quorum, tránh hiện tượng split-brain – lỗi phổ biến khi hai node không thống nhất được dữ liệu nào là bản mới nhất.

  • Node 1: gfs-node01 (192.168.1.101)
  • Node 2: gfs-node02 (192.168.1.102)
  • Ổ cứng phụ: Mỗi node gắn thêm một ổ 20GB (thường là /dev/sdb). Một lưu ý nhỏ: Tuyệt đối không dùng chung phân vùng / (root) để chạy GlusterFS. Nếu ổ đầy, toàn bộ hệ điều hành sẽ bị treo cứng ngay lập tức.

Khai báo file hosts

Các node cần nhận diện nhau qua hostname thay vì chỉ dùng IP khô khan. Bạn hãy chỉnh sửa file /etc/hosts trên cả 2 node:

192.168.1.101 gfs-node01
192.168.1.102 gfs-node02

Cài đặt GlusterFS trên CentOS Stream 9

Repository mặc định của CentOS 9 sẽ không có sẵn GlusterFS. Bạn cần kích hoạt repo từ nhóm SIG (Special Interest Group) để lấy bản dựng ổn định nhất.

1. Kích hoạt Repository

Thao tác lệnh sau trên cả 2 node:

# Cài đặt gói release để có repo gluster
sudo dnf install centos-release-gluster -y

# Kích hoạt repo CRB (Code Ready Builder) - thay thế cho PowerTools cũ
sudo dnf config-manager --set-enabled crb

2. Triển khai dịch vụ

sudo dnf install glusterfs-server -y

# Khởi chạy và thiết lập tự động chạy khi boot
sudo systemctl enable --now glusterd

# Kiểm tra nhanh trạng thái
sudo systemctl status glusterd

3. Cấu hình Firewall

Rất nhiều bạn loay hoay không biết tại sao các node không kết nối được dù dịch vụ đã chạy. GlusterFS sử dụng port 24007 và dải port từ 49152 trở lên cho mỗi Brick. Cách nhanh nhất và an toàn cho mạng nội bộ là:

sudo firewall-cmd --add-service=glusterfs --permanent
sudo firewall-cmd --reload

Thiết lập Cluster và Volume

Kết nối các Node (Peering)

Đứng từ gfs-node01, bạn thực hiện lệnh kết nối tới người bạn láng giềng:

sudo gluster peer probe gfs-node02

Để chắc chắn cả hai đã “bắt tay” nhau thành công, hãy gõ:

sudo gluster peer status

Khi thấy dòng Peer in Cluster (Connected), bạn đã xong 50% quãng đường.

Tạo Brick lưu trữ

Ở đây mình format ổ /dev/sdb với định dạng XFS để tối ưu hiệu suất cho GlusterFS:

sudo mkfs.xfs /dev/sdb
sudo mkdir -p /data/glusterfs/myvol/brick1
sudo mount /dev/sdb /data/glusterfs/myvol/brick1

# Nhớ thêm vào /etc/fstab để ổ tự mount sau khi khởi động lại.

Tạo Replicated Volume

Bây giờ là lúc tạo một volume tên gv0 với chế độ replica 2 (copy 1:1 sang cả hai node):

sudo gluster volume create gv0 replica 2 gfs-node01:/data/glusterfs/myvol/brick1/brick gfs-node02:/data/glusterfs/myvol/brick1/brick force
sudo gluster volume start gv0

Kiểm tra và Vận hành

Để xem Volume có đang “khỏe mạnh” hay không, hãy dùng lệnh:

sudo gluster volume info

Nếu muốn soi kỹ hơn về độ trễ (latency) và các tiến trình đang chạy, hãy thử:

sudo gluster volume status gv0

Kết nối từ Client

Trên máy client, bạn chỉ cần cài glusterfs-client và mount đơn giản như sau:

sudo mount -t glusterfs gfs-node01:/gv0 /mnt/storage

Một mẹo nhỏ: Dù bạn mount qua IP của node01, nhưng nếu node này chết, client sẽ tự động chuyển hướng sang node02. Metadata được tải về lúc mount cho phép client biết rõ cấu trúc của toàn bộ cluster.

Kinh nghiệm thực chiến: Đừng để rơi vào Split-brain

Split-brain xảy ra khi kết nối giữa 2 node bị đứt đột ngột lúc cả hai đang ghi dữ liệu. GlusterFS sẽ khóa file đó lại vì không biết bản nào mới là “chính chủ”.

  • Giải pháp tốt nhất: Luôn dùng 3 node hoặc thêm một node Arbiter (node trọng tài, không tốn nhiều dung lượng lưu trữ).
  • Cách xử lý: Kiểm tra file lỗi bằng lệnh gluster volume heal gv0 info split-brain. Bạn sẽ phải tự tay chọn node nào có dữ liệu đúng để khôi phục.

Xây dựng hệ thống lưu trữ phân tán không hề khó nếu bạn đi đúng trình tự. Với GlusterFS trên CentOS Stream 9, mình đã có thể kê gối ngủ ngon vì biết dữ liệu luôn có bản sao dự phòng an toàn. Chúc các bạn triển khai thành công!

Share: