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

Xây Dựng Kiến Trúc High Availability (HA) Cho Strapi CMS Trên Cụm 3 VPS Hetzner Với HAProxy

30 tháng 5, 2026

Đặt Vấn Đề: Tại Sao Strapi Cần Kiến Trúc High Availability (HA)?

Trong kỷ nguyên số hóa, Headless CMS như Strapi đã trở thành lựa chọn hàng đầu cho các doanh nghiệp nhờ tính linh hoạt, khả năng quản lý nội dung đa kênh và hiệu suất vượt trội. Tuy nhiên, khi ứng dụng của bạn phục vụ hàng triệu người dùng hoặc vận hành các hệ thống thương mại điện tử cốt lõi, việc phụ thuộc vào một máy chủ duy nhất (Single Point of Failure - SPoF) là một rủi ro cực kỳ lớn. Chỉ một sự cố phần cứng, nghẽn mạng hoặc quá tải CPU tại VPS đó có thể khiến toàn bộ hệ thống ngừng hoạt động.

Để giải quyết bài toán này, việc xây dựng kiến trúc High Availability (HA - Tính sẵn sàng cao) là bắt buộc. Hệ thống HA đảm bảo rằng nếu một hoặc nhiều thành phần gặp sự cố, các thành phần còn lại sẽ lập tức gánh vác tải lượng công việc mà không làm gián đoạn trải nghiệm của người dùng cuối. Bài viết này sẽ hướng dẫn bạn từng bước thiết kế và triển khai hạ tầng HA hoàn chỉnh cho Strapi trên 3 máy chủ VPS của nhà cung cấp Hetzner – tối ưu về cả chi phí lẫn hiệu năng – kết hợp cùng bộ cân bằng tải mạnh mẽ HAProxy.

Tổng Quan Kiến Trúc Hệ Thống Cụm 3 VPS Hetzner

Hetzner Cloud nổi tiếng với hiệu suất CPU vượt trội trên giá thành. Để xây dựng một cụm HA tiêu chuẩn, chúng ta sẽ phân bổ tài nguyên trên 3 node VPS độc lập nhằm đảm bảo tính toàn vẹn của dữ liệu và khả năng chịu lỗi tối đa:

  • Node 1 (Load Balancer & Entry Point): Cài đặt HAProxy để tiếp nhận tất cả lưu lượng truy cập (Traffic) từ Internet, kiểm tra trạng thái các node phía sau (Health Check) và phân phối tải một cách thông minh.
  • Node 2 (Strapi Instance A & Database Master): Chạy ứng dụng Strapi Node.js thứ nhất, đồng thời cấu hình cơ sở dữ liệu (ví dụ: PostgreSQL hoặc MySQL) đóng vai trò Master.
  • Node 3 (Strapi Instance B & Database Replica): Chạy ứng dụng Strapi Node.js thứ hai, kết hợp đồng bộ dữ liệu thời gian thực (Replication) từ Database Master. Nếu Node 2 gặp sự cố, Node 3 sẵn sàng tiếp quản toàn bộ dữ liệu.
Lưu ý chiến lược: Để đảm bảo an toàn tối đa, hãy khởi tạo các VPS này tại các Datacenter (Zone) khác nhau của Hetzner (ví dụ: Falkenstein và Helsinki) để phòng ngừa sự cố mất điện hoặc thiên tai diện rộng trên một vùng vật lý.

Các Bước Triển Khai Chi Tiết

Bước 1: Cấu Hình Tầng Cơ Sở Dữ Liệu Đồng Bộ

