Шаблоны Multi-AZ для сервисов с состоянием
Применяйте Multi-AZ к RDS, ElastiCache, EFS и ELB, чтобы устранить единичные точки отказа внутри региона.
«Шаблоны Multi-AZ для сервисов с состоянием» — бесплатный урок Cloud & IT Cert Prep на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Cloud & IT Cert Prep, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Cloud & IT Cert Prep содержит 4 уроков всего.
Зачем сервисам с состоянием нужен Multi-AZ
Сервисы с состоянием — базы данных, кэши и файловые системы — сложнее всего сделать высокодоступными, поскольку они хранят данные, которые должны пережить сбои. Если база данных в одной AZ выходит из строя, всё приложение теряет хранилище данных. Ответ AWS — это развёртывания Multi-AZ, в которых сервис поддерживает синхронную или почти синхронную реплику во второй зоне доступности, способную быстро принять нагрузку при отказе основной.
RDS Multi-AZ: синхронная резервная реплика
RDS Multi-AZ поддерживает синхронную резервную реплику в другой AZ. Каждая запись в основной экземпляр синхронно реплицируется до подтверждения успешного выполнения — это означает отсутствие потери данных (RPO=0), но немного увеличивает задержку записи. При отказе основного экземпляра RDS автоматически обновляет конечную точку DNS, чтобы направить её на резервный экземпляр, в течение 60–120 секунд. Приложению достаточно повторно подключиться к той же конечной точке — изменения кода не требуются.
# Enable Multi-AZ on existing RDS instance
aws rds modify-db-instance \
--db-instance-identifier mydb \
--multi-az \
--apply-immediately
# RDS endpoint stays the same after failover
# Application reconnects to same DNS nameАрхитектура Aurora Multi-AZ
Amazon Aurora развивает Multi-AZ благодаря общему распределённому уровню хранения, который автоматически реплицирует данные в шесть копий в трёх AZ. Экземпляры Aurora не хранят состояние — они выполняют чтение и запись в это общее хранилище. Когда основной экземпляр Aurora, выполняющий записи, выходит из строя, реплика для чтения в другой AZ повышается до роли экземпляра для записи менее чем за 30 секунд. Это быстрее, чем переключение RDS Multi-AZ при отказе, а данные всегда согласованы между AZ без явной репликации на резервный экземпляр.
# Aurora cluster endpoint automatically handles failover
# Writer endpoint: mydb.cluster-xxx.us-east-1.rds.amazonaws.com
# Reader endpoint: mydb.cluster-ro-xxx.us-east-1.rds.amazonaws.com
# Failover time: typically under 30 secondsРепликация ElastiCache Multi-AZ
ElastiCache for Redis поддерживает Multi-AZ с помощью групп репликации. Основной узел принимает записи и асинхронно реплицирует их на реплики для чтения в других AZ. Когда основной узел выходит из строя, ElastiCache автоматически повышает одну из реплик до роли основного узла. В режиме кластера Redis с включённым режимом кластера данные распределяются между несколькими группами узлов, в каждой из которых есть собственный основной узел и реплики в разных AZ. Это обеспечивает одновременно высокую доступность и горизонтальное масштабирование.
# Create Redis replication group with Multi-AZ
aws elasticache create-replication-group \
--replication-group-id my-redis \
--replication-group-description 'Multi-AZ Redis' \
--num-cache-clusters 3 \
--cache-node-type cache.r6g.large \
--multi-az-enabled \
--automatic-failover-enabledEFS: встроенная поддержка Multi-AZ
Amazon Elastic File System (EFS) изначально поддерживает Multi-AZ: это региональная служба, которая избыточно хранит данные в нескольких AZ одного региона. Вы создаёте точки монтирования в подсети каждой AZ, а экземпляры EC2 в любой AZ могут подключать файловую систему через локальную точку монтирования. Ручная настройка Multi-AZ не требуется. EFS предоставляет общее файловое хранилище POSIX, к которому несколько экземпляров в разных AZ получают одновременный доступ.
# Mount EFS from EC2 in any AZ
# Mount target is created per AZ automatically
sudo mount -t efs -o tls fs-12345678:/ /mnt/efs
# Or use EFS mount helper
sudo mount -t efs fs-12345678 /mnt/efsБалансировка Elastic Load Balancer между зонами
Elastic Load Balancers сами поддерживают Multi-AZ: ALB и NLB разворачивают узлы балансировщика в каждой указанной вами AZ. При включённой балансировке нагрузки между зонами (по умолчанию для ALB) каждый узел балансировщика равномерно распределяет трафик между всеми зарегистрированными целями во всех AZ, а не только в своей AZ. Благодаря этому, даже если все экземпляры в одной AZ выйдут из строя, балансировщик продолжит обслуживать трафик через экземпляры в остальных AZ.
# ALB automatically created in multiple AZs
aws elbv2 create-load-balancer \
--name my-alb \
--subnets subnet-AZ1 subnet-AZ2 subnet-AZ3 \
--security-groups sg-12345
# Cross-zone load balancing is ON by default for ALBШаблон NAT Gateway Multi-AZ
Распространённая ошибка — развернуть один NAT Gateway в одной AZ, тогда как частные подсети в других AZ направляют трафик через него. Если эта AZ выйдет из строя, все частные экземпляры потеряют доступ к интернету. Правильный шаблон Multi-AZ — развернуть по одному NAT Gateway в каждой AZ и настроить таблицу частной маршрутизации каждой AZ так, чтобы маршрут 0.0.0.0/0 проходил через собственный NAT Gateway этой AZ. Это устраняет NAT Gateway как единую точку отказа между AZ и снижает расходы на передачу данных между AZ.
# Create NAT Gateway in each AZ
aws ec2 create-nat-gateway \
--subnet-id subnet-public-AZ1 \
--allocation-id eipalloc-AZ1
aws ec2 create-nat-gateway \
--subnet-id subnet-public-AZ2 \
--allocation-id eipalloc-AZ2
# Each AZ's private route table points to its own NAT GWDynamoDB: Multi-AZ по умолчанию
DynamoDB — это полностью управляемая служба, которая автоматически реплицирует данные в трёх AZ одного региона, поэтому настраивать Multi-AZ вручную не требуется. Перед возвратом успешного результата каждая запись надёжно сохраняется во всех трёх AZ. DynamoDB фактически обеспечивает отказоустойчивость на уровне AZ сразу после создания. Поэтому DynamoDB часто рекомендуют выбирать в качестве базы данных, когда в экзаменационном вопросе подчёркивается высокая доступность при минимальных эксплуатационных затратах.
RDS Proxy для более быстрой обработки подключений
Во время переключения RDS Multi-AZ приложения, поддерживающие постоянные подключения к базе данных, могут столкнуться со сбоями при изменении конечной точки. RDS Proxy располагается между приложением и RDS и поддерживает пул подключений к базе данных. Во время переключения RDS Proxy автоматически перенаправляет подключения к новому основному экземпляру, сокращая влияние переключения с 60–120 секунд до менее 30 секунд для приложений, использующих конечную точку прокси. RDS Proxy также помогает при работе с функциями Lambda, которые создают множество краткоживущих подключений.
# Application connects to RDS Proxy endpoint
# Proxy endpoint: myproxy.proxy-xxx.us-east-1.rds.amazonaws.com
# RDS Proxy handles:
# - Connection pooling
# - Failover routing
# - IAM authentication
# - Secrets Manager integrationРежимы репликации данных: синхронный и асинхронный
Понимание режимов репликации крайне важно при выборе шаблонов Multi-AZ. Синхронная репликация (RDS Multi-AZ, EFS) обеспечивает RPO=0, поскольку каждая запись подтверждается в обеих AZ до возврата успешного результата. Компромисс заключается в немного большей задержке записи. Асинхронная репликация (реплики ElastiCache Redis, реплики RDS для чтения) обеспечивает меньшую задержку записи, но допускает небольшое отставание репликации — это означает, что часть данных может быть потеряна, если основной экземпляр выйдет из строя до завершения репликации.
# Synchronous replication: RPO = 0, higher write latency
# Used by: RDS Multi-AZ, Aurora storage layer
# Asynchronous replication: RPO > 0 (replication lag)
# Used by: RDS Read Replicas, ElastiCache Redis replicas
# Replication lag can be monitored:
# aws cloudwatch get-metric-statistics \
# --namespace AWS/RDS --metric-name ReplicaLagТестирование переключения Multi-AZ
Следует регулярно тестировать переключение Multi-AZ, чтобы проверять обоснованность предположений о RTO. Для RDS можно запустить переключение с помощью параметра консоли Перезагрузка с переключением или CLI. Отслеживайте в CloudWatch метрику FailedSQLServerAgentJobsCount и журналы приложения, чтобы убедиться, что оно успешно переподключается. Документируйте фактическую продолжительность переключения: она может отличаться от указанной в документации AWS в зависимости от класса экземпляра и рабочей нагрузки.
# Trigger RDS Multi-AZ failover test
aws rds reboot-db-instance \
--db-instance-identifier mydb \
--force-failover
# Monitor failover in CloudWatch
aws cloudwatch get-metric-statistics \
--namespace AWS/RDS \
--metric-name DatabaseConnections \
--dimensions Name=DBInstanceIdentifier,Value=mydbБыстрая проверка
Проверьте своё понимание концепций AWS Solutions Architect (SAA-C03), рассмотренных в этом уроке.
Итоги урока
В этом уроке вы узнали, что RDS Multi-AZ использует синхронную репликацию с автоматическим переключением DNS, Aurora использует общий уровень хранения в трёх AZ для более быстрого переключения, а EFS и DynamoDB изначально поддерживают Multi-AZ без ручной настройки. Разворачивайте по одному NAT Gateway в каждой AZ, чтобы избежать единых точек отказа между AZ. Далее мы рассмотрим шаблоны active-active и active-passive в нескольких регионах.
Часто задаваемые вопросы
Урок «Шаблоны Multi-AZ для сервисов с состоянием» бесплатный?
Да — полный текст урока «Шаблоны Multi-AZ для сервисов с состоянием» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Cloud & IT Cert Prep, подпишись на CoddyKit PRO. Курс Cloud & IT Cert Prep содержит 4 уроков всего.
Чему я научусь в уроке «Шаблоны Multi-AZ для сервисов с состоянием»?
Применяйте Multi-AZ к RDS, ElastiCache, EFS и ELB, чтобы устранить единичные точки отказа внутри региона. Ты практикуешь Cloud & IT Cert Prep с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Cloud & IT Cert Prep?
Предыдущий опыт не требуется. Cloud & IT Cert Prep на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Шаблоны Multi-AZ для сервисов с состоянием»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Cloud & IT Cert Prep?
Да. Каждый урок Cloud & IT Cert Prep включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- HA и отказоустойчивость: определения и компромиссы
- Шаблоны Multi-AZ для сервисов с состоянием
- Активный и пассивный режимы в нескольких регионах
- Проверки состояния, автоматические выключатели и логика повторных попыток