Grupos de replicación y modo de clúster de ElastiCache Redis
Cree un grupo de replicación de Redis para escalar las lecturas y habilite el modo de clúster para fragmentar los datos entre varios grupos de nodos
Grupos de replicación y modo de clúster de ElastiCache Redis es una lección gratuita de AWS Solutions Architect en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de AWS Solutions Architect, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de AWS Solutions Architect incluye 4 lecciones en total.
Descripción general de los grupos de replicación de Redis
Un grupo de replicación de ElastiCache es una agrupación lógica formada por un nodo principal de Redis y hasta 5 réplicas de lectura. El nodo principal gestiona todas las operaciones de escritura; las réplicas reciben replicación asíncrona del principal y atienden el tráfico de lectura. Los grupos de replicación permiten dos capacidades clave: escalado de lectura (distribuir las solicitudes de lectura entre varias réplicas) y alta disponibilidad con conmutación por error automática (promover una réplica a principal si el principal falla). Todos los nodos de un grupo de replicación comparten el mismo conjunto de datos.
# Create a replication group with 1 primary and 2 read replicas
aws elasticache create-replication-group \
--replication-group-id web-cache \
--replication-group-description 'Web application cache' \
--num-cache-clusters 3 \
--cache-node-type cache.r7g.large \
--engine redis \
--engine-version '7.0' \
--automatic-failover-enabled \
--multi-az-enabled \
--cache-subnet-group-name my-multi-az-subnet-groupEndpoint principal frente a endpoint de lectura
ElastiCache proporciona dos endpoints DNS para un grupo de replicación: el endpoint principal siempre apunta al nodo principal actual (se actualiza automáticamente durante la conmutación por error); utilícelo para todas las operaciones de escritura. El endpoint de lectura distribuye las solicitudes de lectura mediante balanceo de carga entre todas las réplicas disponibles; utilícelo para las operaciones de lectura para distribuir la carga. Su aplicación debe mantener dos grupos de conexiones: uno para el endpoint principal destinado a las escrituras y otro para el endpoint de lectura destinado a las lecturas. Este es el patrón de conexión recomendado para los grupos de replicación de ElastiCache Redis.
# Get primary and reader endpoints
aws elasticache describe-replication-groups \
--replication-group-id web-cache \
--query 'ReplicationGroups[].{
Primary:NodeGroups[].PrimaryEndpoint.Address,
Reader:ReaderEndpoint.Address
}'
# Application connection pattern:
# write_client = redis.Redis(host='primary-endpoint', port=6379)
# read_client = redis.Redis(host='reader-endpoint', port=6379)Proceso de conmutación por error automática
Cuando el nodo principal falla (ElastiCache lo detecta en cuestión de segundos mediante comprobaciones de estado), la conmutación por error automática selecciona una de las réplicas de lectura para promoverla a principal. El proceso de promoción es el siguiente: (1) la réplica seleccionada se promueve a principal, (2) el registro DNS del endpoint principal se actualiza para apuntar al nuevo principal (TTL de aproximadamente 1 segundo) y (3) el antiguo principal se sustituye por una réplica nueva. El tiempo total de conmutación por error suele ser de 30 a 60 segundos. Las aplicaciones que utilizan el DNS del endpoint principal se vuelven a conectar automáticamente una vez que se propagan los cambios de DNS; no se necesitan direcciones IP codificadas.
# Test failover manually (triggers primary failover)
aws elasticache test-failover \
--replication-group-id web-cache \
--node-group-id 0001
# Monitor failover events
aws elasticache describe-events \
--source-identifier web-cache \
--source-type replication-group \
--duration 60 \
--query 'Events[].{Time:Date,Message:Message}'Ubicación de réplicas en varias AZ
Para obtener la máxima resiliencia, distribuya las réplicas entre varias zonas de disponibilidad. Al habilitar Multi-AZ en un grupo de replicación, ElastiCache coloca automáticamente el principal y las réplicas en distintas AZ. Si una AZ completa deja de estar disponible, la conmutación por error promueve una réplica de una AZ operativa. También puede especificar explícitamente las AZ preferidas para cada nodo al crear el grupo de replicación mediante la opción --preferred-cache-cluster-a-zs.
# Create replication group with explicit AZ placement
aws elasticache create-replication-group \
--replication-group-id ha-redis \
--replication-group-description 'Multi-AZ Redis' \
--num-cache-clusters 3 \
--cache-node-type cache.r7g.xlarge \
--engine redis \
--automatic-failover-enabled \
--multi-az-enabled \
--preferred-cache-cluster-a-zs us-east-1a us-east-1b us-east-1c \
--cache-subnet-group-name multi-az-subnets¿Qué es Redis Cluster Mode?
Redis Cluster Mode Enabled (CME) particiona el conjunto de datos entre varios grupos de nodos (shards), cada uno con un nodo principal y hasta 5 réplicas. Esta es la solución de sharding horizontal de Redis. Cluster Mode permite superar la memoria de un solo nodo: puede tener hasta 500 grupos de nodos de 500 GB cada uno, lo que permite que un único clúster de Redis almacene hasta 500 × 500 GB = 250 TB de datos. Cluster Mode también multiplica el rendimiento de escritura, ya que cada grupo de nodos procesa de forma independiente las escrituras correspondientes a su intervalo de claves.
# Create a Redis Cluster Mode Enabled replication group
# with 3 shards, each with 1 primary and 2 replicas
aws elasticache create-replication-group \
--replication-group-id clustered-redis \
--replication-group-description 'Cluster mode: 3 shards x 3 nodes' \
--num-node-groups 3 \
--replicas-per-node-group 2 \
--cache-node-type cache.r7g.large \
--engine redis \
--automatic-failover-enabled \
--multi-az-enabled \
--cache-subnet-group-name multi-az-subnetsSlots de hash y distribución de claves
Redis Cluster Mode divide el espacio de claves en 16,384 slots de hash. Cada grupo de nodos posee un intervalo contiguo de slots de hash. Cuando se escribe una clave, Redis calcula CRC16(key) % 16384 para determinar el slot de hash y, por tanto, el grupo de nodos responsable. Su aplicación debe utilizar un cliente de Redis compatible con clústeres (como redis-py-cluster o Jedis en modo de clúster) que conozca el mapa de slots y dirija cada comando al nodo correcto. Los clientes estándar devolverán errores de redirección MOVED si envían una clave al shard equivocado.
# Python cluster-aware client example
# pip install redis[hiredis]
# from redis.cluster import RedisCluster
# cluster_client = RedisCluster(
# host='clustered-redis.abc123.clustercfg.use1.cache.amazonaws.com',
# port=6379,
# decode_responses=True
# )
# The client automatically resolves slot-to-node mapping
# cluster_client.set('user:1', 'Alice') # routes to correct shard
# cluster_client.get('user:1') # routes to correct shardModo de clúster frente a modo sin clúster
Para el examen SAA-C03, elija el modo sin clúster cuando: sus datos quepan en un solo nodo (< ~400 GB después de reservar margen), necesite una configuración sencilla de principal y réplicas, o su aplicación utilice operaciones complejas con varias claves (las transacciones que abarcan varias claves requieren que todas estén en el mismo slot). Elija el modo de clúster cuando: el conjunto de datos supere la memoria de un solo nodo, necesite escalar horizontalmente el rendimiento de escritura o prevea un crecimiento futuro que requiera volver a fragmentar en línea. El modo de clúster admite añadir shards sin tiempo de inactividad (resharding en línea).
# Scale out a cluster-mode Redis by adding shards
aws elasticache modify-replication-group-shard-configuration \
--replication-group-id clustered-redis \
--node-group-count 5 \
--apply-immediately \
--resharding-configuration \
NodeGroupId=0004,PreferredAvailabilityZones=us-east-1a,us-east-1b,us-east-1c \
NodeGroupId=0005,PreferredAvailabilityZones=us-east-1a,us-east-1b,us-east-1c
# No downtime — slots are migrated incrementallyAlmacén de datos global para la replicación entre regiones
ElastiCache Global Datastore amplía la replicación de Redis a varias regiones de AWS. Debe designar una región como clúster principal y añadir clústeres secundarios en otras regiones. Las escrituras se envían al principal; los secundarios reciben replicación asíncrona, cuyo retraso habitual es inferior a 1 segundo. Los clústeres secundarios pueden atender lecturas locales con una latencia muy baja. Global Datastore permite crear aplicaciones globales en las que los usuarios de distintos continentes leen desde la región más cercana, así como implementar DR entre regiones, ya que puede promover un clúster secundario a principal si la región principal falla.
# Create a Global Datastore (adds a secondary region to an existing cluster)
aws elasticache create-global-replication-group \
--global-replication-group-id-suffix my-global-cache \
--primary-replication-group-id prod-redis
# Add a secondary cluster in another region
aws elasticache create-replication-group \
--replication-group-id prod-redis-eu \
--replication-group-description 'EU secondary' \
--global-replication-group-id ldgnf-my-global-cache \
--region eu-west-1Pub/Sub de Redis a gran escala
En un grupo de replicación de Redis sin clúster, los mensajes de pub/sub se distribuyen a todas las réplicas: cualquier suscriptor de cualquier nodo recibe los mensajes publicados en un canal. Sin embargo, en Cluster Mode, pub/sub se limita a las notificaciones del espacio de claves, y pub/sub basado en canales solo funciona dentro de un único fragmento, a menos que utilice Redis 7+ con fragmentación de Pub/Sub (SSUBSCRIBE / SPUBLISH para pub/sub compatible con fragmentos). Esta es una limitación importante que debe tener en cuenta al diseñar pub/sub a gran escala con el modo de clúster.
# Keyspace notification (fires when a key expires)
# Enable in parameter group: notify-keyspace-events Ex
# Subscriber in Python:
# pubsub = redis_client.pubsub()
# pubsub.psubscribe('__keyevent@0__:expired')
# for message in pubsub.listen():
# if message['type'] == 'pmessage':
# expired_key = message['data']
# print(f'Key expired: {expired_key}')Supervisión del retraso de replicación
Supervise la métrica de CloudWatch ReplicationLag en las réplicas de lectura para asegurarse de que mantienen el ritmo del nodo principal. Un retraso superior a unos segundos indica un cuello de botella en la réplica (un nodo sobrecargado, problemas de red o demasiadas escrituras para que la réplica pueda procesarlas). En escenarios de Global Datastore, supervise GlobalDatastoreReplicationLag. Un retraso de replicación elevado significa que las réplicas de lectura pueden devolver datos obsoletos, algo importante para las aplicaciones que esperan coherencia eventual dentro de límites estrictos.
# Monitor replication lag for all replicas
aws cloudwatch get-metric-statistics \
--namespace AWS/ElastiCache \
--metric-name ReplicationLag \
--dimensions Name=ReplicationGroupId,Value=web-cache \
--statistic Maximum \
--period 60 \
--start-time $(date -u -d '1 hour ago' +%Y-%m-%dT%H:%M:%SZ) \
--end-time $(date -u +%Y-%m-%dT%H:%M:%SZ)
# Alert if ReplicationLag > 10 secondsEscalado de grupos de replicación
Puede escalar verticalmente (cambiar el tipo de nodo) o escalar horizontalmente (añadir o quitar réplicas). Cambiar el tipo de nodo requiere una llamada a modify-replication-group y provoca una conmutación por error breve si se aplica inmediatamente: el nodo principal se sustituye por un nodo nuevo del tipo seleccionado. Añadir réplicas se realiza en línea y sin tiempo de inactividad. Al pasar del modo sin clúster al modo de clúster, debe crear un grupo nuevo en modo de clúster y migrar los datos; no existe conversión directa entre los modos de clúster y sin clúster.
# Scale up node type with maintenance window
aws elasticache modify-replication-group \
--replication-group-id web-cache \
--cache-node-type cache.r7g.xlarge \
--apply-immediately false
# Add a read replica
aws elasticache increase-replica-count \
--replication-group-id web-cache \
--new-replica-count 4 \
--apply-immediatelyComprobación rápida
Ponga a prueba su comprensión de los conceptos de AWS Solutions Architect (SAA-C03) de esta lección.
Resumen de la lección
En esta lección ha aprendido que los grupos de replicación permiten escalar las lecturas mediante réplicas y ofrecen alta disponibilidad mediante la conmutación por error automática, con endpoints principal y de lectura; Cluster Mode distribuye los datos entre hasta 500 grupos de nodos mediante 16.384 ranuras hash para escalar horizontalmente más allá de la memoria de un solo nodo; y Global Datastore replica los datos entre regiones para ofrecer lecturas globales con baja latencia y DR entre regiones. A continuación, exploraremos estrategias de almacenamiento en caché: carga diferida y escritura simultánea.
Preguntas frecuentes
¿La lección «Grupos de replicación y modo de clúster de ElastiCache Redis» es gratis?
Sí — el texto completo de «Grupos de replicación y modo de clúster de ElastiCache Redis» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de AWS Solutions Architect, actualiza a CoddyKit PRO. El curso de AWS Solutions Architect incluye 4 lecciones en total.
¿Qué aprenderé en «Grupos de replicación y modo de clúster de ElastiCache Redis»?
Cree un grupo de replicación de Redis para escalar las lecturas y habilite el modo de clúster para fragmentar los datos entre varios grupos de nodos Practicas AWS Solutions Architect con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar AWS Solutions Architect?
No se requiere experiencia previa. AWS Solutions Architect en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.
¿Cuánto tiempo toma la lección «Grupos de replicación y modo de clúster de ElastiCache Redis»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de AWS Solutions Architect?
Sí. Cada lección de AWS Solutions Architect incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Redis frente a Memcached: elección del motor adecuado
- Grupos de replicación y modo de clúster de ElastiCache Redis
- Estrategias de almacenamiento en caché: carga diferida y escritura simultánea
- Almacenamiento de sesiones y patrones de tablas de clasificación