Quay lại danh sách
Tin tức công nghệ

Xây dựng Hạ tầng Lưu trữ Đối tượng Phân tán (Distributed Object Storage) bằng Garage S3 trên Cụm 3 VPS Chi phí Thấp

30 tháng 5, 2026

Đặt vấn đề: Thách thức lưu trữ trong kỷ nguyên Cloud-Native

Đối với các kiến trúc sư hệ thống và nhà phát triển ứng dụng, việc quản lý và lưu trữ dữ liệu tệp tin (hình ảnh, video, tài liệu sao lưu) luôn là một bài toán hóc búa. Các dịch vụ Object Storage thương mại như Amazon S3, Google Cloud Storage hay DigitalOcean Spaces cung cấp độ tin cậy tuyệt vời nhưng chi phí băng thông (egress fees) và dung lượng tích lũy có thể tăng tiến theo cấp số nhân, tạo ra gánh nặng tài chính không hề nhỏ cho các doanh nghiệp khởi nghiệp hoặc các dự án có ngân sách tối ưu.

Sử dụng một máy chủ VPS đơn lẻ để lưu trữ tệp tin lại tiềm ẩn rủi ro nghiêm trọng về SPOF (Single Point of Failure). Khi máy chủ đó gặp sự cố phần cứng hoặc mạng, toàn bộ ứng dụng phụ thuộc sẽ bị tê liệt. Các giải pháp lưu trữ phân tán truyền thống như Ceph hoặc MinIO Cluster thường yêu cầu cấu hình phần cứng rất mạnh mẽ, lượng RAM lớn và quy trình vận hành phức tạp, vượt quá khả năng của các cụm VPS giá rẻ (thường chỉ có 1-2 vCPU và 1-2 GB RAM).

Đó chính là lý do GarageHQ (Garage) ra đời. Đây là một hệ thống lưu trữ đối tượng phân tán, mã nguồn mở, được viết bằng ngôn ngữ Rust, thiết kế đặc biệt để chạy mượt mà trên các phần cứng cấu hình thấp, phân tán về mặt địa lý, nhưng vẫn đảm bảo tính năng đồng bộ và tương thích hoàn toàn với Amazon S3 API.

GarageHQ là gì? Tại sao lại tối ưu cho VPS giá rẻ?

Garage không cố gắng thay thế Ceph trong các trung tâm dữ liệu khổng lồ. Thay vào đó, nó tập trung vào việc tối ưu hóa hiệu năng cho các cụm máy chủ nhỏ và có độ trễ mạng nhất định. Dưới đây là các ưu điểm cốt lõi khiến Garage trở thành lựa chọn hàng đầu cho phân khúc giá rẻ:

  • Tiêu thụ tài nguyên cực thấp: Garage có thể hoạt động ổn định chỉ với vài chục Megabytes RAM, cho phép bạn tận dụng triệt để các gói VPS cấu hình thấp nhất (ví dụ: gói 1 vCPU, 1GB RAM từ các nhà cung cấp như Hetzner, OVH, hoặc các nhà cung cấp Việt Nam).
  • Thiết kế hướng mạng WAN (WAN-first design): Khác với MinIO hay Ceph yêu cầu kết nối mạng nội bộ (LAN) tốc độ cao và độ trễ cực thấp, Garage được thiết kế để kết nối các node nằm ở các khu vực địa lý khác nhau thông qua mạng Internet thông thường mà không làm giảm sút tính toàn vẹn của dữ liệu.
  • Kiến trúc phẳng (Peer-to-Peer): Không có node Master hay Worker chuyên 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 cấu hình và tăng khả năng chịu lỗi (khi một node chết, hệ thống vẫn hoạt động bình thường).
  • Tích hợp sẵn S3 API: Giúp các ứng dụng hiện tại (WordPress, Nextcloud, các ứng dụng Node.js, Python, Go) kết nối dễ dàng mà không cần sửa đổi mã nguồn.

Kiến trúc cụm 3 Node tối thiểu cho tính sẵn sàng cao (HA)

Để đảm bảo tính nhất quán của dữ liệu theo thuật toán đồng thuận, một cụm Garage tiêu chuẩn cần tối thiểu 3 node độc lập. Với mô hình này, hệ thống áp dụng cơ chế ghi dữ liệu nhân bản 3 lần (3-way replication). Ngay cả khi một VPS bị sập hoàn toàn, dữ liệu của bạn vẫn an toàn và dịch vụ đọc/ghi vẫn tiếp diễn liên tục trên 2 node còn lại.

Lưu ý chiến lược: Để tối ưu hóa khả năng chống chịu thiên tai, bạn nên thuê 3 VPS từ 3 nhà cung cấp khác nhau hoặc đặt tại 3 trung tâm dữ liệu (Datacenter) khác nhau. Điều này giúp hệ thống miễn nhiễm với sự cố mất mạng hoặc mất điện cục bộ của một nhà cung cấp cụ thể.

Hướng dẫn từng bước triển khai Garage trên cụm 3 VPS

Bước 1: Chuẩn bị môi trường và tường lửa

Giả sử chúng ta có 3 VPS chạy hệ điều hành Ubuntu Server với các địa chỉ IP công cộng lần lượt là: 192.168.1.101 (Node 1), 192.168.1.102 (Node 2), và 192.168.1.103 (Node 3).

Garage sử dụng hai cổng mạng chính cần được mở trên tường lửa (UFW):

  • Cổng 3901: Dành cho giao tiếp nội bộ giữa các node (RPC port).
  • Cổng 3900: Dành cho dịch vụ S3 API endpoint để các ứng dụng bên ngoài kết nối.

