0Pricing
Cloud & IT Cert Prep · Lekcja

Grupy replikacji Redis ElastiCache i tryb klastra

Budować grupę replikacji Redis na potrzeby skalowania odczytu oraz włączać tryb klastra, aby dzielić dane między wiele grup węzłów.

Grupy replikacji Redis ElastiCache i tryb klastra to bezpłatna lekcja Cloud & IT Cert Prep na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Cloud & IT Cert Prep, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Cloud & IT Cert Prep zawiera 4 lekcji w sumie.

Omówienie grup replikacji Redis

Grupa replikacji ElastiCache to logiczne grupowanie jednego głównego węzła Redis i maksymalnie 5 replik do odczytu. Węzeł główny obsługuje wszystkie operacje zapisu, a repliki otrzymują asynchronicznie replikowane dane z węzła głównego i obsługują ruch odczytu. Grupy replikacji zapewniają dwie kluczowe funkcje: skalowanie odczytu (rozłożenie żądań odczytu na wiele replik) oraz wysoką dostępność z automatycznym przełączaniem awaryjnym (promowanie repliki do roli głównej w przypadku awarii węzła głównego). Wszystkie węzły w grupie replikacji współdzielą ten sam zestaw danych.

# 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

Punkt końcowy główny a punkt końcowy odbiorcy

ElastiCache udostępnia dwa punkty końcowe DNS dla grupy replikacji: punkt końcowy główny zawsze wskazuje bieżący węzeł główny (jest automatycznie aktualizowany podczas przełączania awaryjnego) — należy go używać do wszystkich operacji zapisu. Punkt końcowy odbiorcy równoważy obciążenie żądań odczytu między wszystkimi dostępnymi replikami — należy go używać do operacji odczytu w celu rozłożenia obciążenia. Aplikacja powinna utrzymywać dwie pule połączeń: jedną dla punktu końcowego głównego na potrzeby zapisów oraz drugą dla punktu końcowego odbiorcy na potrzeby odczytów. Jest to zalecany schemat połączeń dla grup replikacji 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)

Proces automatycznego przełączania awaryjnego

Gdy węzeł główny ulegnie awarii (ElastiCache wykrywa ją w ciągu kilku sekund za pomocą kontroli stanu), automatyczne przełączanie awaryjne wybiera jedną z replik do odczytu i promuje ją do roli głównej. Proces promowania przebiega następująco: (1) wybrana replika zostaje promowana do roli głównej, (2) rekord DNS głównego punktu końcowego zostaje zaktualizowany tak, aby wskazywał nowy węzeł główny (TTL około 1 sekundy), (3) stary węzeł główny zostaje zastąpiony nową repliką. Całkowity czas przełączania awaryjnego wynosi zwykle 30–60 sekund. Aplikacje korzystające z DNS głównego punktu końcowego automatycznie nawiązują połączenie ponownie po propagacji DNS — nie trzeba wpisywać adresów IP na stałe.

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

Rozmieszczenie replik w wielu strefach AZ

Aby uzyskać maksymalną odporność, należy rozmieścić repliki w wielu strefach dostępności. Po włączeniu Multi-AZ dla grupy replikacji ElastiCache automatycznie umieszcza węzeł główny i repliki w różnych strefach AZ. Jeśli cała strefa AZ przestanie działać, przełączanie awaryjne promuje replikę ze strefy, która nadal działa. Podczas tworzenia grupy replikacji można również jawnie określić preferowane strefy AZ dla każdego węzła, używając opcji --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

Czym jest tryb klastra Redis

Redis Cluster Mode Enabled (CME) dzieli zestaw danych między wiele grup węzłów (fragmentów), z których każda zawiera węzeł główny i maksymalnie 5 replik. Jest to rozwiązanie Redis do fragmentowania horyzontalnego. Tryb klastra pozwala przekroczyć limit pamięci pojedynczego węzła — można utworzyć maksymalnie 500 grup węzłów, z których każda ma 500 GB, co pozwala pojedynczemu klastrowi Redis przechowywać do 500 × 500 GB = 250 TB danych. Tryb klastra zwiększa również przepustowość zapisu, ponieważ każda grupa węzłów niezależnie przetwarza zapisy dla przypisanego jej zakresu kluczy.

# 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

Sloty haszowania i dystrybucja kluczy

Tryb klastra Redis dzieli przestrzeń kluczy na 16 384 sloty haszowania. Każda grupa węzłów posiada ciągły zakres slotów haszowania. Podczas zapisu klucza Redis oblicza CRC16(key) % 16384, aby określić slot haszowania, a tym samym grupę węzłów odpowiedzialną za jego obsługę. Aplikacja musi używać klienta Redis świadomego klastra (takiego jak redis-py-cluster lub Jedis w trybie klastra), który zna mapę slotów i kieruje każde polecenie do właściwego węzła. Standardowi klienci zwrócą błędy przekierowania MOVED, jeśli wyślą klucz do niewłaściwego fragmentu.

# 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

Tryb klastra a tryb bez klastra

Na egzaminie SAA-C03 wybierz tryb bez klastra, gdy: dane mieszczą się na pojedynczym węźle (< ~400 GB po uwzględnieniu zapasu), potrzebujesz prostego układu węzeł główny/replika lub aplikacja korzysta ze złożonych operacji obejmujących wiele kluczy (transakcje obejmujące wiele kluczy wymagają, aby wszystkie klucze znajdowały się w tym samym slocie). Wybierz tryb klastra, gdy: zestaw danych przekracza pojemność pamięci pojedynczego węzła, potrzebujesz skalowania horyzontalnego przepustowości zapisu lub przewidujesz przyszły wzrost wymagający zmiany fragmentowania online. Tryb klastra obsługuje dodawanie fragmentów bez przestojów (zmiana fragmentowania online).

