Redis Cluster — nativ horizontal scaling для Redis. Minimum: 3 masters + 3 replicas = 6 nodes (distributed через 16384 slots). Automated failover, client-side sharding, transparent для app (smart clients). Не для small data (<5GB) — просто Redis master+replica достаточно. Alternative: managed Redis (AWS ElastiCache, Redis Cloud, Yandex Managed Redis).
Ниже: пошаговая инструкция, рабочие примеры, типичные ошибки, FAQ.
cluster-enabled yes, cluster-node-timeout 5000, appendonly yesredis-cli --cluster create ip1:7000 ip2:7001 ... --cluster-replicas 1redis-cli -p 7000 cluster info → cluster_state:ok| Сценарий | Конфиг |
|---|---|
| redis.conf (per node) | port 7000
cluster-enabled yes
cluster-config-file nodes.conf
cluster-node-timeout 5000
appendonly yes
protected-mode no # для intra-cluster (использовать firewall + requirepass)
requirepass strongpass |
| Create cluster CLI | redis-cli --cluster create \
10.0.0.1:7000 10.0.0.2:7001 10.0.0.3:7002 \
10.0.0.4:7003 10.0.0.5:7004 10.0.0.6:7005 \
--cluster-replicas 1 -a strongpass |
| ioredis cluster client (Node.js) | const Redis = require('ioredis');
const cluster = new Redis.Cluster([
{ host: '10.0.0.1', port: 7000 },
{ host: '10.0.0.2', port: 7001 },
// only need to provide a few — rest discovered
], { redisOptions: { password: 'strongpass' } });
await cluster.set('key', 'value'); |
| Add new master + resharding | # Add new node to cluster
redis-cli --cluster add-node new:7006 existing:7000
# Reshard slots to new master
redis-cli --cluster reshard existing:7000 |
| Hash tags (keep keys в одном slot) | # Без hash tags — random distribution
SET user:1:name alice
SET user:1:email a@e.com
# С hash tag — оба на одном shard (enabling transactions)
SET {user:1}:name alice
SET {user:1}:email a@e.com |
Data >5 GB или >100k ops/sec. Меньше — single master + replica + Sentinel достаточно.
Sentinel — HA (1 master + replicas, automatic failover). Cluster — scaling (sharded across masters). Разные задачи.
AWS ElastiCache (Cluster mode), Redis Cloud (Redis Labs), Yandex Managed Redis. Обычно $50-500/мес vs $0 self-host но 20+ hours/month maintenance.
Write dual (old + new), read от single → migrate reads batch → cut write. Или use Redis-shake tool для bulk copy.