Skip to content
advanced Phase 8 · AWS Architecture

High Availability & DR

Design fault-tolerant, highly available architectures with multi-AZ deployments.

1h 15m
0 problems
Topic Progress 0%

High Availability Fundamentals

High Availability Fundamentals

High availability (HA) ensures your application remains operational despite component failures.

Key Metrics

Metric Description
Availability % uptime (99.9% = 8.76 hours downtime/year)
MTBF Mean Time Between Failures
MTTR Mean Time To Recovery
RTO Recovery Time Objective
RPO Recovery Point Objective

Availability Targets

SLA Downtime/Year Use Case
99.9% 8.76 hours Internal apps
99.95% 4.38 hours Business apps
99.99% 52.6 minutes Critical systems
99.999% 5.26 minutes Mission critical

HA Architecture

┌─────────────────────────────────────────────────────────────┐
│                Multi-AZ High Availability                    │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  Route 53 ──▶ ALB ──┬──▶ AZ-1a ──▶ EC2 + EBS            │
│                      ├──▶ AZ-1b ──▶ EC2 + EBS            │
│                      └──▶ AZ-1c ──▶ EC2 + EBS            │
│                                                             │
│  RDS Multi-AZ:                                             │
│    Primary (AZ-1a) ──▶ Standby (AZ-1b)                    │
│                                                             │
│  ElastiCache Multi-AZ:                                     │
│    Primary ──▶ Replica 1 ──▶ Replica 2                     │
│                                                             │
│  S3: 11 9's durability (automatic replication)            │
└─────────────────────────────────────────────────────────────┘

Multi-AZ Deployment

Multi-AZ Deployment

EC2 Multi-AZ

# Launch instances across AZs
for i in {1..3}; do
  aws ec2 run-instances \
    --image-id ami-xxx \
    --instance-type t3.micro \
    --subnet-id subnet-az${i} \
    --security-group-ids sg-xxx \
    --tag-specifications "ResourceType=instance,Tags=[{Key=Name,Value=WebServer-${i}}]"
done

# Auto Scaling across AZs
aws autoscaling create-auto-scaling-group \
  --auto-scaling-group-name my-asg \
  --vpc-zone-identifier "subnet-az1,subnet-az2,subnet-az3" \
  --min-size 3 \
  --max-size 10 \
  --desired-capacity 3

RDS Multi-AZ

# Enable Multi-AZ
aws rds modify-db-instance \
  --db-instance-identifier mydb \
  --multi-az \
  --apply-immediately

# Aurora Multi-AZ (6 copies across 3 AZs)
aws rds create-db-cluster \
  --db-cluster-identifier myaurora \
  --engine aurora-mysql \
  --backup-retention-period 7

ElastiCache Multi-AZ

# Redis with automatic failover
aws elasticache create-replication-group \
  --replication-group-id my-redis \
  --multi-az enabled \
  --automatic-failover enabled \
  --num-cache-clusters 3

Auto Scaling and Load Balancing

Auto Scaling and Load Balancing

Auto Scaling Strategies

# Target tracking (recommended)
aws autoscaling put-scaling-policy \
  --auto-scaling-group-name my-asg \
  --policy-name cpu-tracking \
  --policy-type TargetTrackingScaling \
  --target-tracking-configuration '{
    "PredefinedMetricSpecification": {
      "PredefinedMetricType": "ASGAverageCPUUtilization"
    },
    "TargetValue": 70.0
  }'

# Step scaling
aws autoscaling put-scaling-policy \
  --auto-scaling-group-name my-asg \
  --policy-name scale-out \
  --policy-type StepScaling \
  --adjustment-type ChangeInCapacity \
  --step-adjustments '[{
    "MetricIntervalLowerBound": 0,
    "MetricIntervalUpperBound": 20,
    "ScalingAdjustment": 1
  }, {
    "MetricIntervalLowerBound": 20,
    "ScalingAdjustment": 2
  }]' \
  --scaling-adjustment 1

# Scheduled scaling
aws autoscaling put-scheduled-update-group-action \
  --auto-scaling-group-name my-asg \
  --scheduled-action-name scale-up-morning \
  --recurrence '0 8 * * MON-FRI' \
  --min-size 5 \
  --max-size 10

Health Check Configuration

# ALB health checks
aws elbv2 create-target-group \
  --name my-targets \
  --health-check-path /health \
  --health-check-interval-seconds 15 \
  --health-check-timeout-seconds 5 \
  --healthy-threshold-count 3 \
  --unhealthy-threshold-count 3

Failover Strategies

Failover Strategies

Route 53 Failover

# Primary record
aws route53 change-resource-record-sets \
  --hosted-zone-id Z1234567890 \
  --change-batch '{
    "Changes": [{
      "Action": "CREATE",
      "ResourceRecordSet": {
        "Name": "www.example.com",
        "Type": "A",
        "SetIdentifier": "primary",
        "Failover": "PRIMARY",
        "TTL": 60,
        "ResourceRecords": [{"Value": "192.0.2.1"}],
        "HealthCheckId": "xxx"
      }
    }]
  }'

# Secondary record
aws route53 change-resource-record-sets \
  --hosted-zone-id Z1234567890 \
  --change-batch '{
    "Changes": [{
      "Action": "CREATE",
      "ResourceRecordSet": {
        "Name": "www.example.com",
        "Type": "A",
        "SetIdentifier": "secondary",
        "Failover": "SECONDARY",
        "TTL": 60,
        "ResourceRecords": [{"Value": "198.51.100.1"}]
      }
    }]
  }'

Database Failover

RDS Multi-AZ:
  Primary → Automatic failover (< 60 seconds)
  
Aurora:
  Primary → Automatic failover (< 30 seconds)
  
DynamoDB:
  Global Tables → Multi-region, multi-active

Disaster Recovery Strategies

Disaster Recovery Strategies

DR Strategy Comparison

Strategy RTO RPO Cost Complexity
Backup & Restore Hours Hours Low Low
Pilot Light 10s of min Minutes Medium Medium
Warm Standby Minutes Seconds High High
Multi-Site Active Seconds Near-zero Very High Very High

Backup and Restore

# Automated backups
aws rds modify-db-instance --backup-retention-period 7

# S3 cross-region replication
aws s3api put-bucket-replication --bucket source-bucket --replication-configuration '...'

# Glacier for long-term backup
aws s3api put-bucket-lifecycle-configuration --bucket my-bucket --lifecycle-configuration '{...}'

Pilot Light

┌─────────────────────────────────────────────────────────────┐
│                    Pilot Light DR                            │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  Primary Region:                                           │
│    ALB ──▶ EC2 instances ──▶ RDS Primary                   │
│                                                             │
│  DR Region:                                                │
│    (Minimal) ──▶ RDS Read Replica                          │
│    AMI ready ──▶ Scale up when needed                     │
│                                                             │
│  Failover:                                                 │
│    1. Promote RDS replica                                  │
│    2. Launch EC2 from AMI                                  │
│    3. Update Route 53                                      │
└─────────────────────────────────────────────────────────────┘

Warm Standby

# Run minimal capacity in DR region
aws ec2 run-instances --instance-type t3.micro --region eu-west-1

# Keep data in sync
aws rds create-db-instance-read-replica \
  --db-instance-identifier mydb-eu \
  --source-db-instance-identifier arn:aws:rds:us-east-1:xxx:db:mydb

# Scale up on failover
aws autoscaling set-desired-capacity --auto-scaling-group-name my-dr-asg --desired-capacity 10