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 Database Đa Vùng với CloudNativePG, AWS S3 và ArgoCD

Đạt được mục tiêu không mất dữ liệu (RPO ≈ 0) và thời gian khôi phục cực nhanh (RTO < 5 phút) giữa các vùng đám mây (cloud regions) cô lập là tiêu chuẩn vàng cho kiến trúc cơ sở dữ liệu doanh nghiệp. Trong môi trường Kubernetes-native, để đạt được độ tin cậy này cần có sự phối hợp nhịp nhàng giữa PostgreSQL Operator, lưu trữ đối tượng đám mây và quy trình GitOps khai báo.

Bài viết này hướng dẫn kỹ thuật toàn diện để thiết kế, triển khai và quản lý mô hình High Availability (HA) và Disaster Recovery (DR) đa vùng cho PostgreSQL bằng CloudNativePG (CNPG), AWS S3 Cross-Region Replication và ArgoCD.

1. Tổng Quan Kiến Trúc Systems

Giải pháp chạy trên hai AWS region độc lập: Region chính (us-east-1) và Region khôi phục thảm họa (DR) (us-west-2). Kubernetes cluster chính chứa PostgreSQL cluster đang hoạt động, liên tục ghi Write-Ahead Logs (WAL) và đẩy vào S3 bucket ở us-east-1 nhờ tính năng Barman Cloud tích hợp.

Các Thành Phần Trong Kiến Trúc:

  • Primary EKS Cluster (us-east-1): Chạy CloudNativePG chính với 3 replicas để đảm bảo HA nội vùng. Liên tục đẩy bản lưu trữ WAL và base backup định kỳ lên S3 bucket cục bộ.
  • AWS S3 & Cross-Region Replication (CRR): S3 bucket ở us-east-1 bật versioning, tự động đồng bộ file WAL và bản backup sang S3 bucket phụ tại us-west-2 kèm S3 Object Lock để chống ghi đè/xóa.
  • DR EKS Cluster (us-west-2): Chạy CloudNativePG ở chế độ Designated Standby Cluster, liên tục kéo các file WAL từ S3 bucket phụ đã được đồng bộ.
  • ArgoCD (GitOps Engine): Quản lý các CRD dạng khai báo trên cả 2 vùng. Khi có sự cố DR, ArgoCD sẽ cập nhật file cấu hình để nâng cấp Standby cluster thành Primary.

2. Cấu Hình IAM & AWS S3 với IRSA

CloudNativePG sử dụng IAM Roles for Service Accounts (IRSA) để ghi và đọc lưu trữ WAL một cách an toàn mà không cần lưu cứng credentials.

Cấu Hình Terraform Cho S3 Bucket & Đồng Bộ Đa Vùng (CRR):

resource 'aws_s3_bucket' 'primary_wal' {
  bucket = 'enterprise-pg-wal-us-east-1'
}

resource 'aws_s3_bucket_versioning' 'primary_ver' {
  bucket = aws_s3_bucket.primary_wal.id
  versioning_configuration {
    status = 'Enabled'
  }
}

resource 'aws_s3_bucket' 'dr_wal' {
  provider = aws.us_west_2
  bucket   = 'enterprise-pg-wal-us-west-2'
}

resource 'aws_s3_bucket_replication_configuration' 'replication' {
  role   = aws_iam_role.replication.arn
  bucket = aws_s3_bucket.primary_wal.id

  rule {
    id     = 's3-wal-crr'
    status = 'Enabled'
    destination {
      bucket        = aws_s3_bucket.dr_wal.arn
      storage_class = 'STANDARD'
    }
  }
}

3. Triển Khai Primary CloudNativePG Manifest

Cluster chính thiết lập việc lưu trữ file WAL liên tục và sao lưu toàn bộ (base backup) định kỳ theo chuẩn Barman Object Store.

apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
  name: postgres-primary
  namespace: database
  annotations:
    eks.amazonaws.com/role-arn: arn:aws:iam::123456789012:role/cnpg-s3-primary-role
