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

Xây dựng Cluster Lưu Trữ S3-Compatible Phân Tán Bằng Garage trên Nhiều VPS Giá Rẻ Khác Vị Trí Địa Lý

3 tháng 6, 2026

Giới thiệu về Thách Thức Lưu Trữ và Giải Pháp Garage S3

Trong kỷ nguyên số, việc quản lý và lưu trữ dữ liệu hiệu quả là yếu tố sống còn đối với mọi doanh nghiệp. Giao thức Amazon S3 (Simple Storage Service) đã trở thành tiêu chuẩn công nghiệp cho lưu trữ đối tượng (object storage). Tuy nhiên, chi phí băng thông đường truyền (egress fees) và phí lưu trữ của các nhà cung cấp đám mây lớn như AWS, Google Cloud hay Microsoft Azure thường rất đắt đỏ, đặc biệt là khi quy mô dữ liệu tăng lên hàng Terabyte.

Để tối ưu hóa chi phí, nhiều kiến trúc sư hệ thống đã nghĩ đến việc tự vận hành (self-host) một cụm lưu trữ S3 riêng. Thay vì sử dụng MinIO—vốn yêu cầu cấu hình phần cứng khá mạnh và gặp nhiều hạn chế khi triển khai trên mô hình phân tán địa lý (geo-distributed) với độ trễ mạng cao—Garage (Garage SQ3) nổi lên như một giải pháp thay thế hoàn hảo. Garage là một mã nguồn mở nhẹ, được thiết kế đặc biệt để kết hợp các VPS giá rẻ từ nhiều nhà cung cấp khác nhau thành một vùng lưu trữ duy nhất, có khả năng chống chịu phân mảnh mạng tốt và đảm bảo an toàn dữ liệu tối đa.

Bài viết này sẽ hướng dẫn bạn từng bước thiết lập một cấu hình Cluster lưu trữ S3-compatible phân tán bằng Garage trên các VPS giá rẻ ở nhiều vị trí địa lý khác nhau.

Tại sao nên chọn Garage cho Kiến trúc Phân tán Địa lý?

Garage được thiết kế bằng ngôn ngữ lập trình Rust, tập trung vào sự tối giản, hiệu năng cao và khả năng chịu lỗi. Dưới đây là những lý do mô hình này phù hợp cho doanh nghiệp vừa và nhỏ:

  • Khả năng chịu lỗi cao (Fault Tolerance): Garage sử dụng mô hình nhất quán dữ liệu dựa trên CRDTs (Conflict-free Replicated Data Types). Ngay cả khi một hoặc hai trung tâm dữ liệu gặp sự cố, hệ thống vẫn hoạt động bình thường.
  • Tối ưu cho VPS cấu hình thấp: Khác với Ceph hay MinIO Cluster đòi hỏi lượng RAM lớn, Garage có thể chạy mượt mà trên các VPS chỉ với 1GB hoặc 2GB RAM.
  • Tận dụng dung lượng thừa: Bạn có thể gom các gói VPS giá rẻ từ Hetzner, OVH, Linode, DigitalOcean hoặc các nhà cung cấp Việt Nam để tạo thành một dung lượng lưu trữ lớn hợp nhất.
Lưu ý kiến trúc: Để đạt được hiệu năng và độ an toàn tối ưu, bạn nên cấu hình tối thiểu 3 node (nút) đặt tại 3 vị trí địa lý khác nhau để đảm bảo quy tắc đa số (quorum) trong đồng thuận dữ liệu.

Chuẩn Bị Hạ Tầng Trước Khi Cấu Hình

Trước khi bắt đầu, chúng ta cần chuẩn bị các tài nguyên sau:

  1. 3 VPS ở các phân vùng khác nhau: Ví dụ Node A (Singapore), Node B (Germany), Node C (USA). Hệ điều hành khuyến khích là Ubuntu 22.04 LTS hoặc Ubuntu 24.04 LTS.
  2. Tên miền (Domain Name): Đã trỏ các bản ghi sub-domain về IP của các VPS tương ứng (ví dụ: s3-node1.domain.com, s3-node2.domain.com...).
  3. Mở các cổng mạng (Firewall): Cần đảm bảo các cổng sau được mở trên tất cả các node:
    • 3901: Cổng giao tiếp nội bộ giữa các node của Garage (RPC).
    • 3900: Cổng giao tiếp API chuẩn S3 cho ứng dụng khách.
    • 3902: Cổng giao tiếp Web Console (Kube/Admin nếu cần).

Các Bước Cấu Hình Chi Tiết Cụm Cluster Garage

Bước 1: Cài đặt Garage trên các Node

Truy cập vào từng VPS thông qua SSH và tải xuống phiên bản Garage mới nhất. Bạn có thể sử dụng file thực thi (binary) trực tiếp hoặc cài qua Docker. Trong bài viết này, chúng tôi hướng dẫn cài đặt trực tiếp bằng binary để đạt hiệu năng cao nhất.

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
sudo mv garage /usr/local/bin/

Kiểm tra cài đặt bằng lệnh: garage --version

Bước 2: Tạo File Cấu Hình garage.toml

