Khi ổ cứng đầy và nỗi lo sập hệ thống trực chờ
Khoảng nửa năm trước, mình quản lý cụm Web Server cho một sàn thương mại điện tử. Mọi thứ đang êm đẹp thì đúng đêm thứ Sáu, hệ thống báo động đỏ: ổ cứng server chính chạm ngưỡng 98%. Đáng sợ hơn, đó là nơi duy nhất chứa gần 500GB ảnh sản phẩm và tài liệu người dùng.
Lúc đó, mình chỉ có hai đường. Một là tắt server nâng cấp ổ cứng, chấp nhận downtime ít nhất 30 phút. Hai là tìm cách mount thêm ổ ngoài, nhưng code cũ lại không hỗ trợ lưu trữ phân tán. Sau đêm ‘toát mồ hôi’ đó, mình hiểu rằng phó mặc dữ liệu cho một ổ cứng vật lý duy nhất là sai lầm chí mạng.
Tại sao lưu trữ truyền thống dễ trở thành ‘tử huyệt’?
Nếu anh em chỉ dùng một Ubuntu Server đơn lẻ, sớm muộn gì cũng sẽ vấp phải những vấn đề này:
- Điểm chết duy nhất (SPOF): Ổ cứng hỏng hoặc server lỗi main là dữ liệu ‘đi viện’. Ứng dụng sẽ ngừng hoạt động ngay lập tức.
- Mở rộng là cực hình: Khi dung lượng cạn kiệt, việc mua ổ cứng lớn hơn rồi di chuyển hàng trăm GB dữ liệu cực kỳ tốn thời gian và dễ sai sót.
- Nghẽn cổ chai I/O: Một ổ cứng có giới hạn đọc/ghi nhất định. Khi lượng truy cập đạt 10.000 người dùng cùng lúc, ổ cứng sẽ không tải nổi.
GlusterFS: Điểm cân bằng giữa chi phí và hiệu năng
Mình đã từng cân nhắc nhiều phương án:
- NFS: Dễ cài nhưng vẫn là lưu trữ tập trung. Máy chủ NFS chết là cả hệ thống ‘ngỏm’ theo.
- Ceph: Rất mạnh cho hệ thống Cloud lớn. Tuy nhiên, Ceph quá ngốn tài nguyên (cần ít nhất 16-32GB RAM để chạy ổn) và cấu hình cực kỳ phức tạp cho các team nhỏ.
- GlusterFS: Đây chính là ‘chân ái’. Nó gộp ổ cứng từ nhiều server thành một phân vùng duy nhất, hỗ trợ replication (nhân bản) để đảm bảo dữ liệu luôn sẵn sàng.
Sau khi test trên môi trường staging, mình quyết định đưa GlusterFS vào vận hành thật. Kết quả rất ấn tượng: hệ thống chạy mượt suốt 6 tháng. Việc nâng cấp dung lượng giờ chỉ đơn giản là cắm thêm node mới vào cụm mà không cần dừng dịch vụ.
Các bước triển khai cụm GlusterFS 3 Node
Mình khuyên anh em nên dùng 3 Node thay vì 2. Điều này giúp tránh lỗi Split-brain (xung đột dữ liệu khi mất kết nối giữa các node). Dưới đây là mô hình mình đã thực hiện:
- srv-01: 192.168.1.10
- srv-02: 192.168.1.11
- srv-03: 192.168.1.12
Bước 1: Cấu hình nhận diện Node
Để các server ‘gọi tên’ được nhau, hãy sửa file /etc/hosts trên cả 3 máy:
sudo nano /etc/hosts
Thêm nội dung này vào cuối file:
192.168.1.10 srv-01
192.168.1.11 srv-02
192.168.1.12 srv-03
Bước 2: Cài đặt GlusterFS
Chạy các lệnh sau trên cả 3 Node để lấy phiên bản ổn định nhất:
sudo apt update
sudo apt install software-properties-common -y
sudo add-apt-repository ppa:gluster/glusterfs-9 -y
sudo apt update
sudo apt install glusterfs-server -y
Kích hoạt để dịch vụ tự khởi động cùng hệ thống:
sudo systemctl enable --now glusterd
Bước 3: Thiết lập liên minh giữa các Node
Tại srv-01, anh em gõ lệnh để kết nối với hai node còn lại:
sudo gluster peer probe srv-02
sudo gluster peer probe srv-03
Kiểm tra lại bằng lệnh: sudo gluster peer status. Nếu thấy trạng thái Connected là mọi thứ đã thông suốt.
Bước 4: Tạo Brick (Phân vùng chứa dữ liệu)
Trong GlusterFS, ‘Brick’ đơn giản là một thư mục lưu trữ. Tốt nhất là anh em nên dùng ổ cứng riêng, định dạng XFS để có hiệu năng cao nhất. Ở ví dụ này, mình tạo thư mục trên ổ chính:
# Chạy trên cả 3 node
sudo mkdir -p /gluster/data
Bước 5: Khởi tạo Volume phân tán
Mình sẽ tạo Volume tên vol_shared với chế độ replica 3. Nghĩa là mỗi file bạn upload sẽ được tự động sao chép sang cả 3 server. Tại srv-01, chạy lệnh:
sudo gluster volume create vol_shared replica 3 srv-01:/gluster/data srv-02:/gluster/data srv-03:/gluster/data force
sudo gluster volume start vol_shared
Kết nối Client vào cụm lưu trữ
Để Web Server hoặc App Server sử dụng được vùng nhớ này, hãy cài gói client:
sudo apt install glusterfs-client -y
Tiến hành mount ổ đĩa mạng:
sudo mkdir /mnt/storage
sudo mount -t glusterfs srv-01:/vol_shared /mnt/storage
Điểm hay ở đây là: Dù bạn mount qua IP của srv-01, nhưng nếu máy này sập, client sẽ tự động tìm đến srv-02 hoặc srv-03 để lấy dữ liệu. Quá trình này diễn ra trong tích tắc, ứng dụng của bạn vẫn chạy bình thường.
Kinh nghiệm ‘xương máu’ sau 6 tháng vận hành
Để hệ thống chạy ổn định, anh em cần lưu ý 3 điểm then chốt:
- Mạng nội bộ: GlusterFS đồng bộ dữ liệu liên tục nên rất ngốn băng thông. Hãy dùng mạng LAN tối thiểu 1Gbps. Nếu dùng mạng 100Mbps, hệ thống sẽ bị treo (lag) khi ghi file lớn.
- Theo dõi dung lượng: GlusterFS không tự cân bằng dung lượng hoàn hảo nếu một node bị đầy. Hãy luôn giữ các Brick có mức dung lượng trống tương đương nhau.
- Tự động mount khi reboot: Đừng quên thêm dòng sau vào
/etc/fstabđể tránh việc mất kết nối sau khi khởi động lại server:srv-01:/vol_shared /mnt/storage glusterfs defaults,_netdev 0 0
GlusterFS là lựa chọn tuyệt vời nếu anh em cần một hệ thống lưu trữ ảnh, video hoặc file log tập trung mà không muốn tốn chi phí cho các giải pháp SAN đắt đỏ. Chúc anh em triển khai thành công!