Mở các cổng này trên cả 3 VPS bằng lệnh sau:

sudo ufw allow 3900/tcp
sudo ufw allow 3901/tcp
sudo ufw reload

Bước 2: Tải và cài đặt Garage

Vì Garage là một file thực thi duy nhất (single binary) được biên dịch bằng Rust, việc cài đặt cực kỳ đơn giản. Bạn chỉ cần tải phiên bản mới nhất từ trang chủ hoặc kho lưu trữ GitHub của GarageHQ về cả 3 máy chủ:

wget https://garagehq.opera-digital.com/releases/v0.9.0/x86_64-unknown-linux-musl/garage
chmod +x garage
sudo mv garage /usr/local/bin/

Bước 3: Cấu hình File `garage.toml`

Tạo một file cấu hình tại đường dẫn /etc/garage.toml trên từng node. Dưới đây là mẫu cấu hình chuẩn cho Node 1. Đối với Node 2 và Node 3, bạn chỉ cần thay đổi giá trị rpc_public_addr và metadata_dir, data_dir tương ứng nếu cần.

metadata_dir = "/var/lib/garage/meta"
data_dir = "/var/lib/garage/data"

rpc_bind_addr = "0.0.0.0:3901"
rpc_public_addr = "192.168.1.101:3901"
rpc_secret = "CHROME_YOUR_LONG_HEX_SECRET_KEY_HERE"

[s3_api]
sapi_bind_addr = "0.0.0.0:3900"
api_region = "us-east-1"

Giải thích quan trọng: Biến rpc_secret phải giống nhau hoàn toàn trên cả 3 file cấu hình của 3 node. Bạn có thể tạo mã bí mật này bằng lệnh openssl rand -hex 32 để đảm bảo tính bảo mật, tránh các kết nối trái phép vào cụm lưu trữ nội bộ.

Bước 4: Khởi chạy dịch vụ

Để đảm bảo Garage chạy ngầm và tự động khởi động cùng hệ thống, hãy tạo một file dịch vụ Systemd tại /etc/systemd/system/garage.service:

[Unit]
Description=Garage Object Storage Server
After=network.target

[Service]
ExecStart=/usr/local/bin/garage server
Restart=always
User=root

[Install]
WantedBy=multi-user.target

Kích hoạt và khởi chạy dịch vụ trên cả 3 máy chủ:

sudo systemctl daemon-reload
sudo systemctl enable --now garage

Bước 5: Kết nối các Node và thiết lập Layout Cluster

Sau khi dịch vụ đã chạy trên cả 3 VPS, chúng ta cần thực hiện bước thiết lập kết nối (joining). Truy cập vào SSH của Node 1 và thực hiện lệnh kết nối tới 2 node còn lại:

garage node connect 192.168.1.102:3901
garage node connect 192.168.1.103:3901

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 cả 3 node hiện diện với trạng thái kết nối thành công.

Tiếp theo, cấu hình phân bổ dung lượng và vị trí địa lý (Assign Layout) để kích hoạt phân tán dữ liệu thực tế:

garage layout assign [NODE_ID_1] --capacity 50G --zone zone1
garage layout assign [NODE_ID_2] --capacity 50G --zone zone2
garage layout assign [NODE_ID_3] --capacity 50G --zone zone3
garage layout apply --version 1

Lưu ý: Thay thế `[NODE_ID_x]` bằng mã băm ID thực tế hiển thị trong lệnh `garage status`.

Vận hành: Tạo Key truy cập và Bucket S3

Hệ thống hiện đã sẵn sàng. Để sử dụng, chúng ta tạo cặp Access Key và Secret Key bảo mật tương tự như cách quản lý trên AWS S3:

garage key create my-app-key
garage bucket create my-assets-bucket
garage bucket allow my-assets-bucket --read --write --key my-app-key

Lúc này, bạn có thể cấu hình ứng dụng của mình (ví dụ plugin S3 trên WordPress) trỏ về Endpoint URL là http://192.168.1.101:3900 (hoặc thiết lập thêm một lớp Reverse Proxy như Nginx kèm SSL để có đường dẫn HTTPS bảo mật dạng https://s3.yourdomain.com).

Đánh giá hiệu năng và Kết luận

Qua các thử nghiệm thực tế, cụm 3 VPS giá rẻ chạy Garage mang lại sự ổn định đáng kinh ngạc. Nhờ cơ chế bất đồng bộ thông minh của Rust, việc đọc ghi dữ liệu diễn ra mượt mà mà không làm nghẽn CPU hay tràn bộ nhớ RAM của VPS. Chi phí hàng tháng cho 3 VPS giá rẻ chỉ dao động khoảng 10-15 USD, nhưng bạn sở hữu một hạ tầng lưu trữ đối tượng phân tán có tính sẵn sàng cao, hoàn toàn độc lập, không bị ràng buộc bởi nhà cung cấp lớn (Vendor Lock-in) và không lo ngại về chi phí băng thông ẩn.

GarageHQ thực sự là một làn gió mới, định nghĩa lại khái niệm lưu trữ tự vận hành (Self-hosted) cho cộng đồng DevOps và doanh nghiệp nhỏ tối ưu hóa tài nguyên trong kỷ nguyên số.

Xây dựng Hạ tầng Lưu trữ Đối tượng Phân tán (Distributed Object Storage) bằng Garage S3 trên Cụm 3 VPS Chi phí Thấp | DPTCloud