Tại mỗi node, bạn cần tạo một file cấu hình nằm tại đường dẫn /etc/garage.toml. Nội dung file cấu hình trên mỗi node sẽ tương tự nhau, chỉ khác biệt ở phần định danh địa chỉ IP nội bộ và tên node. Dưới đây là mẫu cấu hình chuẩn:

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

bind_public_rpc = "[IP_CONG_CUA_NODE]:3901"
bind_s3 = "[IP_CONG_CUA_NODE]:3900"

rpc_secret_key = "CHUOI_SECRET_KEY_CHUNG_CHO_ALL_NODES"

[consistency]
replication_factor = 3

Giải thích tham số:

  • metadata_dir: Nơi lưu trữ bảng chỉ mục dữ liệu, nên đặt ở ổ đĩa SSD/NVMe tốc độ cao.
  • data_dir: Nơi lưu trữ file thực tế (Object chunks).
  • rpc_secret_key: Khóa mã hóa bảo mật để các node xác thực với nhau. Bạn tạo chuỗi này bằng lệnh openssl rand -hex 32 và copy giống nhau trên cả 3 node.

Bước 3: Khởi Chạy Dịch Vụ Dưới Dạng Systemd Service

Để đảm bảo Garage tự động chạy khi khởi động lại VPS, hãy tạo file dịch vụ systemd tại /etc/systemd/system/garage.service:

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

[Service]
Type=simple
ExecStart=/usr/local/bin/garage server -c /etc/garage.toml
Restart=on-failure
User=root

[Install]
WantedBy=multi-user.target

Kích hoạt và khởi chạy dịch vụ trên toàn bộ các node:

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

Kết Nối Các Node Thành Một Cluster Thống Nhất

Sau khi dịch vụ đã chạy trên cả 3 node, chúng hiện tại vẫn là các thực thể độc lập. Chúng ta cần thực hiện kết nối chúng lại thành một cluster tổng thể.

Tại Node A, thực hiện lệnh kết nối tới các Node B và Node C thông qua mã nhận diện Node ID. Để lấy Node ID của từng node, chạy lệnh:

garage node status

Tiến hành kết nối bằng cách nhập lệnh sau trên Node A (hoặc bất kỳ node nào):

garage node connect [NODE_ID_NODE_B]@[IP_NODE_B]:3901
garage node connect [NODE_ID_NODE_C]@[IP_NODE_C]:3901

Sau khi kết nối thành công, bạn cần gán phân vùng địa lý và trọng số cấu hình (Weight) cho từng node để Garage phân bổ dữ liệu một cách hợp lý:

garage layout assign [NODE_ID_NODE_A] --capacity 100G --zone singapore
garage layout assign [NODE_ID_NODE_B] --capacity 100G --zone germany
garage layout assign [NODE_ID_NODE_C] --capacity 100G --zone usa

Cuối cùng, áp dụng cấu hình này vào hệ thống bằng lệnh:

garage layout apply --version 1

Tạo Khóa Truy Cập S3 và Bucket Để Sử Dụng

Bây giờ cluster của bạn đã hoạt động đồng bộ. Bạn cần tạo tài khoản truy cập (Access Key / Secret Key) tương tự như trên AWS S3:

garage key create my-app-key

Hệ thống sẽ trả về chuỗi Access Key ID và Secret Access Key. Tiếp theo, tạo một Bucket để lưu trữ dữ liệu:

garage bucket create my-company-bucket

Cấp quyền cho khóa vừa tạo có quyền đọc/ghi trên Bucket này:

garage bucket allow my-company-bucket --read --write --key my-app-key

Kiểm Tra Và Đánh Giá Hiệu Năng

Bạn có thể sử dụng các công cụ quản lý S3 phổ biến như Rclone, Cyberduck hoặc các thư viện AWS SDK (bằng Python, Node.js, Go) để kết nối thử nghiệm. Cấu hình Endpoint sẽ trỏ về IP của một trong ba node, ví dụ: [http://s3-node1.domain.com:3900](http://s3-node1.domain.com:3900).

Nhờ vào cơ chế đồng thuận thông minh, khi bạn upload một file lên Node A tại Singapore, dữ liệu sẽ ngay lập tức được mã hóa, chia nhỏ thành các chunk dữ liệu và đồng bộ ngầm sang Node B (Germany) và Node C (USA). Quy trình này diễn ra bất đồng bộ và không làm nghẽn băng thông ghi của client.

Lời Kết và Khuyến Nghị Vận Hành

Xây dựng hệ thống lưu trữ S3-compatible phân tán với Garage SQ3 là giải pháp tối ưu giúp doanh nghiệp tự chủ về mặt công nghệ, tránh tình trạng "vendor lock-in" và tiết kiệm tới 70% chi phí so với các giải pháp cloud truyền thống. Tuy nhiên, khi vận hành hệ thống này trên production, bạn cần lưu ý thường xuyên theo dõi dung lượng ổ cứng của các node và thiết lập hệ thống giám sát cảnh báo (Prometheus/Grafana) để đảm bảo tính sẵn sàng cao nhất cho dữ liệu.

Xây dựng Cluster Lưu Trữ S3-Compatible Phân Tán Bằng Garage trên Nhiều VPS Giá Rẻ Khác Vị Trí Địa Lý | DPTCloud