AWS Solutions Architect · Lektion

ElastiCache Redis-replikeringsgrupper och klusterläge

Bygg en Redis-replikeringsgrupp för lässkalning och aktivera klusterläge för att dela upp data över flera nodgrupper.

Lektion 2 av 413 steg

ElastiCache Redis-replikeringsgrupper och klusterläge är en gratis lektion i AWS Solutions Architect på CoddyKit. Detta är lektion 2 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för AWS Solutions Architect, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i AWS Solutions Architect innehåller totalt 4 lektioner.

Översikt över Redis-replikeringsgrupper

En ElastiCache-replikeringsgrupp är en logisk gruppering med en primär Redis-nod och upp till 5 läsrepliker. Den primära noden hanterar alla skrivåtgärder; replikerna tar emot asynkron replikering från den primära noden och hanterar lästrafik. Replikeringsgrupper möjliggör två viktiga funktioner: läseskalning (fördela läsbegäranden över flera repliker) och hög tillgänglighet med automatisk redundansväxling (befordra en replik till primär nod om den primära noden slutar fungera). Alla noder i en replikeringsgrupp delar samma datamängd.

# 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-group

Primär slutpunkt jämfört med lässlutpunkt

ElastiCache tillhandahåller två DNS-slutpunkter för en replikeringsgrupp: den primära slutpunkten pekar alltid på den aktuella primära noden (uppdateras automatiskt under redundansväxling) — använd den för alla skrivåtgärder. Lässlutpunkten lastbalanserar läsbegäranden över alla tillgängliga repliker — använd den för läsåtgärder för att fördela belastningen. Applikationen bör ha två anslutningspooler: en för den primära slutpunkten för skrivningar och en för lässlutpunkten för läsningar. Detta är det rekommenderade anslutningsmönstret för ElastiCache Redis-replikeringsgrupper.

# 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)

Processen för automatisk redundansväxling

När den primära noden slutar fungera (vilket ElastiCache upptäcker inom några sekunder via hälsokontroller) väljer automatisk redundansväxling en av läsreplikerna och befordrar den till primär nod. Befordringsprocessen ser ut så här: (1) den valda repliken befordras till primär nod, (2) DNS-posten för den primära slutpunkten uppdateras så att den pekar på den nya primära noden (TTL ~1 sekund), (3) den gamla primära noden ersätts med en ny replik. Den totala tiden för redundansväxlingen är vanligtvis 30–60 sekunder. Applikationer som använder DNS-namnet för den primära slutpunkten återansluter automatiskt när DNS-ändringen har spridits — hårdkodade IP-adresser behövs inte.

# 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}'

Placering av Multi-AZ-repliker

För maximal motståndskraft bör ni fördela repliker över flera Availability Zones. När ni aktiverar Multi-AZ för en replikeringsgrupp placerar ElastiCache automatiskt den primära noden och replikerna i olika AZ:er. Om en hel AZ blir otillgänglig befordrar redundansväxlingen en replik från en AZ som fortfarande fungerar. Ni kan även uttryckligen ange önskade AZ:er för varje nod när ni skapar replikeringsgruppen med alternativet --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

Vad är Redis Cluster Mode

Redis Cluster Mode Enabled (CME) partitionerar datamängden över flera nodgrupper (shards), där varje grupp innehåller en primär nod och upp till 5 repliker. Detta är Redis lösning för horisontell sharding. Cluster Mode gör det möjligt att överskrida minneskapaciteten hos en enda nod — ni kan ha upp till 500 nodgrupper med 500 GB vardera, vilket innebär att ett enda Redis-kluster kan innehålla upp till 500 × 500 GB = 250 TB data. Cluster Mode mångdubblar dessutom skrivgenomströmningen eftersom varje nodgrupp självständigt bearbetar skrivningar för sitt nyckelintervall.

# 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-subnets

Hashplatser och nyckelfördelning

Redis Cluster Mode delar upp nyckelutrymmet i 16 384 hashplatser. Varje nodgrupp äger ett sammanhängande intervall av hashplatser. När en nyckel skrivs beräknar Redis CRC16(key) % 16384 för att avgöra hashplatsen och därmed den ansvariga nodgruppen. Applikationen måste använda en klustermedveten Redis-klient (till exempel redis-py-cluster eller Jedis i klusterläge) som känner till platskartan och dirigerar varje kommando till rätt nod. Standardklienter returnerar MOVED-omdirigeringsfel om de skickar en nyckel till fel shard.

# 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 shard

Klusterläge jämfört med icke-klusterläge

