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

Xây Dựng Hệ Thống Kiến Trúc Multi-Primary PostgreSQL Với Spilo Và Patroni Trên 3 VPS ARM64 Oracle Cloud Free Tier

4 tháng 6, 2026

Giới Thiệu Về Giải Pháp Cơ Sở Dữ Liệu Tính Sẵn Sàng Cao (HA)

Trong kỷ nguyên số, dữ liệu được ví như nguồn dầu mỏ mới của doanh nghiệp. Việc đảm bảo hệ thống cơ sở dữ liệu hoạt động liên tục, không bị gián đoạn (Downtime) là bài toán sống còn đối với mọi kiến trúc sư hệ thống. Đối với hệ quản trị cơ sở dữ liệu mã nguồn mở phổ biến như PostgreSQL, việc triển khai một cơ chế High Availability (HA) vững chắc thường đòi hỏi chi phí hạ tầng không hề nhỏ.

Tuy nhiên, bằng cách tận dụng gói tài nguyên miễn phí vô cùng mạnh mẽ Oracle Cloud Free Tier (cung cấp lên đến 4 Cores ARM64 Ampere và 24GB RAM) kết hợp cùng hệ sinh thái của Patroni và Spilo, chúng ta hoàn toàn có thể xây dựng một cụm PostgreSQL đạt chuẩn doanh nghiệp với chi phí vận hành bằng không. Bài viết này sẽ hướng dẫn bạn từng bước thiết lập kiến trúc này một cách tối ưu nhất.

Làm Rõ Khái Niệm: Multi-Primary vs Primary-Replica Trong Patroni

Lưu ý quan trọng về mặt kiến trúc: Trong thuật ngữ cơ sở dữ liệu truyền thống, 'Multi-Primary' (hoặc Multi-Master) cho phép ghi dữ liệu đồng thời ở nhiều node khác nhau. Tuy nhiên, Patroni hoạt động dựa trên mô hình Dynamic Leader Election (Bầu chọn node trưởng nhóm động). Tại một thời điểm, chỉ có duy nhất một node Primary đảm nhận vai trò Ghi (Read-Write), các node còn lại đóng vai trò là Hot Standby (Read-Only).

Điểm đặc biệt ở đây là tính chất 'Multi-Primary' được hiểu theo nghĩa 'Bất kỳ node nào cũng có khả năng tự động cấu hình lại để trở thành Primary chỉ trong vài giây' khi node gốc gặp sự cố (Automatic Failover). Điều này giúp hệ thống đạt độ tin cậy tối đa mà không gặp phải rủi ro xung đột dữ liệu (Data Conflict) như các mô hình Multi-Master thuần túy.

Các Thành Phần Cốt Lõi Trong Hệ Thống

Để triển khai thành công, chúng ta cần sự phối hợp chặt chẽ của ba thành phần công nghệ sau:

  • Patroni: Một công cụ mã nguồn mở được phát triển bởi Zalando, sử dụng các hệ thống lưu trữ phân tán (DCS) như etcd hoặc Consul để quản lý trạng thái và tự động hóa quá trình Failover của PostgreSQL.
  • Spilo: Một Docker image được tối ưu hóa chuẩn hóa, đóng gói sẵn cả PostgreSQL, Patroni, và các công cụ sao lưu như WAL-E/WAL-G. Việc sử dụng Spilo giúp đồng nhất môi trường trên kiến trúc chip ARM64.
  • Oracle Cloud Infrastructure (OCI) ARM64 Ampere: Nền tảng điện toán đám mây cung cấp hiệu năng vượt trội cho các tác vụ tính toán và xử lý cơ sở dữ liệu nhờ kiến trúc đa nhân thực thụ.

Yêu Cầu Chuẩn Bị Trước Khi Cấu Hình