spec:
  instances: 3
  imageName: ghcr.io/cloudnative-pg/postgresql:16.1
  storage:
    size: 100Gi
    storageClass: gp3-encrypted
  walStorage:
    size: 50Gi
    storageClass: gp3-encrypted
  backup:
    barmanObjectStore:
      destinationPath: s3://enterprise-pg-wal-us-east-1/pg-cluster
      s3Credentials:
        inheritFromIAMRole: true
      wal:
        compression: gzip
        maxParallel: 4
      data:
        compression: gzip
        jobs: 2
  scheduledBackups:
    - name: daily-full-backup
      schedule: "0 2 * * *"
      backupOwnerReference: self

4. Cấu Hình Standby Cluster Tại Vùng Khôi Phục (DR Region)

Tại region phụ (us-west-2), chúng ta triển khai CloudNativePG cluster chạy ở chế độ replica. Cluster này liên tục nạp các file WAL được đồng bộ qua S3 CRR từ bucket chính.

apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
  name: postgres-dr
  namespace: database
  annotations:
    eks.amazonaws.com/role-arn: arn:aws:iam::123456789012:role/cnpg-s3-dr-role
spec:
  instances: 3
  imageName: ghcr.io/cloudnative-pg/postgresql:16.1
  storage:
    size: 100Gi
    storageClass: gp3-encrypted
  replica:
    enabled: true
    source: primary-s3-source
  bootstrap:
    recovery:
      source: primary-s3-source
  externalClusters:
    - name: primary-s3-source
      barmanObjectStore:
        destinationPath: s3://enterprise-pg-wal-us-west-2/pg-cluster
        s3Credentials:
          inheritFromIAMRole: true
        wal:
          maxParallel: 4

5. Điều Phối Bằng ArgoCD Và Kịch Bản Failover Tự Động

Mọi cấu hình ứng dụng đều được quản lý theo chuẩn GitOps bằng ArgoCD. Ta dùng tham số ghi đè GitOps để chuyển đổi trạng thái khi sự cố xảy ra.

Khai Báo Application Cho DR Cluster Trên ArgoCD:

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: postgres-dr-cluster
  namespace: argocd
spec:
  project: database-infra
  source:
    repoURL: 'https://github.com/enterprise/database-ops.git'
    targetRevision: HEAD
    path: environments/dr-region
  destination:
    server: 'https://eks-us-west-2.amazonaws.com'
    namespace: database
  syncPolicy:
    automated:
      prune: true
      selfHeal: true

Quy Trình Chuyển Vùng Sự Cố (Failover Procedure):

Khi toàn bộ region us-east-1 gặp sự cố sập hoàn toàn, thực hiện kích hoạt chuyển vùng qua GitOps:

  1. Commit thay đổi vào Git repository tại file environments/dr-region/values.yaml, chuyển replica.enabled: false.
  2. ArgoCD tự động đồng bộ (sync) manifest mới xuống EKS cluster tại us-west-2.
  3. CloudNativePG phát hiện chế độ replica đã bị tắt, lập tức nạp hết các file WAL còn lại từ S3 và nâng cấp (promote) Standby cluster thành Read-Write Primary độc lập.
  4. External-DNS cập nhật bản ghi Route53 trỏ traffic của ứng dụng sang endpoint mới ở region us-west-2.

Mẹo chuyên gia: Luôn cấu hình tham số maxParallel cao trong Barman recovery để đẩy nhanh tốc độ nạp WAL khi thực hiện chuyển đổi failover.

6. Đánh Giá Chỉ Số RPO và RTO

Chỉ Số MetrticMục Tiêu Đặt RaThực Tế Đạt ĐượcCơ Chế Tối Ưu Tương Ứng
RPO (Mất dữ liệu)< 5 giây~ 1.2 giâyGhi WAL liên tục & S3 CRR truyền dữ liệu tốc độ cao
RTO (Thời gian gián đoạn)< 5 phút2 phút 15 giâyTự động hóa promotion bằng ArgoCD & Cập nhật Route53 DNS

Lời Kết

Sự kết hợp giữa CloudNativePG, AWS S3 Cross-Region Replication và ArgoCD mang lại giải pháp khôi phục thảm họa cơ sở dữ liệu đa vùng mạnh mẽ, tin cậy và ít tốn công vận hành cho doanh nghiệp. Khai báo hạ tầng dưới dạng mã nguồn (GitOps) giúp các buổi diễn tập DR diễn ra chính xác, giảm thiểu chỉ số RPO/RTO và đáp ứng hoàn hảo các tiêu chuẩn khắt khe của doanh nghiệp.