Xây dựng hệ thống lưu trữ phân tán chịu lỗi cực cao (Fault-Tolerant) cho cụm 3 VPS nhỏ bằng Garage S3 Object Storage
Giới thiệu về bài toán lưu trữ phân tán trên hạ tầng nhỏ
Trong kỷ nguyên số hóa, nhu cầu lưu trữ dữ liệu phình to nhanh chóng đặt ra thách thức lớn cho các doanh nghiệp nhỏ và các nhà phát triển độc lập. Việc sử dụng các dịch vụ Cloud Object Storage lớn như AWS S3 mang lại sự tin cậy cao nhưng chi phí có thể tăng vọt một cách khó kiểm soát. Ngược lại, nếu tự vận hành trên một VPS đơn lẻ, rủi ro mất dữ liệu hoặc gián đoạn dịch vụ luôn hiện hữu khi phần cứng gặp sự cố.
Giải pháp tối ưu là tận dụng các cụm VPS cấu hình nhỏ (ví dụ: 1-2 vCPU, 2GB RAM) kết hợp với các giải pháp lưu trữ phân tán. Tuy nhiên, các hệ thống truyền thống như Ceph hay GlusterFS thường đòi hỏi tài nguyên phần cứng rất lớn và quy trình vận hành cực kỳ phức tạp, không phù hợp cho các cụm máy chủ quy mô nhỏ. Đây chính là lúc Garage S3 Object Storage trở thành cứu cánh công nghệ.
Garage S3 là gì? Tại sao lại là lựa chọn hoàn hảo cho VPS nhỏ?
Garage là một hệ thống lưu trữ đối tượng phân tán (Distributed Object Storage) mã nguồn mở, được thiết kế đặc biệt gọn nhẹ và hiệu quả. Khác với Ceph, Garage tập trung vào việc chạy mượt mà trên các phần cứng có cấu hình khiêm tốn và phân bổ trên các vùng địa lý khác nhau mà không làm giảm đáng kể hiệu năng.
Dưới đây là các lý do Garage S3 là lựa chọn hàng đầu cho cụm 3 VPS nhỏ:
- Tiết kiệm tài nguyên tuyệt đối: Garage được viết bằng ngôn ngữ Rust, tiêu thụ rất ít CPU và RAM, vận hành ổn định ngay cả trên VPS chỉ có 1GB RAM.
- Kiến trúc phẳng (Peer-to-Peer): Không cần máy chủ quản lý (Metadata node) riêng biệt. Tất cả các node trong cụm đều có vai trò như nhau, giúp đơn giản hóa việc thiết lập và loại bỏ điểm nghẽn duy nhất (Single Point of Failure).
- Khả năng chịu lỗi (Fault-Tolerance) vượt trội: Với cơ chế nhân bản dữ liệu thông minh, hệ thống đảm bảo dữ liệu của bạn vẫn an toàn và dịch vụ không bị gián đoạn ngay cả khi một trong ba VPS bị sập hoàn toàn.
- Tương thích API S3: Dễ dàng tích hợp với các ứng dụng sẵn có thông qua thư viện S3 tiêu chuẩn như AWS SDK, rclone, hoặc Nextcloud.
Kiến trúc hệ thống cụm 3 VPS với Garage
Để đạt được khả năng chịu lỗi tối ưu, chúng ta sẽ thiết lập một cụm gồm 3 VPS hoạt động độc lập. Mô hình lý tưởng nhất là các VPS này nằm ở các trung tâm dữ liệu (Data Center) hoặc nhà cung cấp khác nhau để tránh rủi ro mất điện diện rộng.
Thông số cấu hình tối thiểu khuyến nghị:
- Số lượng: 3 VPS.
- Cấu hình mỗi VPS: 1 vCPU, 2GB RAM, 20GB-50GB SSD/NVMe.
- Hệ điều hành: Ubuntu 22.04 LTS hoặc tương đương.
- Mạng: Địa lý gần nhau (độ trễ ping < 50ms) để tối ưu tốc độ đồng bộ.
Trong kiến trúc của Garage, khi một tệp tin được tải lên, nó sẽ được băm nhỏ và nhân bản (replicate) sang các node khác nhau dựa trên cấu hình phân vùng (Ring). Với cụm 3 VPS, chúng ta sẽ cấu hình hệ số nhân bản bằng 3 (Replication Factor = 3), nghĩa là mọi dữ liệu đều có một bản sao đầy đủ trên cả 3 máy chủ. Khi 1 VPS gặp sự cố, 2 VPS còn lại vẫn chứa đầy đủ dữ liệu và tiếp tục phục vụ yêu cầu đọc/ghi từ client.
Hướng dẫn triển khai chi tiết từng bước
Bước 1: Chuẩn bị môi trường và cài đặt Garage
Trước tiên, bạn cần tải xuống phiên bản Garage phù hợp với kiến trúc CPU của VPS (thường là x86_64). Thực hiện lệnh sau trên cả 3 VPS:
wget [https://garagehq.deuxfleurs.fr/releases/v0.9.0/x86_64-unknown-linux-musl/garage](https://garagehq.deuxfleurs.fr/releases/v0.9.0/x86_64-unknown-linux-musl/garage)
chmod +x garage
sudo mv garage /usr/local/bin/
Tiếp theo, tạo thư mục chứa dữ liệu và thư mục cấu hình:
sudo mkdir -p /etc/garage /var/lib/garage/data /var/lib/garage/meta
Bước 2: Cấu hình File config.toml
Trên mỗi VPS, tạo file cấu hình /etc/garage/config.toml. Điểm mấu chốt là thiết lập chính xác địa chỉ IP và khóa bảo mật để các node có thể giao tiếp với nhau. Dưới đây là mẫu cấu hình chuẩn:
metadata_dir = "/var/lib/garage/meta"
data_dir = "/var/lib/garage/data"
replication_factor = 3
rpc_bind_addr = "[IP_CUA_VPS]:3901"
rpc_public_addr = "[IP_CUA_VPS]:3901"
rpc_secret_key = "DAT_MOT_CHUOI_RANDOM_LONG_VA_BAO_MAT"
[s3_api]
s3_bind_addr = "0.0.0.0:3900"
api_region = "us-east-1"
[s3_web]
s3_web_bind_addr = "0.0.0.0:3902"Lưu ý: Thay thế [IP_CUA_VPS] bằng IP công cộng hoặc IP mạng nội bộ của từng VPS tương ứng. Chuỗi rpc_secret_key phải giống nhau hoàn toàn trên cả 3 VPS để chúng xác thực được với nhau.
Bước 3: Khởi chạy dịch vụ và thiết lập Cluster
Sau khi cấu hình xong, khởi chạy dịch vụ Garage trên cả 3 node bằng cách tạo một service Systemd để đảm bảo hệ thống tự khởi động cùng OS. Khi dịch vụ đã chạy, chúng ta tiến hành kết nối các node lại với nhau từ node đầu tiên:
garage node connect [IP_VPS_2]:3901
garage node connect [IP_VPS_3]:3901
Để kiểm tra trạng thái kết nối, sử dụng lệnh garage status. Bạn sẽ thấy danh sách 3 node hiện diện nhưng ở trạng thái chưa gán phân vùng (Unassigned).
Bước 4: Cấu hình Layout và kích hoạt lưu trữ
Garage sử dụng cơ chế thiết lập layout để người quản trị kiểm soát dung lượng đóng góp của từng node. Hãy gán phân vùng cho các node bằng lệnh:
garage layout assign [NODE_ID_1] --capacity 10G --zone dc1
garage layout assign [NODE_ID_2] --capacity 10G --zone dc2
garage layout assign [NODE_ID_3] --capacity 10G --zone dc3
Sau khi gán xong cho cả 3 node, áp dụng cấu hình bằng lệnh quyết định: garage layout apply --version 1. Hệ thống sẽ bắt đầu đồng bộ cấu trúc hình học của cụm máy chủ.
Kiểm tra khả năng chịu lỗi (Fault-Tolerance) thực tế
Để chứng minh tính hiệu quả của hệ thống, chúng ta tiến hành tạo một Bucket S3, tạo Key Access và tải lên một file dữ liệu. Bạn có thể sử dụng công cụ mã nguồn mở rclone hoặc Cyberduck để kết nối tới IP của một trong các VPS qua cổng 3900.
Sau khi tải file thành công, hãy thực hiện một kịch bản giả lập sự cố nghiêm trọng: Tắt hoàn toàn một VPS (Node 3).
Kết quả ghi nhận: Các ứng dụng đang kết nối tới Node 1 hoặc Node 2 vẫn có thể đọc và ghi dữ liệu bình thường mà không gặp bất kỳ thông báo lỗi nào. Khi Node 3 khởi động trở lại, Garage sẽ tự động kích hoạt cơ chế "Anti-entropy" để đồng bộ lại những dữ liệu bị bỏ lỡ trong thời gian Node 3 ngoại tuyến. Quá trình này diễn ra hoàn toàn tự động và ngầm định dưới nền.
Kết luận và Khuyến nghị vận hành cho doanh nghiệp
Xây dựng hệ thống lưu trữ phân tán chịu lỗi bằng Garage S3 trên cụm 3 VPS nhỏ là một giải pháp cực kỳ kinh tế và hiệu quả cho các doanh nghiệp vừa và nhỏ, hoặc các đội ngũ phát triển sản phẩm. Nó phá vỡ định kiến rằng lưu trữ phân tán chịu lỗi cao chỉ dành cho các hệ thống đắt đỏ với phần cứng khủng.
Để vận hành hệ thống này một cách an toàn nhất trong môi trường Production, doanh nghiệp cần lưu ý thêm các điểm sau:
- Triển khai Load Balancer: Đặt một bộ cân bằng tải như HAProxy hoặc Nginx ở phía trước cụm VPS để tự động chuyển hướng traffic S3 API khi có một node bị down.
- Giám sát (Monitoring): Tích hợp Prometheus và Grafana (Garage có sẵn endpoint /metrics) để theo dõi dung lượng đĩa, lượng băng thông và trạng thái sức khỏe của các node.
- Bảo mật tường lửa: Chặn cổng RPC (3901) đối với toàn bộ internet, chỉ cho phép IP của 3 VPS kết nối với nhau qua cổng này nhằm tránh các cuộc tấn công khai thác từ bên ngoài.
