Menu
Szybki wybór
Hosting Domeny VPS SSL Kalkulator Porównania FAQ
Aktywne kody
Wszystkie kody rabatowe

Redis Cluster — konfiguracja 6 węzłów, hash slots, sharding i failover

Opublikowano: 9 kwietnia 2026 · Kategoria: VPS / Bazy danych

Pojedyncza instancja Redis ma limit: jeden rdzeń CPU, pojemność RAM jednego serwera i zero odporności na awarie. Redis Cluster rozwiązuje te problemy przez sharding danych na wiele masterów i automatyczny failover przez repliki. W tym przewodniku postawisz klaster 6 węzłów (3 master + 3 replica) na jednym lub wielu serwerach, skonfigurujesz hash sloty i przetestujesz automatyczne przełączanie awaryjne.

Architektura Redis Cluster

Redis Cluster używa dwóch portów per węzeł: standardowego portu klienta (np. 7001) i portu komunikacji między węzłami (port klienta + 10000, np. 17001). Komunikacja klastrowa używa binarnego protokołu gossip — każdy węzeł wie o stanie wszystkich pozostałych.

Węzeł Rola Port klienta Port klastra Hash slots
node-1 Master 1 7001 17001 0–5460
node-2 Master 2 7002 17002 5461–10922
node-3 Master 3 7003 17003 10923–16383
node-4 Replica → Master 1 7004 17004
node-5 Replica → Master 2 7005 17005
node-6 Replica → Master 3 7006 17006

Instalacja Redis i struktura katalogów

# Ubuntu 22.04 / Debian 12
sudo apt update
sudo apt install -y redis-server

# Sprawdź wersję (wymagana 3.0+, zalecana 7.x)
redis-server --version

# Utwórz katalogi per węzeł
for port in 7001 7002 7003 7004 7005 7006; do
  sudo mkdir -p /etc/redis/cluster/${port}
  sudo mkdir -p /var/lib/redis/${port}
done

Pliki konfiguracyjne węzłów

Utwórz plik konfiguracyjny dla każdego węzła. Poniższy skrypt generuje konfiguracje dla portów 7001–7006:

#!/bin/bash
# gen-cluster-configs.sh
for port in 7001 7002 7003 7004 7005 7006; do
cat > /etc/redis/cluster/${port}/redis.conf <<EOF
# Podstawowe ustawienia
port ${port}
bind 127.0.0.1
daemonize yes
pidfile /var/run/redis/redis-${port}.pid
logfile /var/log/redis/redis-${port}.log
dir /var/lib/redis/${port}

# Klaster
cluster-enabled yes
cluster-config-file /etc/redis/cluster/${port}/nodes.conf
cluster-node-timeout 5000

# Persistence (opcjonalna, dla dev możesz wyłączyć)
appendonly yes
appendfilename "appendonly-${port}.aof"

# Hasło (opcjonalne, zalecane na produkcji)
# requirepass TwojeHaslo
# masterauth TwojeHaslo
EOF
echo "Wygenerowano konfigurację dla portu ${port}"
done
sudo bash gen-cluster-configs.sh

# Utwórz katalog na logi
sudo mkdir -p /var/log/redis

# Uruchom wszystkie 6 węzłów
for port in 7001 7002 7003 7004 7005 7006; do
  redis-server /etc/redis/cluster/${port}/redis.conf
done

# Sprawdź czy nasłuchują
ss -tlnp | grep redis

Tworzenie klastra — CLUSTER MEET i przypisanie slotów

Narzędzie redis-cli --cluster create automatycznie łączy węzły i rozdziela hash slots:

# --cluster-replicas 1 = 1 replika per master
# Kolejność: mastery PIERWSZE, repliki PO
redis-cli --cluster create \
  127.0.0.1:7001 \
  127.0.0.1:7002 \
  127.0.0.1:7003 \
  127.0.0.1:7004 \
  127.0.0.1:7005 \
  127.0.0.1:7006 \
  --cluster-replicas 1

# Potwierdź "yes" gdy narzędzie wyświetli plan

# Sprawdź stan klastra
redis-cli -p 7001 cluster info
redis-cli -p 7001 cluster nodes

Podstawowe operacje i hashtagi

Klient redis-cli w trybie cluster używa flagi -c — automatycznie przekierowuje komendy do właściwego węzła (MOVED redirect):

# -c = cluster mode (automatyczne przekierowania)
redis-cli -c -p 7001

