Hệ thống tệp phân tán GlusterFS: Kiến trúc và triển khai thực tế

GlusterFS là hệ thống lưu trữ phân tán mã nguồn mở, ban đầu do Gluster phát triển và hiện được Red Hat duy trì. Nó được thiết kế để đáp ứng nhu cầu lưu trữ dữ liệu quy mô lớn với khả năng mở rộng cao, hiệu suất mạnh mẽ và độ tin cậy vượt trội.

Kiến trúc cốt lõi

  • Mở rộng ngang (Scale-Out): Dễ dàng tăng dung lượng và hiệu năng bằng cách thêm node lưu trữ mới. Hỗ trợ mạng tốc độ cao như 10GbE hoặc InfiniBand.
  • Thuật toán Elastic Hash: Loại bỏ phụ thuộc vào máy chủ metadata, giúp tránh điểm nghẽn và lỗi đơn điểm. Dữ liệu được định vị trực tiếp qua hàm băm mà không cần truy vấn trung tâm.
  • Tính sẵn sàng cao: Tự động nhân bản dữ liệu (mirror/replica), tự sửa chữa khi phát hiện bất đồng bộ — hoạt động nền, gần như không ảnh hưởng hiệu năng.
  • Không gian tên thống nhất: Gộp toàn bộ không gian lưu trữ từ các node thành một "ổ đĩa ảo" duy nhất, dễ quản lý và truy cập.
  • Quản lý volume linh hoạt: Có thể mở rộng/thu nhỏ volume trực tuyến, cân bằng tải giữa các node, thay đổi cấu hình mà không cần downtime.
  • Giao thức chuẩn: Hỗ trợ NFS, SMB/CIFS, HTTP, FTP và cả giao thức gốc. Tương thích đầy đủ POSIX — ứng dụng cũ không cần chỉnh sửa vẫn hoạt động.

Thuật ngữ trọng tâm

  • Brick: Đơn vị lưu trữ cơ sở, thường là thư mục hoặc phân vùng trên máy vật lý. Định dạng: IP:/đường_dẫn.
  • Volume: Tập hợp logic của nhiều brick, là đối tượng chính để quản lý và mount.
  • FUSE: Module nhân Linux cho phép tạo filesystem trong không gian người dùng — GlusterFS dựa vào đây để giao tiếp với ứng dụng.
  • VFS: Lớp trừu tượng kernel giúp ứng dụng truy cập nhiều loại filesystem khác nhau.
  • Glusterd: Daemon quản lý chạy trên mỗi node, xử lý tạo/xóa volume, cân bằng dữ liệu, v.v.
  • Striping: Kỹ thuật chia nhỏ file thành các mảnh (stripe) rồi phân tán lên nhiều brick để tăng băng thông I/O.

Luồng hoạt động

  1. Ứng dụng truy cập dữ liệu qua điểm mount GlusterFS.
  2. Hệ thống kernel xử lý yêu cầu qua VFS.
  3. VFS chuyển tiếp tới FUSE → gửi dữ liệu qua /dev/fuse đến client GlusterFS.
  4. Client xử lý logic (băm, striping, replica...) theo cấu hình volume.
  5. Dữ liệu được gửi qua mạng đến server GlusterFS và ghi vào brick tương ứng.

Các loại volume

Loại VolumeMô tảƯu điểmNhược điểm
Phân tán (Distributed) Dữ liệu trải đều trên nhiều brick, không sao lưu. Dễ mở rộng, chi phí thấp Không có redundancy → mất dữ liệu nếu brick hỏng
Striped Chia file thành mảnh nhỏ, ghi song song lên nhiều brick. Tăng tốc độ đọc/ghi Không có redundancy
Replicated Mỗi file được lưu bản sao giống hệt trên nhiều brick. Độ tin cậy cao, chịu lỗi tốt Tốn gấp đôi (hoặc hơn) dung lượng lưu trữ
Distributed Striped Kết hợp phân tán + striping Hiệu năng cao, dễ mở rộng Không có redundancy
Distributed Replicated Kết hợp phân tán + replica Vừa mở rộng dễ, vừa an toàn dữ liệu Tốn dung lượng, phức tạp hơn
Striped Replicated Striping + Replica Hiệu năng cao + an toàn Rất tốn tài nguyên lưu trữ
Distributed Striped Replicated Kết hợp cả 3: phân tán, striping, replica Hiệu năng cực cao + khả năng chịu lỗi mạnh Yêu cầu nhiều node, chi phí cao

Triển khai thực tế

Môi trường thử nghiệm:

  • 4 node server: node1–node4 (IP: 192.168.240.10–13)
  • 1 node client: node5 (IP: 192.168.240.14)
  • Mỗi server gắn 4 ổ cứng → phân vùng, format XFS, mount tại /data/sd[b-e]1

