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

Tự Động Hóa Khôi Phục Thảm Họa PostgreSQL Đa Vùng với CloudNativePG, AWS S3 và ArgoCD

21 tháng 8, 2026

Tự Động Hóa Khôi Phục Thảm Họa PostgreSQL Đa Vùng với CloudNativePG, AWS S3 và ArgoCD

Xây dựng kiến trúc PostgreSQL có tính sẵn sàng cao (HA) trên các vùng địa lý đòi hỏi cơ chế truyền log Write-Ahead Log (WAL) tin cậy, khả năng khôi phục tại mốc thời gian (PITR) và quản lý vòng đời khai báo. CloudNativePG cung cấp các trừu tượng native trên Kubernetes cho PostgreSQL, kết hợp với Barman Cloud để đồng bộ hóa object storage. Khi tích hợp với cơ chế sao chép đa vùng AWS S3 Cross-Region Replication và ArgoCD, đội ngũ kỹ thuật có thể triển khai mô hình GitOps Disaster Recovery chuẩn doanh nghiệp với RPO gần bằng 0 và RTO cực thấp.

1. Kiến Trúc Tổng Quan Đa Vùng

Mô hình bao gồm một Primary Cluster đặt tại us-east-1 (Region A) và một Designated Replica Cluster chạy tại us-west-2 (Region B). Các tập tin WAL archive và bản sao lưu cơ sở dữ liệu (base backup) liên tục đẩy về AWS S3 bucket tại us-east-1, sau đó tự động sao chép sang S3 bucket tại us-west-2.

ArgoCD quản lý cả hai cluster Kubernetes theo chuẩn GitOps, đảm bảo sự đồng nhất về mặt cấu hình và điều phối quy trình chuyển vùng (failover) thông qua các thay đổi file khai báo trên Git.

2. Cấu Hình AWS IAM và S3 Cross-Region Replication

Cấp quyền IAM Roles for Service Accounts (IRSA) để cho phép CloudNativePG pods đẩy và đọc các tập tin WAL từ S3 mà không cần lưu trữ static secret credentials.

# IAM Trust Policy cho CloudNativePG Operator ServiceAccount
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "arn:aws:iam::123456789012:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/EXAMPLE123456"
      },
      "Action": "sts:AssumeRoleWithWebIdentity",
      "Condition": {
        "StringEquals": {
          "oidc.eks.us-east-1.amazonaws.com/id/EXAMPLE123456:sub": "system:serviceaccount:postgres-system:cnpg-main"
        }
      }
    }
  ]
}

3. Cấu Hình Primary Cluster (Region A: us-east-1)

Primary Cluster ghi liên tục các tập tin WAL log lên S3 primary bucket thông qua tính năng tích hợp sẵn Barman Cloud Object Store của CloudNativePG.

apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
  name: postgres-primary
  namespace: database
spec:
  instances: 3
  primaryUpdateStrategy: Unsupervised
  storage:
    size: 100Gi
    storageClass: gp3-encrypted
  walStorage:
    size: 50Gi
    storageClass: gp3-encrypted
  backup:
    barmanObjectStore:
      destinationPath: s3://company-postgres-backups-us-east-1/primary-db
      endpointURL: https://s3.us-east-1.amazonaws.com
      s3Credentials:
        inheritFromIAMRole: true
      wal:
        compression: gzip
        maxParallel: 4
      data:
        compression: gzip
        jobs: 2
  resources:
    requests:
      cpu: "2"
      memory: 4Gi
    limits:
      cpu: "4"
      memory: 8Gi

4. Cấu Hình Designated Replica Cluster (Region B: us-west-2)

Replica cluster tại us-west-2 chạy ở chế độ standby liên tục, lấy các file WAL trực tiếp từ S3 bucket đã được sao chép local. Mô hình này duy trì độ trễ đồng bộ cực thấp mà không cần mở kết nối mạng trực tiếp giữa hai vùng.

apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
  name: postgres-replica
  namespace: database
spec:
  instances: 3
  replica:
    enabled: true
    source: primary-s3-source
  externalClusters:
    - name: primary-s3-source
      barmanObjectStore:
        destinationPath: s3://company-postgres-backups-us-west-2/primary-db
        endpointURL: https://s3.us-west-2.amazonaws.com
        s3Credentials:
          inheritFromIAMRole: true
        wal:
          maxParallel: 4
  storage:
    size: 100Gi
    storageClass: gp3-encrypted
  resources:
    requests:
      cpu: "2"
      memory: 4Gi
    limits:
      cpu: "4"
      memory: 8Gi

5. Quản Lý GitOps với ArgoCD & Kịch Bản Failover Khẩn Cấp

ArgoCD triển khai ứng dụng tới cả hai cluster thông qua tài nguyên ApplicationSet. Khi xảy ra sự cố thảm họa cần chuyển vùng khẩn cấp:

  • Bước 1: Ngắt traffic tới us-east-1 thông qua ExternalDNS / AWS Route53.
  • Bước 2: Trên repository Git, cập nhật file khai báo của replica cluster để bỏ chế độ standby bằng cách xóa hoặc chỉnh thành spec.replica.enabled: false.
  • Bước 3: Commit thay đổi. ArgoCD tự động đồng bộ trạng thái mới xuống us-west-2, nâng cấp cluster standby thành Primary Cluster độc lập.
Lưu ý vận hành: Cần giám sát độ trễ AWS S3 Cross-Region Replication luôn ở mức dưới 10 giây để đảm bảo chỉ số RPO khắt khe của doanh nghiệp khi kích hoạt chuyển vùng.