# Ustaw klucze — klaster automatycznie wybierze właściwy shard
SET user:1:name "Jan Kowalski"
SET user:2:name "Anna Nowak"
GET user:1:name

# Hashtagi — wymuszają ten sam slot dla wielu kluczy
# {user:1} to hashtag — CRC16 liczy TYLKO wartość w nawiasach
SET {user:1}:name "Jan"
SET {user:1}:email "[email protected]"
SET {user:1}:age 30
# Wszystkie 3 klucze trafią do tego samego slotu!

# Sprawdź do którego slotu trafia klucz
redis-cli -p 7001 cluster keyslot "user:1:name"
redis-cli -p 7001 cluster keyslot "{user:1}:email"

Resharding — przenoszenie hash slotów

Dodajesz nowy węzeł lub równoważysz obciążenie? Przenieś hash sloty między masterami bez przestoju:

# Sprawdź ID węzłów
redis-cli -p 7001 cluster nodes

# Przenieś 1000 slotów z mastera (ID: abc123) do innego (ID: def456)
redis-cli --cluster reshard 127.0.0.1:7001 \
  --cluster-from abc123 \
  --cluster-to def456 \
  --cluster-slots 1000 \
  --cluster-yes

# Sprawdź rozkład slotów po reshard
redis-cli --cluster check 127.0.0.1:7001

# Automatyczne rebalansowanie (równa dystrybucja)
redis-cli --cluster rebalance 127.0.0.1:7001 --cluster-use-empty-masters

Test failover — symulacja awarii mastera

# Sprawdź aktualny stan klastra
redis-cli -p 7001 cluster nodes | grep master

# Zasymuluj awarię mastera na porcie 7001
redis-cli -p 7001 DEBUG SLEEP 30
# lub zabij proces:
# redis-cli -p 7001 shutdown nosave

# W innym terminalu — obserwuj failover
watch -n 1 "redis-cli -p 7002 cluster nodes"

# Po ~15s replika (port 7004) powinna stać się masterem
# Po przywróceniu węzła 7001 — stanie się repliką

# Manualny failover (graceful, bez utraty danych)
redis-cli -p 7004 cluster failover

Najczęstsze pytania

Ile węzłów potrzeba do Redis Cluster? +
Minimalna konfiguracja to 3 węzły master (każdy z innym zakresem hash slots). Dla HA (wysokiej dostępności) każdy master powinien mieć przynajmniej 1 replikę — łącznie 6 węzłów. Redis Cluster wymaga quorum: przy padnięciu mastera jego replika przejmuje rolę tylko gdy większość masterów (2 z 3) zgadza się że master jest niedostępny. Z 3 masterami możesz stracić 1 bez utraty danych.
Czym są hash slots w Redis Cluster? +
Redis Cluster dzieli przestrzeń kluczy na 16384 hash slotów (0–16383). Klucz jest przypisany do slotu według CRC16(key) mod 16384. Każdy master odpowiada za zakres slotów, np. master-1 obsługuje 0–5460, master-2 5461–10922, master-3 10923–16383. Dzięki temu możesz przenosić sloty między masterami (resharding) bez przestoju całego klastra. Hashtags — klucze w nawiasach klamrowych &#123;user:1&#125;name i &#123;user:1&#125;email — trafiają do tego samego slotu.
Czy Redis Cluster obsługuje multi-key operacje? +
Tak, ale tylko gdy wszystkie klucze trafiają do tego samego hash slotu. Polecenia MGET, MSET, pipeline działają normalnie gdy klucze mają ten sam hashtag — np. &#123;session&#125;:user1 i &#123;session&#125;:user2 trafiają do tego samego slotu. Operacje KEYS, SCAN, SORT z STORE wymagają ostrożności w trybie cluster. Transakcje MULTI/EXEC działają tylko w obrębie jednego slotu.
Jak działa automatyczny failover w Redis Cluster? +
Gdy master przestaje odpowiadać, inne węzły oznaczają go jako PFAIL (possible failure). Gdy większość masterów zgadza się — status zmienia się na FAIL. Replika tego mastera inicjuje kampanię wyborczą — wysyła FAILOVER_AUTH_REQUEST do pozostałych masterów. Jeśli zbierze kworum głosów, promuje się na nowego mastera i przejmuje hash sloty. Cały proces trwa domyślnie 15–30 sekund (cluster-node-timeout * 2).

Sprawdź oferty pasujące do tego scenariusza

Poniżej masz szybkie przejścia do ofert i stron z kodami rabatowymi tam, gdzie są dostępne.