Strapi là một ứng dụng phụ thuộc nặng nề vào cơ sở dữ liệu. Trước khi chạy đa node Strapi, chúng ta cần đảm bảo dữ liệu ở cả hai máy chủ luôn đồng nhất. Trong hướng dẫn này, chúng ta sử dụng PostgreSQL:

  • Cài đặt PostgreSQL trên cả Node 2 và Node 3.
  • Cấu hình Node 2 làm Primary Master, cho phép ghi và đọc dữ liệu.
  • Cấu hình Node 3 làm Standby Replica (Streaming Replication), liên tục sao chép dữ liệu từ Node 2 dưới dạng Read-Only.
  • Sử dụng các công cụ quản lý cluster như Patroni hoặc pgpool-II để tự động chuyển đổi vai trò (Failover) từ Replica lên Master nếu Node 2 đột ngột ngoại tuyến.
  • Bước 2: Triển Khai Các Bản Ghi Strapi (Stateless Nodes)

    Để Strapi có thể chạy song song trên nhiều máy chủ, ứng dụng phải được thiết kế theo dạng Stateless (không lưu trạng thái cục bộ). Điều này đặt ra hai thách thức lớn: Quản lý File Uploads và Quản lý Session/Cache.

    Để giải quyết vấn đề lưu trữ tệp tin (hình ảnh, video, tài liệu), bạn không thể lưu trực tiếp vào thư mục public/uploads của từng VPS. Thay vào đó, hãy cấu hình Strapi sử dụng các Provider lưu trữ đám mây tập trung như Hetzner Object Storage (S3-compatible) hoặc AWS S3 thông qua plugin @strapi/provider-upload-aws-s3. Bằng cách này, dù người dùng upload file thông qua Node 2, Node 3 vẫn có thể truy cập và hiển thị file đó ngay lập tức.

    Tiếp theo, hãy clone mã nguồn Strapi của bạn lên cả Node 2 và Node 3, khởi chạy ứng dụng thông qua một trình quản lý tiến trình mạnh mẽ như PM2 ở chế độ Cluster Mode để tận dụng tối đa số lượng core CPU của VPS.

    Bước 3: Cấu Hình HAProxy Làm Bộ Cân Bằng Tải (Load Balancer)

    HAProxy đóng vai trò là "trái tim" điều hướng của toàn bộ kiến trúc. Trên Node 1, chúng ta tiến hành cài đặt HAProxy và cấu hình tệp tin /etc/haproxy/haproxy.cfg để phân phối traffic đến hai máy chủ Strapi.

    Dưới đây là đoạn cấu hình mẫu chuẩn công nghiệp cho HAProxy:

    frontend strapi_frontend
        bind *:80
        bind *:443 ssl crt /etc/ssl/certs/yourdomain.pem
        mode http
        default_backend strapi_backend
    
    backend strapi_backend
        mode http
        balance roundrobin
        cookie SERVERID insert indirect nocache
        option httpchk GET /api/health
        http-check expect status 200
        server strapi_node_a 10.0.0.2:1337 check cookie node_a
        server strapi_node_b 10.0.0.3:1337 check cookie node_b

    Trong cấu hình trên, thuật toán roundrobin giúp chia đều các yêu cầu truy cập cho cả hai Node. Cơ chế cookie SERVERID (Sticky Sessions) cực kỳ quan trọng đối với trang quản trị Strapi Admin Dashboard, giữ cho phiên đăng nhập của quản trị viên ổn định trên một máy chủ duy nhất trong suốt phiên làm việc. Khai báo option httpchk liên tục gửi request đến endpoint sức khỏe của Strapi; nếu một node bị sập, HAProxy sẽ tự động loại bỏ node đó khỏi danh sách điều hướng trong vòng vài mili-giây.

    Kịch Bản Thử Nghiệm Khả Năng Chịu Lỗi (Failover Testing)

    Một hệ thống HA chỉ thực sự đáng tin cậy khi nó đã vượt qua các bài kiểm tra thực tế. Do nghiệp nên thực hiện hai kịch bản thử nghiệm sau trong môi trường Staging trước khi chính thức Go-live:

    Kịch bản 1: Giả lập sập một node ứng dụng. Tiến hành dừng dịch vụ PM2 trên Node 2 (pm2 stop all). Truy cập vào website và kiểm tra hệ thống. Kết quả kỳ vọng: HAProxy lập tức nhận biết Node 2 offline thông qua Health Check và chuyển hướng 100% traffic sang Node 3. Người dùng cuối không nhận thấy bất kỳ thông báo lỗi nào.

    Kịch bản 2: Giả lập sập database chính. Tắt dịch vụ PostgreSQL trên Node 2. Kết quả kỳ vọng: Hệ thống tự động kích hoạt tiến trình Failover, biến PostgreSQL trên Node 3 thành Master mới. Strapi tự động kết nối lại và duy trì tính năng đọc/ghi nội dung bình thường.

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

    Xây dựng hệ thống High Availability cho Strapi trên cụm 3 VPS Hetzner với HAProxy là một giải pháp tối ưu, mang lại sự cân bằng hoàn hảo giữa chi phí vận hành và hiệu năng mạnh mẽ cho doanh nghiệp. Tuy nhiên, hạ tầng chỉ là bước khởi đầu. Để duy trì hệ thống luôn ở trạng thái đỉnh cao, bạn cần kết hợp thêm các giải pháp giám sát tập trung (như Prometheus & Grafana) để theo dõi tài nguyên, cũng như thiết lập các kịch bản sao lưu dữ liệu tự động hàng ngày (Automated Backups).

    Đầu tư vào kiến trúc HA ngày hôm nay chính là bảo hiểm vững chắc nhất cho uy tín thương hiệu và sự phát triển bền vững của doanh nghiệp bạn trên không gian số.

    Xây Dựng Kiến Trúc High Availability (HA) Cho Strapi CMS Trên Cụm 3 VPS Hetzner Với HAProxy | DPTCloud