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) và 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
- 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ộ. - Theo dõi sức khỏe: Sử dụng lệnh
nfsstat -cthườ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 đề. - 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!

