Chạy Cụm Docker Swarm Kết Hợp GlusterFS Trên 3 VPS ARM Miễn Phí Của Oracle: Giải Pháp HA Giá 0 Đồng
Giới thiệu về bài toán High Availability (HA) với chi phí tối ưu
Trong kỷ nguyên chuyển đổi số, đảm bảo tính sẵn sàng cao (High Availability - HA) cho các ứng dụng web không còn là đặc quyền của các doanh nghiệp lớn với ngân sách khổng lồ. Đối với các startup, doanh nghiệp nhỏ hoặc các nhà phát triển độc lập, bài toán đặt ra là: Làm thế nào để xây dựng một hạ tầng có khả năng chịu lỗi (fault-tolerant), tự động cân bằng tải nhưng với chi phí tối thiểu, thậm chí là bằng 0?
Câu trả lời nằm ở sự kết hợp hoàn hảo giữa ba yếu tố: Chương trình Oracle Cloud Always Free, công cụ điều phối container Docker Swarm, và hệ thống lưu trữ phân tán GlusterFS. Bài viết này sẽ hướng dẫn bạn từng bước thiết lập một cụm (cluster) đáp ứng đầy đủ tiêu chuẩn HA mà không tốn một đồng chi phí bản quyền hay thuê hạ tầng.
Tại sao lại chọn Oracle ARM, Docker Swarm và GlusterFS?
Để hiểu tại sao mô hình này lại tối ưu, chúng ta hãy cùng phân tích các thành phần cốt lõi cấu thành nên giải pháp:
- Oracle Cloud Always Free (ARM Ampere A1): Oracle hiện là nhà cung cấp đám mây hào phóng nhất khi cung cấp miễn phí lên đến 4 Cores CPU và 24 GB RAM cho các tài khoản Free Tier sử dụng chip ARM. Chúng ta có thể chia nhỏ tài nguyên này thành 3 VPS (ví dụ: mỗi VPS có 1 Core và 6GB - 8GB RAM) để tạo thành một cụm 3 nodes - số lượng node tối thiểu lý tưởng để đạt được sự đồng thuận (quorum) trong hệ thống phân tán.
- Docker Swarm: Khác với Kubernetes (K8s) cấu hình phức tạp và ngốn nhiều tài nguyên vận hành, Docker Swarm tích hợp sẵn vào Docker Engine, cực kỳ nhẹ nhàng, dễ thiết lập và quản lý, rất phù hợp cho các cụm máy chủ có cấu hình vừa phải.
- GlusterFS: Khi các container di chuyển linh hoạt giữa các node trong cụm Docker Swarm, dữ liệu của chúng cần phải được đồng bộ liên tục. GlusterFS đóng vai trò là một hệ thống tệp phân tán (Distributed File System), gộp ổ cứng của cả 3 VPS thành một vùng lưu trữ chung duy nhất. Khi một node gặp sự cố, dữ liệu vẫn an toàn và khả dụng trên các node còn lại.
Kiến trúc tổng quan của hệ thống
Hệ thống của chúng ta sẽ bao gồm 3 VPS chạy hệ điều hành Ubuntu Server (hỗ trợ kiến trúc ARM64), được liên kết với nhau thông qua mạng nội bộ (Virtual Cloud Network - VCN) của Oracle Cloud:
- Node 1 (manager-01): Docker Swarm Manager + GlusterFS Peer 1
- Node 2 (worker-01 / manager-02): Docker Swarm Worker/Manager + GlusterFS Peer 2
- Node 3 (worker-02 / manager-03): Docker Swarm Worker/Manager + GlusterFS Peer 3
Lưu ý: Để đạt độ tin cậy cao nhất cho cơ chế bầu chọn (Raft consensus) của Docker Swarm, bạn nên cấu hình cả 3 node thành Manager hoặc giữ mô hình 1 Manager - 2 Workers tùy thuộc vào nhu cầu quản trị, nhưng 3 Managers là khuyến nghị tốt nhất cho khả năng chịu lỗi tối đa của Cluster điều phối.
Các bước triển khai chi tiết
Bước 1: Khởi tạo hạ tầng trên Oracle Cloud
Đầu tiên, bạn cần đăng ký tài khoản Oracle Cloud và khởi tạo 3 máy ảo Compute Instance sử dụng Image Ubuntu (khuyến nghị phiên bản LTS mới nhất) với Shape VM.Standard.A1.Flex. Cấu hình mỗi node là 1 OCPU và 6GB RAM.
Về phần mạng, hãy đảm bảo rằng cả 3 VPS nằm chung một Subnet trong VCN. Bạn cần cấu hình Ingress Rules trong Security List để mở các cổng sau:
- GlusterFS: Cổng 24007 (TCP), 24008 (TCP), 49152 đến 49156 (TCP).
- Docker Swarm: Cổng 2377 (TCP), 7946 (TCP/UDP), 4789 (UDP).
Bước 2: Cấu hình và đồng bộ lưu trữ với GlusterFS
Cài đặt GlusterFS Server trên cả 3 node bằng lệnh:
sudo apt update && sudo apt install -y glusterfs-serverKhởi động dịch vụ và thiết lập tự động chạy cùng hệ thống:
sudo systemctl enable --now glusterdTại manager-01, thực hiện kết nối (peer probe) tới 2 node còn lại bằng IP nội bộ:
sudo gluster peer probe [IP_NODE_2]
sudo gluster peer probe [IP_NODE_3]Sau khi trạng thái peer đã kết nối thành công, tiến hành tạo một Volume phân tán có tính chất sao chép (Replicated Volume) để đảm bảo dữ liệu ghi vào một node sẽ tự động nhân bản sang các node khác:
sudo gluster volume create swarm-gfs replica 3 manager-01:/data/glusterfs/brick1 worker-01:/data/glusterfs/brick1 worker-02:/data/glusterfs/brick1 force
sudo gluster volume start swarm-gfsCuối cùng, mount volume này vào một thư mục cục bộ (ví dụ: /mnt/glusterfs) trên cả 3 node để Docker Swarm có thể sử dụng làm nơi lưu trữ Volume Data.
Bước 3: Khởi tạo cụm Docker Swarm
Cài đặt Docker Engine trên cả 3 node theo tài liệu chính thức của Docker dành cho kiến trúc ARM64. Sau đó, tại manager-01, khởi tạo Swarm:
sudo docker swarm init --advertise-addr [IP_NDOE_1]Hệ thống sẽ sinh ra một chuỗi lệnh dạng docker swarm join --token .... Sao chép lệnh này và chạy trên worker-01 và worker-02 để liên kết chúng vào cụm.
Bước 4: Triển khai ứng dụng mẫu dạng High Availability
Bây giờ hệ thống đã sẵn sàng, chúng ta sẽ viết một tệp docker-compose.yml để triển khai một dịch vụ web (ví dụ: Nginx) sử dụng dữ liệu tĩnh lưu trên vùng GlusterFS chung. Điểm đặc trưng ở đây là cấu hình volumes trỏ về thư mục đã mount GlusterFS (/mnt/glusterfs) và cấu hình deploy.replicas: 3 để Docker Swarm tự động phân phối 3 container chạy đồng thời trên 3 node máy chủ.
Khi có yêu cầu truy cập từ người dùng, cơ chế Ingress Routing Mesh tích hợp sẵn của Docker Swarm sẽ tự động cân bằng tải đến node đang rảnh, đảm bảo dịch vụ luôn thông suốt ngay cả khi có 1 hoặc thậm chí 2 node vật lý bị sập đột ngột.
Đánh giá hiệu năng và những lưu ý quan trọng
Giải pháp kết hợp này mang lại hiệu quả rất lớn về mặt chi phí và độ an toàn dữ liệu, tuy nhiên do chạy trên hạ tầng miễn phí và kiến trúc lưu trữ qua mạng (Network-attached storage), bạn cần lưu ý một số điểm sau:
- Tốc độ I/O của ổ đĩa: Vì GlusterFS đồng bộ dữ liệu qua mạng nội bộ, các ứng dụng có tần suất đọc/ghi file liên tục với dung lượng lớn (như các cơ sở dữ liệu quan hệ nặng MySQL, PostgreSQL) có thể gặp hiện tượng nghẽn cổ chai (I/O wait). Giải pháp là chỉ nên lưu file cấu hình, mã nguồn web, ảnh tĩnh trên GlusterFS, còn DB nên được tối ưu riêng hoặc sử dụng các giải pháp DB cluster chuyên dụng.
- Kiến trúc ARM64: Nhờ sức mạnh của chip Ampere, hiệu năng tính toán cực kỳ ấn tượng. Tuy nhiên, khi chọn Image trên Docker Hub, hãy chắc chắn rằng Image đó có hỗ trợ tag
arm64hoặcmulti-arch. - Giám sát hệ thống: Đừng quên thiết lập các công cụ giám sát nhẹ nhàng như Portainer hoặc Prometheus/Grafana để theo dõi tình trạng sức khỏe của cụm Swarm và dung lượng lưu trữ của GlusterFS.
Lời kết
Xây dựng một hệ thống High Availability giá 0 đồng không còn là điều bất khả thi nhờ sự kết hợp giữa Docker Swarm, GlusterFS và phần cứng ARM mạnh mẽ từ Oracle Cloud Always Free. Đây là mô hình thử nghiệm và triển khai sản phẩm lý tưởng, giúp bạn tối ưu hóa tài nguyên đám mây và nâng cao kỹ năng DevOps quản trị hệ thống phân tán mà không gặp bất kỳ áp lực nào về mặt tài chính.
