Ответ
В AWS разница между Single-AZ и Multi-AZ развертыванием базы данных (например, RDS или Aurora) заключается в архитектуре отказоустойчивости и последствиях при сбое зоны доступности (Availability Zone — AZ).
Single-AZ:
- Архитектура: База данных работает на основном инстансе в одной AZ. Резервные копии (snapshots) могут храниться в S3, но standby-инстанса в другой AZ нет.
- Влияние сбоя AZ: При отказе всей AZ база данных становится недоступной до тех пор, пока AWS не восстановит инфраструктуру в этой AZ или пока вы вручную не восстановите из снапшота в другой AZ. Это ведёт к простою (downtime).
- Стоимость: Дешевле, так как используется только один инстанс БД.
- Использование: Для сред разработки, тестирования или некритичных рабочих нагрузок, где допустим простой.
Multi-AZ:
- Архитектура: AWS автоматически создаёт и поддерживает синхронную standby-реплику в другой AZ. Данные реплицируются синхронно, обеспечивая целостность.
- Влияние сбоя AZ: При сбое основной AZ AWS автоматически выполняет failover: DNS-запись инстанса перенаправляется на standby-реплику, которая становится новой основной. Этот процесс обычно занимает 1-2 минуты. Приложение, переподключившись, продолжит работу с минимальным простоем.
- Стоимость: Дороже (примерно в 2 раза за инстанс БД), так как вы платите за standby-реплику.
- Использование: Для рабочих (production) нагрузок, где требуется высокая доступность и минимальный RTO (Recovery Time Objective).
Пример создания через AWS CLI и Terraform:
# AWS CLI: Создание RDS PostgreSQL в Multi-AZ
aws rds create-db-instance
--db-instance-identifier my-prod-db
--engine postgres
--db-instance-class db.t3.micro
--master-username admin
--master-user-password secret99
--allocated-storage 20
--multi-az # Ключевой параметр для Multi-AZ
# Terraform (aws_db_instance) для Multi-AZ
resource "aws_db_instance" "prod" {
identifier = "my-prod-db"
engine = "postgres"
instance_class = "db.t3.micro"
allocated_storage = 20
username = "admin"
password = var.db_password
multi_az = true # Включаем Multi-AZ
backup_retention_period = 7
skip_final_snapshot = true
}
Важно: Multi-AZ — это решение для отказоустойчивости (High Availability), а не для масштабирования чтения. Для разгрузки запросов на чтение нужно использовать Read Replicas, которые могут быть развернуты в других AZ или регионах.