Bước 1: Chuẩn bị hệ thống

# Tắt firewall & SELinux (tất cả node)
systemctl stop firewalld
setenforce 0

# Cấu hình hostname & hosts
hostnamectl set-hostname nodeX
echo "192.168.240.X nodeX" >> /etc/hosts

# Quét lại ổ cứng mới
for i in {0..2}; do echo "- - -" > /sys/class/scsi_host/host$i/scan; done

# Phân vùng tự động (script)
#!/bin/bash
disks=$(ls /dev/sd[b-z] 2>/dev/null | grep -o 'sd[b-z]')
for d in $disks; do
  parted -s /dev/$d mklabel gpt mkpart primary xfs 0% 100%
  mkfs.xfs -f /dev/${d}1
  mkdir -p /data/${d}1
  echo "/dev/${d}1 /data/${d}1 xfs defaults 0 0" >> /etc/fstab
done
mount -a

Bước 2: Cài đặt GlusterFS

# Tạo repo cục bộ (hoặc dùng repo chính thức)
cd /opt && unzip gfsrepo.zip
cat > /etc/yum.repos.d/glfs.repo <<EOF
[glfs]
name=Local GlusterFS Repo
baseurl=file:///opt/gfsrepo
gpgcheck=0
enabled=1
EOF

yum clean all && yum makecache
yum install -y glusterfs-server glusterfs-fuse

systemctl enable --now glusterd
</code>

Bước 3: Thiết lập cluster

# Trên node1, thêm các node còn lại vào pool
gluster peer probe node2
gluster peer probe node3
gluster peer probe node4

# Kiểm tra trạng thái
gluster peer status

Bước 4: Tạo và mount các loại volume

# 1. Distributed Volume
gluster volume create vol_dist node1:/data/sdb1 node2:/data/sdb1 force
gluster volume start vol_dist

# 2. Striped Volume (2 stripe)
gluster volume create vol_stripe stripe 2 node1:/data/sdc1 node2:/data/sdc1 force
gluster volume start vol_stripe

# 3. Replicated Volume (2 bản sao)
gluster volume create vol_rep replica 2 node3:/data/sdb1 node4:/data/sdb1 force
gluster volume start vol_rep

# 4. Distributed Striped (4 brick, 2 stripe)
gluster volume create vol_dist_stripe stripe 2 \
  node1:/data/sdd1 node2:/data/sdd1 node3:/data/sdd1 node4:/data/sdd1 force
gluster volume start vol_dist_stripe

# 5. Distributed Replicated (4 brick, 2 replica)
gluster volume create vol_dist_rep replica 2 \
  node1:/data/sde1 node2:/data/sde1 node3:/data/sde1 node4:/data/sde1 force
gluster volume start vol_dist_rep

Bước 5: Mount từ client

mkdir -p /mnt/{dist,stripe,rep,dist_stripe,dist_rep}

# Mount từng volume
mount -t glusterfs node1:/vol_dist /mnt/dist
mount -t glusterfs node1:/vol_stripe /mnt/stripe
mount -t glusterfs node1:/vol_rep /mnt/rep
mount -t glusterfs node1:/vol_dist_stripe /mnt/dist_stripe
mount -t glusterfs node1:/vol_dist_rep /mnt/dist_rep

# Mount tự động khi khởi động
echo "node1:/vol_dist /mnt/dist glusterfs defaults,_netdev 0 0" >> /etc/fstab
# ... lặp lại cho các volume còn lại

Bước 6: Kiểm thử tính chịu lỗi

# Tạo dữ liệu test
cd /mnt/dist && for i in {1..5}; do dd if=/dev/zero of=file$i bs=40M count=1; done

# Mô phỏng sự cố: tắt node2
systemctl stop glusterd   # trên node2

# Kiểm tra client:
# - Distributed: mất file nằm trên node2
# - Striped/Dist-Stripe: không truy cập được (không có redundancy)
# - Replicated/Dist-Rep: vẫn hoạt động bình thường

Bước 7: Quản trị & bảo trì

# Liệt kê volume
gluster volume list

# Xem thông tin chi tiết
gluster volume info [tên_volume]

# Kiểm tra trạng thái
gluster volume status

# Dừng & xóa volume
gluster volume stop vol_name
gluster volume delete vol_name

# Cấu hình quyền truy cập
gluster volume set vol_name auth.allow 192.168.240.*
gluster volume set vol_name auth.deny 192.168.240.100

Thẻ: glusterfs distributed-storage linux-storage fuse redhat

Đăng vào ngày 17 tháng 6 lúc 03:43