Trước khi bắt tay vào cấu hình, bạn cần chuẩn bị sẵn sàng hạ tầng bao gồm:

  • 3 Virtual Cloud Network (VCN) Instances: Khởi tạo 3 VPS sử dụng hệ điều hành Ubuntu hoặc Oracle Linux, chọn hình dạng (Shape) VM.Standard.A1.Flex (Kiến trúc ARM64).
  • Phân bổ tài nguyên lý tưởng: Mỗi VPS sở hữu ít nhất 1 Core CPU và 6GB - 8GB RAM để đảm bảo hiệu năng ổn định cho Patroni và etcd.
  • Cấu hình Security List (Firewall): Mở các cổng kết nối nội bộ giữa 3 VPS bao gồm: cổng 2379/2380 (dành cho etcd), cổng 8008 (dành cho Patroni REST API), và cổng 5432 (dành cho PostgreSQL).
  • Hướng Dẫn Triển Khai Từng Bước

    Bước 1: Cài đặt và cấu hình cụm etcd (Distributed Consensus Store)

    Hệ thống DCS là 'bộ não' của Patroni, giúp các node đồng thuận xem ai là Primary. Trên cả 3 node, tiến hành cài đặt etcd tương thích với kiến trúc ARM64:

    sudo apt-get update && sudo apt-get install -y etcd-server etcd-client

    Cấu hình file /etc/etcd/etcd.yml trên từng node sao cho các tham số initial-cluster chứa đầy đủ IP của cả 3 VPS. Khởi động dịch vụ và kiểm tra trạng thái cụm bằng lệnh etcdctl cluster-health để đảm bảo cả 3 node đã giao tiếp thông suốt với nhau.

    Bước 2: Triển khai Spilo thông qua Docker trên ARM64

    Vì Spilo được cung cấp dưới dạng Container, bạn cần cài đặt Docker Engine trên cả 3 VPS. Tiến hành kéo (pull) phiên bản Spilo hỗ trợ ARM64 hoặc tự build từ Dockerfile chính thức của Zalando để tối ưu cho chip Ampere.

    Tạo file cấu hình môi trường hoặc file docker-compose.yml cho Spilo. Dưới đây là các biến môi trường cốt lõi cần phải khai báo:

    • SCOPE: Tên của cụm PostgreSQL (ví dụ: pg-cluster).
    • DCS_ENABLE_PG_REWIND: Đặt thành true để tự động đồng bộ lại dữ liệu cũ khi một node Primary bị sập quay trở lại hệ thống dưới dạng Replica.
    • ETCD3_HOSTS: Danh sách IP và port của cụm etcd vừa cấu hình ở Bước 1.
    • POSTGRES_PASSWORD và PGPASSWORD_SUPERUSER: Mật khẩu bảo mật cho tài khoản quản trị cơ sở dữ liệu.

    Bước 3: Khởi chạy và kiểm tra quá trình đồng bộ (Replication)

    Khởi chạy container Spilo trên cả 3 node. Node đầu tiên khởi động sẽ thực hiện tiến trình initdb để khởi tạo database trống và đăng ký quyền Primary lên etcd thông qua Patroni. Node thứ 2 và thứ 3 khi khởi chạy sẽ nhận thấy đã có Primary hiện hữu, chúng sẽ tự động kích hoạt tiến trình pg_basebackup để sao chép dữ liệu từ Primary về và chuyển sang trạng thái Streaming Replication.

    Sử dụng công cụ patronictl ngay bên trong container để kiểm tra trạng thái của toàn cụm:

    docker exec -it spilo-container patronictl -c /home/postgres/postgres.yml list

    Màn hình hiển thị bảng trạng thái với 1 node có Role là Leader (Primary) và 2 node có Role là Replica với trạng thái running là bạn đã thành công.

    Kịch Bản Thử Nghiệm Tính Sẵn Sàng Cao (Failover Test)

    Để chứng minh sức mạnh của kiến trúc Patroni, chúng ta hãy giả lập một tình huống sự cố. Tiến hành dừng container Spilo đột ngột trên node đang giữ vai trò Leader (Primary) bằng lệnh docker stop.

    Ngay lập tức, cơ chế giữ khóa (TTL Lock) trên etcd sẽ hết hạn. Hai node Replica còn lại sẽ nhận biết được sự vắng mặt của Leader và bắt đầu tiến trình bầu chọn (Election). Node nào có vị trí log dữ liệu (LSN) mới nhất và phản hồi nhanh nhất sẽ được thăng cấp lên làm Leader mới chỉ trong vòng 2 đến 5 giây. Toàn bộ quá trình này diễn ra tự động hoàn toàn mà không cần sự can thiệp thủ công của kỹ sư hệ thống.

    Kết Luận và Khuyến Nghị Cho Doanh Nghiệp

    Việc kết hợp Spilo, Patroni cùng hạ tầng Oracle Cloud ARM64 Free Tier mang lại một giải pháp đột phá về mặt chi phí và công nghệ cho các doanh nghiệp startup hoặc các dự án thử nghiệm (R&D). Hệ thống không chỉ đảm bảo dữ liệu luôn được an toàn trước các sự cố phần cứng đơn lẻ mà còn tận dụng tối đa sức mạnh của dòng chip ARM64 hiện đại.

    Tuy nhiên, khi đưa vào môi trường sản xuất (Production) thực tế, doanh nghiệp cần lưu ý thiết lập thêm hệ thống giám sát (Monitoring) bằng Prometheus & Grafana, đồng thời cấu hình cơ chế lưu trữ bản sao lưu (Backup) tự động lên Object Storage của Oracle để đảm bảo an toàn dữ liệu tuyệt đối trước mọi tình huống thiên tai hoặc thảm họa hệ thống nghiêm trọng.

    Xây Dựng Hệ Thống Kiến Trúc Multi-Primary PostgreSQL Với Spilo Và Patroni Trên 3 VPS ARM64 Oracle Cloud Free Tier | DPTCloud