# 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

Globalny magazyn danych do replikacji między regionami

ElastiCache Global Datastore rozszerza replikację Redis na wiele regionów AWS. Wyznaczają Państwo jeden region jako klaster główny i dodają klastry pomocnicze w innych regionach. Operacje zapisu trafiają do klastra głównego, a klastry pomocnicze otrzymują replikację asynchroniczną, której typowe opóźnienie wynosi mniej niż 1 sekundę. Klastry pomocnicze mogą obsługiwać lokalne odczyty z bardzo małym opóźnieniem. Global Datastore umożliwia tworzenie aplikacji globalnych, w których użytkownicy z różnych kontynentów odczytują dane z najbliższego regionu, oraz zapewnia odtwarzanie po awarii między regionami, dzięki któremu można awansować klaster pomocniczy do roli głównego, jeśli główny region ulegnie awarii.

# 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 na dużą skalę

W niesklasteryzowanej grupie replikacji Redis komunikaty pub/sub są rozsyłane do wszystkich replik — każdy subskrybent w dowolnym węźle otrzymuje komunikaty publikowane na kanale. Jednak w Cluster Mode pub/sub jest ograniczone do powiadomień keyspace, a pub/sub oparte na kanałach działa tylko w obrębie pojedynczego fragmentu, chyba że używają Państwo Redis 7+ z mechanizmem shardingu Pub/Sub (SSUBSCRIBE / SPUBLISH do obsługi pub/sub uwzględniającej fragmenty). Jest to istotne ograniczenie podczas projektowania pub/sub na dużą skalę w trybie klastra.

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

Monitorowanie opóźnienia replikacji

Należy monitorować metrykę CloudWatch ReplicationLag na replikach odczytu, aby upewnić się, że nadążają za klastrem głównym. Opóźnienie przekraczające kilka sekund wskazuje na wąskie gardło po stronie repliki (przeciążony węzeł, problemy z siecią lub zbyt wiele operacji zapisu do przetworzenia przez replikę). W scenariuszach z globalnym magazynem danych należy monitorować GlobalDatastoreReplicationLag. Duże opóźnienie replikacji oznacza, że repliki odczytu mogą zwracać nieaktualne dane — ma to znaczenie w przypadku aplikacji, które oczekują spójności ostatecznej w ściśle określonych granicach.

# 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

Skalowanie grup replikacji

Mogą Państwo skalować pionowo (zmienić typ węzła) lub skalować poziomo (dodać albo usunąć repliki). Zmiana typu węzła wymaga wywołania modify-replication-group i przy natychmiastowym zastosowaniu powoduje krótkie przełączenie awaryjne — klaster główny zostaje zastąpiony nowym węzłem wybranego typu. Dodawanie replik odbywa się online, bez przestoju. Podczas przechodzenia z trybu niesklasteryzowanego do trybu klastra należy utworzyć nową grupę w trybie klastra i przeprowadzić migrację — nie ma możliwości konwersji między trybem klastra a trybem niesklasteryzowanym w miejscu.

# 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

Szybkie sprawdzenie

Sprawdź swoją znajomość zagadnień AWS Solutions Architect (SAA-C03) omawianych w tej lekcji.

Podsumowanie lekcji

W tej lekcji nauczyli się Państwo, że grupy replikacji zapewniają skalowanie odczytu za pomocą replik oraz wysoką dostępność dzięki automatycznemu przełączaniu awaryjnemu z użyciem endpointów głównego klastra i odczytu, Cluster Mode dzieli dane na fragmenty w maksymalnie 500 grupach węzłów, wykorzystując 16 384 sloty hashujące, aby umożliwić skalowanie poziome wykraczające poza pamięć pojedynczego węzła, a Global Datastore replikuje dane między regionami, zapewniając globalne odczyty z małym opóźnieniem oraz odtwarzanie po awarii między regionami. W następnej części omówimy strategie buforowania: lazy loading i write-through.

Często zadawane pytania

Czy lekcja „Grupy replikacji Redis ElastiCache i tryb klastra” jest bezpłatna?

Tak — pełny tekst „Grupy replikacji Redis ElastiCache i tryb klastra” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Cloud & IT Cert Prep, przejdź na CoddyKit PRO. Kurs Cloud & IT Cert Prep zawiera 4 lekcji w sumie.

Co nauczysz się w „Grupy replikacji Redis ElastiCache i tryb klastra”?

Budować grupę replikacji Redis na potrzeby skalowania odczytu oraz włączać tryb klastra, aby dzielić dane między wiele grup węzłów. Ćwiczysz Cloud & IT Cert Prep z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Cloud & IT Cert Prep?

Nie wymagamy żadnego doświadczenia. Cloud & IT Cert Prep w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.

Ile czasu zajmuje lekcja „Grupy replikacji Redis ElastiCache i tryb klastra”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Cloud & IT Cert Prep?

Tak. Każda lekcja Cloud & IT Cert Prep zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Redis a Memcached: wybór właściwego silnika
  2. Grupy replikacji Redis ElastiCache i tryb klastra
  3. Strategie buforowania: lazy loading i write-through
  4. Przechowywanie sesji i wzorce tabel wyników
← Powrót do Cloud & IT Cert Prep