Làm chủ NFS trên CentOS Stream 9: Giải pháp chia sẻ dữ liệu tốc độ cao cho Cluster

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

Tại sao bạn cần lưu trữ tập trung?

Quản lý dữ liệu giữa nhiều server không nhất thiết phải là một cực hình. Nếu bạn đang vận hành cụm 5-10 Web Server hoặc các node Docker, việc đồng bộ dữ liệu bằng SCP hay Rsync thường gây ra độ trễ lớn, đôi khi lên tới vài phút. NFS (Network File System) giải quyết bài toán này bằng cách cho phép các server truy cập chung một kho dữ liệu theo thời gian thực.

Hãy tưởng tượng bạn có 100GB ảnh sản phẩm. Thay vì copy ra 10 bản trên 10 server, bạn chỉ cần đặt chúng tại một nơi duy nhất. Trước đây, khi triển khai hệ thống cho một sàn TMĐT trên CentOS 7, mình đã dùng NFS để xử lý hàng triệu request ảnh mỗi ngày. Với CentOS Stream 9, quy trình này vẫn giữ được sự ổn định nhưng đòi hỏi cấu hình bảo mật chặt chẽ hơn.

NFSv4 và những điểm cần lưu ý

NFS hoạt động theo mô hình Client-Server đơn giản. Server thực hiện “export” thư mục, còn Client sẽ thực hiện “mount” về máy mình.

  • NFSv4: Đây là bản mặc định trên CentOS 9. Nó bảo mật hơn và chỉ yêu cầu mở duy nhất port 2049 trên tường lửa.
  • Hiệu suất: NFSv4 xử lý file nhanh hơn đáng kể so với các bản cũ nhờ cơ chế gom nhóm các thao tác (compound procedures).

Triển khai NFS Server

Trong ví dụ này, chúng ta sử dụng hai máy: Server (192.168.1.10)Client (192.168.1.20). Mục tiêu là chia sẻ thư mục /data/shared.

1. Cài đặt gói nfs-utils

Đầu tiên, hãy cài đặt bộ công cụ điều khiển NFS trên cả hai máy:

sudo dnf install nfs-utils -y

2. Thiết lập thư mục chia sẻ

Chúng ta tạo thư mục và phân quyền. Lưu ý: NFS rất nhạy cảm với UID/GID của người dùng.

sudo mkdir -p /data/shared
sudo chown -R nobody:nobody /data/shared
sudo chmod -R 755 /data/shared

Dùng nobody:nobody là một mẹo nhỏ để tránh lỗi lệch User ID giữa các server khác nhau. Điều này giúp Client có thể ghi file mà không bị hệ thống từ chối vô lý.

3. Cấu hình file /etc/exports

File này quyết định ai có quyền truy cập dữ liệu của bạn. Hãy mở file:

sudo vi /etc/exports

Thêm dòng cấu hình sau:

/data/shared 192.168.1.20(rw,sync,no_subtree_check)

Trong đó, rw cho phép đọc ghi, sync đảm bảo dữ liệu được ghi xuống đĩa cứng ngay lập tức để tránh mất dữ liệu khi mất điện đột ngột.

4. Kích hoạt dịch vụ và tường lửa

Khởi động dịch vụ NFS và cho phép nó chạy cùng hệ thống:

sudo systemctl enable --now nfs-server

Đừng quên mở port trên Firewall. Nếu thiếu bước này, Client sẽ gặp lỗi “Connection timed out”.

sudo firewall-cmd --permanent --add-service=nfs
sudo firewall-cmd --permanent --add-service=rpc-bind
sudo firewall-cmd --permanent --add-service=mountd
sudo firewall-cmd --reload

Cấu hình phía Client

Bây giờ, hãy chuyển sang máy Client (192.168.1.20) để kết nối với Server.

1. Tạo điểm gắn kết (Mount Point)

sudo mkdir -p /mnt/nfs_share

2. Mount và kiểm tra

Thực hiện kết nối thủ công để kiểm tra mọi thứ đã thông suốt chưa:

sudo mount -t nfs 192.168.1.10:/data/shared /mnt/nfs_share

Gõ lệnh df -h. Nếu thấy ổ đĩa mạng xuất hiện với đúng dung lượng của Server, bạn đã thành công 90% rồi.

3. Tự động Mount khi khởi động

Để tránh việc phải mount lại mỗi khi reboot, hãy thêm thông tin vào /etc/fstab:

192.168.1.10:/data/shared /mnt/nfs_share nfs defaults,_netdev 0 0

Lưu ý quan trọng: Tham số _netdev cực kỳ cần thiết. Nó yêu cầu hệ thống chỉ mount sau khi đã có kết nối mạng, tránh tình trạng server bị treo lúc boot vì không tìm thấy ổ đĩa.

Vượt rào SELinux

Nhiều bạn cấu hình xong vẫn bị lỗi “Permission Denied” do SELinux chặn. Nếu bạn dùng NFS để chứa code cho Web Server (Nginx/Apache), hãy chạy lệnh sau:

sudo setsebool -P httpd_use_nfs 1

Lệnh này cho phép các dịch vụ web tương tác với file trên ổ đĩa NFS một cách hợp lệ mà không cần tắt hoàn toàn SELinux.

Kinh nghiệm tối ưu vận hành

  1. An ninh là trên hết: Tuyệt đối không dùng dấu * trong file exports. Chỉ cho phép đúng IP của Server cần thiết để tránh lộ lọt dữ liệu nội bộ.
  2. Theo dõi sức khỏe: Sử dụng lệnh nfsstat -c thường xuyên. Nếu chỉ số retrans (truyền lại) tăng cao, đó là dấu hiệu mạng nội bộ của bạn đang bị nghẽn hoặc switch có vấn đề.
  3. Tách biệt mạng: Nếu có điều kiện, hãy chạy NFS trên một card mạng riêng (Storage Network) để không ảnh hưởng đến băng thông của người dùng cuối.

Tổng kết

NFS trên CentOS Stream 9 là giải pháp rất ổn định và dễ triển khai cho các hệ thống quy mô vừa. Dù hiện nay có nhiều giải pháp hiện đại như S3 hay Ceph, NFS vẫn giữ vị thế riêng nhờ sự đơn giản và độ trễ thấp. Chúc các bạn thiết lập hệ thống thành công!

Share: