resource "aws_s3_bucket" "dr_bucket" {
bucket = "my-dr-bucket"
versioning {
enabled = true
}
replication_configuration {
role = aws_iam_role.replication.arn
rules {
id = "dr-replication"
status = "Enabled"
destination {
bucket = aws_s3_bucket.destination.arn
storage_class = "STANDARD"
}
}
}
}
resource "azurerm_storage_account" "dr_storage" {
name = "drstorage"
resource_group_name = azurerm_resource_group.dr.name
location = var.dr_location
account_tier = "Standard"
account_replication_type = "GRS"
geo_redundant_backup_enabled = true
}
apiVersion: apps/v1
kind: Deployment
metadata:
name: dr-controller
spec:
replicas: 1
selector:
matchLabels:
app: dr-controller
template:
spec:
containers:
- name: controller
image: dr-controller:latest
env:
- name: PRIMARY_CLUSTER
value: "us-west-2"
- name: DR_CLUSTER
value: "eu-west-1"
- name: HEALTH_CHECK_INTERVAL
value: "30"
- name: FAILOVER_THRESHOLD
value: "3"
apiVersion: monitoring.googleapis.com/v1
kind: UptimeCheckConfig
metadata:
name: dr-health-check
spec:
displayName: "DR Health Check"
period: "60s"
timeout: "10s"
httpCheck:
path: "/health"
port: 443
monitoredResource:
type: "uptime_url"
labels:
host: "primary-endpoint.example.com"
alertPolicy:
name: "projects/my-project/alertPolicies/dr-failover"
apiVersion: postgresql.acid.zalan.do/v1
kind: PostgresqlCluster
metadata:
name: postgres-dr
spec:
numberOfInstances: 3
patroni:
synchronous_mode: true
synchronous_node_count: 2
postgresql:
version: "15"
parameters:
synchronous_commit: "on"
max_wal_senders: "10"
wal_keep_segments: "64"
volumes:
data:
size: 100Gi
storageClass: "premium-rwo"
standby:
enabled: true
s3:
bucket: "postgres-wal"
region: "eu-west-1"