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 xu hướng lưu trữ phân tán cho doanh nghiệp nhỏ
Trong kỷ nguyên số hóa, dữ liệu được ví như dòng máu của mọi doanh nghiệp. Đối với các startup và doanh nghiệp nhỏ (SMEs), việc tìm kiếm một giải pháp lưu trữ vừa kinh tế, vừa đảm bảo tính sẵn sàng cao (High Availability) luôn là một bài toán hóc búa. Các dịch vụ Cloud Object Storage lớn như AWS S3 hay Google Cloud Storage rất tuyệt vời, nhưng chi phí băng thông (egress fees) và dung lượng có thể tăng phi mã theo quy mô.
Một giải pháp thay thế thông minh là tự xây dựng hệ thống lưu trữ phân tán. Tuy nhiên, các ông lớn trong mảng này như Ceph hay MinIO distributed lại đòi hỏi cấu hình phần cứng rất khắt khe (thường yêu cầu nhiều RAM, CPU và số lượng node lớn) – điều vượt quá ngân sách của một cụm VPS nhỏ. Đó chính là lý do Garage S3 Object Storage ra đời và trở thành vị cứu tinh cho các hệ thống quy mô vừa và nhỏ.
Garage S3 là gì? Tại sao lại phù hợp với cụm 3 VPS nhỏ?
Garage là một phần mềm mã nguồn mở triển khai giao thức S3 (S3-compatible object storage) được viết bằng ngôn ngữ Rust, thiết kế đặc biệt để chạy trên các phần cứng cấu hình thấp, phân tán về mặt địa lý. Khác với Ceph đòi hỏi hạ tầng mạng cực mạnh và MinIO yêu cầu các node đồng đều, Garage tối ưu hóa cho các cụm máy chủ nhỏ nhờ các đặc tính nổi bật:
- Trọng lượng siêu nhẹ (Lightweight): Tiêu thụ cực ít tài nguyên CPU và RAM. Một VPS chỉ với 1GB RAM hoàn toàn có thể vận hành Garage mượt mà.
- Khả năng chịu lỗi xuất sắc (Fault-Tolerant): Thiết kế dựa trên mô hình không có node chính (leaderless/masterless) sử dụng thuật toán đồng thuận CRDTs. Với cụm 3 node, hệ thống vẫn hoạt động bình thường ngay cả khi 1 node bị sập hoàn toàn.
- Tự động nhân bản (Replication): Dữ liệu được tự động đồng bộ và phân tách giữa các node theo cấu hình, đảm bảo tính toàn vẹn của dữ liệu mà không cần can thiệp thủ công.
Garage không thiết kế để cạnh tranh với Ceph ở quy mô Petabyte, nó sinh ra để làm bá chủ ở phân khúc lưu trữ tự vận hành trên phần cứng giá rẻ.
Kiến trúc tổng quan của hệ thống 3 VPS
Để xây dựng một hệ thống chịu lỗi tiêu chuẩn, chúng ta cần tối thiểu 3 node (VPS). Con số 3 là con số 'vàng' trong các hệ thống phân tán để đạt được trạng thái đồng thuận (Quorum). Nếu một node chết, 2 node còn lại vẫn chiếm đa số (> 50%) và giữ cho cụm hoạt động ổn định.
Giả sử chúng ta có 3 VPS đặt tại các nhà cung cấp hoặc datacenter khác nhau để tăng tính an toàn:
- Node 1 (vps-01): IP 192.168.1.10 - Dung lượng 50GB
- Node 2 (vps-02): IP 192.168.1.20 - Dung lượng 50GB
- Node 3 (vps-03): IP 192.168.1.30 - Dung lượng 50GB
Hệ thống mạng giữa các VPS có thể kết nối trực tiếp qua Internet (được mã hóa bằng TLS) hoặc thông qua một mạng nội bộ ảo (VPN/Overlay Network) như Tailscale, WireGuard hoặc ZeroTier để đảm bảo an ninh tối đa.
Các bước triển khai chi tiết
Bước 1: Chuẩn bị môi trường và cài đặt Garage
Trên cả 3 VPS, tiến hành tải về phiên bản Garage mới nhất. Vì Garage là một file thực thi duy nhất (single binary) viết bằng Rust, việc cài đặt cực kỳ đơn giản:
wget [https://garagehq.opera.software/releases/v0.9.0/x86_64-unknown-linux-musl/garage](https://garagehq.opera.software/releases/v0.9.0/x86_64-unknown-linux-musl/garage)
chmod +x garage
mv garage /usr/local/bin/Bước 2: Cấu hình File config.toml cho các Node
Mỗi node cần một file cấu hình riêng, nhưng cấu trúc tổng thể sẽ tương tự nhau. Điểm mấu chốt là thiết lập vùng lưu trữ dữ liệu (metadata và data) cùng với địa chỉ liên lạc giữa các node.
Dưới đây là ví dụ cấu hình mẫu cho /etc/garage.toml:
metadata_dir = "/var/lib/garage/meta"
data_dir = "/var/lib/garage/data"
db_engine = "sqlite"
rpc_bind_addr = "0.0.0.0:3901"
rpc_public_addr = "192.168.1.10:3901"
rpc_secret_key = "chuoikey-bi-mat-cua-ban"
s3_api_bind_addr = "0.0.0.0:3900"
s3_web_bind_addr = "0.0.0.0:3902"Lưu ý quan trọng: rpc_secret_key phải giống nhau trên cả 3 node để chúng có thể xác thực và nói chuyện được với nhau.
Bước 3: Khởi chạy dịch vụ và kết nối cụm (Cluster)
Khởi chạy dịch vụ Garage trên cả 3 node bằng systemd để đảm bảo dịch vụ tự khởi động lại khi VPS bị reboot. Sau khi cả 3 node đã chạy, chúng ta tiến hành kết nối chúng lại với nhau bằng cách đứng từ Node 1 và gọi lệnh:
garage node connect [Node_2_RPC_Address]
garage node connect [Node_3_RPC_Address]Kiểm tra trạng thái kết nối bằ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 phân bổ dung lượng.
Bước 4: Phân bổ Layout và Kích hoạt hệ thống
Garage sử dụng cơ chế định tuyến nhất quán (Consistent Hashing). Bạn cần chỉ định vai trò và vị trí địa lý (zone) cho từng node để hệ thống tối ưu hóa việc nhân bản dữ liệu:
garage layout assign [Node_1_ID] -z zone1 -c 10G
garage layout assign [Node_2_ID] -z zone2 -c 10G
garage layout assign [Node_3_ID] -z zone3 -c 10GSau khi gán xong, áp dụng cấu hình bằng lệnh: garage layout apply --version 1. Lúc này, hệ thống bắt đầu kích hoạt chế độ 3-way replication (mặc định của Garage), nghĩa là mọi file bạn upload lên sẽ được nhân bản ra cả 3 node.
Kịch bản thử nghiệm khả năng chịu lỗi (Fault-Tolerance Test)
Để chứng minh hệ thống này thực sự mang lại khả năng chịu lỗi cực cao, hãy thực hiện một bài kiểm tra thực tế:
Tạo một bucket S3 thông qua CLI hoặc công cụ như Rclone/Cyberduck, sau đó upload một file ảnh dung lượng lớn lên hệ thống. Tiếp theo, hãy giả lập sự cố bằng cách tắt hoàn toàn Node 3 (sử dụng lệnh poweroff trên VPS 3).
Kết quả nhận được sẽ vô cùng ấn tượng: Khi bạn thực hiện lệnh đọc hoặc tải lại file từ Node 1 hoặc Node 2, dữ liệu vẫn được trả về ngay lập tức mà không có bất kỳ độ trễ hay thông báo lỗi nào. Khi Node 3 hoạt động trở lại, Garage sẽ tự động phát hiện các dữ liệu bị thiếu hụt trong thời gian sập mạng và thực hiện quá trình tự sửa chữa (Self-healing) để đồng bộ lại trạng thái hoàn hảo ban đầu.
Kết luận và Khuyến nghị vận hành
Xây dựng hệ thống lưu trữ phân tán bằng Garage S3 trên cụm 3 VPS nhỏ là một giải pháp đột phá về mặt chi phí và hiệu quả cho các kỹ sư hệ thống và doanh nghiệp nhỏ. Nó biến những tài nguyên VPS tưởng chừng như yếu ớt trở thành một pháo đài lưu trữ dữ liệu an toàn, có tính sẵn sàng cao không thua kém gì các dịch vụ lớn.
Để vận hành hệ thống này một cách tối ưu nhất trong môi trường sản xuất (Production), doanh nghiệp cần lưu ý một số điểm sau:
- Luôn đặt các node ở các nhà cung cấp VPS khác nhau (ví dụ: Hetzner, DigitalOcean, Linode) để tránh rủi ro sập toàn bộ datacenter.
- Sử dụng ổ cứng SSD hoặc NVMe để tăng tốc độ ghi metadata của Garage.
- Thiết lập hệ thống giám sát (Monitoring) bằng Prometheus và Grafana để theo dõi dung lượng ổ đĩa và trạng thái kết nối của cụm một cách chủ động.
