Tự Động Hóa Khôi Phục Thảm Họa PostgreSQL Đa Vùng với CloudNativePG, AWS S3 và ArgoCD
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-1bật versioning, tự động đồng bộ file WAL và bản backup sang S3 bucket phụ tạius-west-2kè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: self4. 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: 45. Đ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: trueQuy 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:
- Commit thay đổi vào Git repository tại file
environments/dr-region/values.yaml, chuyểnreplica.enabled: false. - ArgoCD tự động đồng bộ (sync) manifest mới xuống EKS cluster tại
us-west-2. - 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.
- 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ố
maxParallelcao 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ố Metrtic | Mục Tiêu Đặt Ra | Thực Tế Đạt Được | Cơ Chế Tối Ưu Tương Ứng |
|---|---|---|---|
| RPO (Mất dữ liệu) | < 5 giây | ~ 1.2 giây | Ghi 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út | 2 phút 15 giây | Tự độ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.