För SAA-C03-provet väljer ni icke-klusterläge när: era data ryms på en enda nod (< ~400 GB efter marginal), ni behöver en enkel primär-/replikauppsättning eller applikationen använder komplexa åtgärder med flera nycklar (transaktioner som omfattar flera nycklar kräver att alla nycklar finns på samma plats). Välj klusterläge när: datamängden överskrider minnet på en enda nod, ni behöver horisontell skalning av skrivgenomströmningen eller förväntar er framtida tillväxt som kommer att kräva omsharding online. Klusterläge stöder tillägg av shards utan driftstopp (online-omsharding).

# 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 incrementally

Global Datastore för replikering mellan regioner

ElastiCache Global Datastore utökar Redis-replikering till flera AWS-regioner. Ni utser en region till primärt kluster och lägger till sekundära kluster i andra regioner. Skrivningar går till det primära klustret, medan sekundära kluster tar emot asynkron replikering med en typisk fördröjning på under en sekund. Sekundära kluster kan hantera lokala läsningar med mycket låg latens. Global Datastore möjliggör globala applikationer där användare på olika kontinenter läser från närmaste region, samt DR mellan regioner där Ni kan befordra ett sekundärt kluster till primärt om den primära regionen slutar fungera.

# 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-1

Redis Pub/Sub i stor skala

I en Redis-replikeringsgrupp utan klustring distribueras pub/sub-meddelanden till alla repliker — alla prenumeranter på alla noder tar emot meddelanden som publiceras till en kanal. I Cluster Mode är pub/sub däremot begränsat till keyspace-notifieringar, och kanalbaserad pub/sub fungerar endast inom en enskild shard, såvida Ni inte använder Redis 7+ med Pub/Sub-sharding (SSUBSCRIBE / SPUBLISH för shard-medveten pub/sub). Detta är en viktig begränsning när Ni utformar pub/sub i stor skala med klusterläge.

# 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}')

Övervaka replikeringens fördröjning

Övervaka CloudWatch-måttet ReplicationLag på läsrepliker för att säkerställa att de hinner med det primära klustret. En fördröjning på mer än några sekunder tyder på en flaskhals på repliken, till exempel en överbelastad nod, nätverksproblem eller fler skrivningar än repliken hinner behandla. I scenarier med Global Datastore övervakar Ni GlobalDatastoreReplicationLag. Hög replikeringsfördröjning innebär att läsrepliker kan returnera inaktuella data — något som är viktigt för applikationer som förväntar sig eventual consistency inom snäva gränser.

# 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 seconds

Skala replikeringsgrupper

Ni kan skala vertikalt (ändra nodtyp) eller skala horisontellt (lägga till eller ta bort repliker). Om Ni ändrar nodtypen krävs ett anrop till modify-replication-group, och det medför en kort failover om ändringen tillämpas omedelbart — den primära noden ersätts med en ny nod av den nya typen. Att lägga till repliker kan göras online utan driftstopp. När Ni skalar från läge utan klustring till klusterläge måste Ni skapa en ny grupp i klusterläge och migrera — det finns ingen konvertering på plats mellan klusterläge och läge utan klustring.

# 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-immediately

Snabbkontroll

Testa Er förståelse av AWS Solutions Architect-koncepten (SAA-C03) från den här lektionen.

Sammanfattning av lektionen

I den här lektionen har Ni lärt Er att replikeringsgrupper möjliggör lässkalning via repliker och hög tillgänglighet via automatisk failover med primära slutpunkter och läsar-slutpunkter, att Cluster Mode delar upp data över upp till 500 nodgrupper med hjälp av 16 384 hash-slots för horisontell skalning bortom en enskild nods minne, samt att Global Datastore replikerar data mellan regioner för globala läsningar med låg latens och DR mellan regioner. Härnäst utforskar vi cachningsstrategierna lazy loading och write-through.

Gratis att börja

Lär dig AWS Solutions Architect med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
30
Lektioner
120

Vanliga frågor

Är lektionen ”ElastiCache Redis-replikeringsgrupper och klusterläge” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen AWS Solutions Architect, inklusive ”ElastiCache Redis-replikeringsgrupper och klusterläge”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i AWS Solutions Architect innehåller totalt 4 lektioner.

Vad lär jag mig i ”ElastiCache Redis-replikeringsgrupper och klusterläge”?

Bygg en Redis-replikeringsgrupp för lässkalning och aktivera klusterläge för att dela upp data över flera nodgrupper. Ni övar på AWS Solutions Architect med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig AWS Solutions Architect?

Du behöver inga förkunskaper. Utbildningen i AWS Solutions Architect på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.

Hur lång tid tar lektionen ”ElastiCache Redis-replikeringsgrupper och klusterläge”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här AWS Solutions Architect-lektionen?

Ja. Varje AWS Solutions Architect-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Redis jämfört med Memcached: Välj rätt motor
  2. ElastiCache Redis-replikeringsgrupper och klusterläge
  3. Cachelagringsstrategier: Lazy Loading och Write-Through
  4. Sessionslagring och topplistemönster
← Tillbaka till AWS Solutions Architect