high availability alone, or high availability plus sharding
Anyone planning a Redis high availability solution almost always faces the same fundamental choice: Redis Sentinel for automatic failover without sharding, or Redis Cluster for high availability with built in horizontal scaling. Both solve different problems, and picking the wrong one means either unnecessary operational complexity or an architecture that breaks down at the next growth ceiling.
Table of Contents
- 1. Two different problems: high availability vs. sharding
- 2. Redis Sentinel in brief: failover without sharding
- 3. Redis Cluster in brief: sharding with built in HA
- 4. Operational complexity compared
- 5. Data volume as the deciding factor
- 6. Client integration: differences in practice
- 7. Migration paths: moving from Sentinel to Cluster
- 8. Combined architectures and when they make sense
- 9. A practical decision matrix
- 10. Summary
- 11. FAQ
1. Two different problems: high availability vs. sharding
The choice between Redis Sentinel and Redis Cluster is often treated as a matter of taste, yet the two technologies fundamentally solve different problems. Sentinel addresses high availability alone: a master fails, a replica gets promoted automatically, the application stays available. The volume of data being handled is bounded by the capacity of a single Redis process, because Sentinel only replicates, it never splits anything up.
Redis Cluster, by contrast, solves two problems at once: it distributes data across multiple nodes, so called sharding, and bundles automatic per shard failover right alongside it. Anyone who only needs high availability but no horizontal scaling ends up with a Redis Cluster solution that does more than is actually needed, and pays for it with noticeably higher operational complexity. That distinction is the starting point for any well founded decision between Cluster and Sentinel.
A common mistake in practice is adopting Redis Cluster because it sounds more modern or more scalable, without the underlying data volume actually justifying it. The result is an infrastructure with significantly more moving parts, slot management, hash tag discipline in application code, cluster aware clients, for a problem that a simple Sentinel setup would have solved just as well. The following sections work out the concrete differences so this decision rests on real criteria instead of gut feeling.
2. Redis Sentinel in brief: failover without sharding
Redis Sentinel monitors a classic master replica setup using a group of independent Sentinel processes. If a sufficient number of Sentinels agree via quorum that the master has failed, the system automatically promotes a replica to the new master. Clients ask Sentinel for the current master address instead of hardcoding it. The entire dataset always stays fully on a single active node, merely replicated onto several others.
The big advantage of this model is its simplicity: from the application's point of view, almost nothing changes compared to a single Redis server, aside from address resolution through Sentinel. Every Redis command works without restriction, multi-key operations, transactions, all 16 databases via SELECT. This compatibility makes Redis Sentinel the obvious choice for setups that primarily need resilience but whose data volume comfortably stays within the capacity of a single host.
3. Redis Cluster in brief: sharding with built in HA
Redis Cluster spreads the 16384 hash slots across several master nodes, each with its own replicas. If a master fails, the cluster automatically promotes one of its replicas, without separate Sentinel processes, that logic is built directly into every node. The decisive difference from Sentinel: the total dataset is spread across several independent masters, so the capacity limit of a single host is no longer the ceiling for the entire system.
This extra capability comes with real constraints: multi-key operations only work within the same hash slot, SELECT is disabled, and applications strictly require a cluster aware client. Redis Cluster is therefore not an extension of Sentinel with extra features, but an architecturally different model with its own rules that must be considered in the application design from the outset.
| Criterion | Redis Sentinel | Redis Cluster |
|---|---|---|
| Automatic failover | Yes, quorum based | Yes, built in per shard |
| Horizontal scaling | No | Yes, up to many TB |
| Multi-key operations | Unrestricted | Only with hash tags |
| SELECT / multiple DBs | Yes | No |
| Client requirements | Sentinel-aware client | Cluster-aware client |
| Operational complexity | Medium | High |
4. Operational complexity compared
The operational burden of Redis Sentinel comes down to essentially three things: monitoring the Sentinel processes themselves, configuring quorum and timeouts correctly, and making sure clients are Sentinel aware. A failover always affects the entire dataset at once, there are no partial outages of individual data ranges. Debugging is comparatively simple because there is only ever one active master at a time.
Redis Cluster adds the entire slot management layer on top of Sentinel-like per shard failover logic: initial distribution, rebalancing as data grows, resharding when nodes are added or removed, monitoring cluster_state on every single node. A partial outage only affects the slots of the failed master, which is good in one sense, because the rest of the cluster keeps running, but it also means monitoring and alerting need to be built more granularly per shard. The number of processes to monitor grows noticeably faster with cluster size in Cluster than in Sentinel.
# Sentinel: one command tells you the whole picture
redis-cli -p 26379 sentinel master orders-cache
# Cluster: health must be checked per node AND cluster-wide
redis-cli -c -p 7000 cluster info | grep cluster_state
redis-cli -c -p 7001 cluster info | grep cluster_state
redis-cli -c -p 7002 cluster info | grep cluster_state
redis-cli --cluster check 10.0.2.10:7000
# Cluster: verifying full coverage requires summing per-node slots
redis-cli -c -p 7000 cluster slots | wc -l
In teams with limited dedicated database operations experience, this difference is often the deciding factor. A well documented Sentinel setup can be reliably run even by a generalist DevOps team, while a Redis Cluster in production tends to demand a deeper understanding of slot mechanics, especially during incident response under time pressure.
5. Data volume as the deciding factor
The single most important metric for choosing between Redis Sentinel and Redis Cluster is the actual and the reasonably foreseeable future data volume relative to the available hardware. If the entire dataset, with enough headroom for growth, fits into the memory of a realistically available host, roughly up to 100 to 200 GB on common cloud hardware, sharding is usually unnecessary, and Sentinel is enough.
If the data volume exceeds that threshold, or is foreseeably going to exceed it within the next one to two years, Redis Cluster should be seriously considered. It is important to look not just at the current size but at the growth rate, because migrating from Sentinel to Cluster later is considerably more work than an early, planned adoption of Cluster, since the migration path, hash tag discipline, and client changes then have to be retrofitted into a running system. Write throughput counts as a criterion too: a single Redis master typically handles several hundred thousand simple operations per second, but more complex operations or large values reduce that throughput considerably, which can also argue for sharding even at moderate data volume.
# Quick capacity check: current memory usage vs. host limits
redis-cli -p 6379 info memory | grep -E "used_memory_human|maxmemory_human"
# Estimate growth trend from historical INFO snapshots
# (collected periodically via cron/monitoring, then plotted)
redis-cli -p 6379 info memory | grep used_memory: >> /var/log/redis/mem-trend.log
# Rule of thumb for the decision:
# < 100-200 GB and steady growth -> Sentinel is sufficient
# > 100-200 GB or fast growth -> plan for Redis Cluster
A rule of thumb that has proven useful in practice: if you can answer the question "will this dataset ever grow bigger than a single well equipped server?" with a clear no, stick with Redis Sentinel. Any uncertainty on that question is a reason to at least evaluate Redis Cluster, even while the current data volume is still small, because an early hash tag ready key design is considerably cheaper than retrofitting one later.
6. Client integration: differences in practice
From the application code's perspective, Redis Sentinel and Redis Cluster differ far more than the configuration layer would suggest. A Sentinel aware client knows a list of Sentinel addresses and asks for the current master address when needed, every other Redis command then works exactly like a normal connection. Existing code written against a standalone Redis can usually be switched to Sentinel with minimal changes.
A cluster aware client for Redis Cluster, on the other hand, has to handle considerably more logic: computing slots, following MOVED and ASK redirects, checking multi-key commands for slot compatibility before execution, and handling errors that simply do not exist under Sentinel, such as the rejection of pipeline commands spanning several slots. Existing application code that uses multi-key commands without hash tags often stops working after a migration to Cluster without adjustments, a migration cost that is regularly underestimated in practice.
# Sentinel-aware client setup: minimal change from standalone
client = RedisSentinelClient(
sentinels=[("10.0.1.11", 26379), ("10.0.1.12", 26379)],
service_name="orders-cache"
)
client.mget(["order:1", "order:2", "order:3"]) # works fine
# Cluster-aware client setup: additional constraints apply
cluster_client = RedisClusterClient(
startup_nodes=[("10.0.2.10", 7000), ("10.0.2.11", 7001)]
)
# This fails unless all three keys share the same hash tag
cluster_client.mget(["order:1", "order:2", "order:3"])
# CROSSSLOT Keys in request don't hash to the same slot
# Correct cluster pattern requires a shared hash tag
cluster_client.mget(["{orders}:1", "{orders}:2", "{orders}:3"])
7. Migration paths: moving from Sentinel to Cluster
A later move from Redis Sentinel to Redis Cluster is possible, but it is never a pure infrastructure swap. The usual path involves setting up a fresh cluster and migrating data from the existing Sentinel setup into it, for example via redis-cli --cluster import or through application level dual writes during a transition period. There is no direct in place upgrade path from a running Sentinel setup to Cluster, because the fundamental data distribution changes.
The real effort rarely lies in the pure data migration but in reworking the application code: every spot that uses multi-key operations without hash tags, every transaction spanning several independent keys, every dependency on multiple databases via SELECT, has to be identified and adapted. Teams that adopt hash tag friendly key design early, even while still on Sentinel, substantially reduce this migration effort should a later move to Cluster become necessary.
# Import existing standalone/Sentinel data into a fresh cluster
redis-cli --cluster import 10.0.2.10:7000 \
--cluster-from 10.0.1.10:6379 \
--cluster-copy
# Alternative: dual-write from the application during cutover
# 1. Application writes to both the old Sentinel-backed master
# and the new Cluster in parallel
# 2. Read traffic stays on the old master until parity is verified
# 3. Cutover reads to the cluster once replication lag is zero
# 4. Decommission the old Sentinel setup
# Audit existing code for CROSSSLOT-incompatible patterns before
# migrating: search for multi-key commands without hash tags
grep -rn "MGET\|MSET\|SINTERSTORE\|MULTI" ./src | grep -v "{.*}"
An often overlooked point during migration is the test phase: a test suite developed and run against Sentinel usually does not surface CROSSSLOT errors, because they simply do not exist under a standalone or Sentinel setup. A dedicated test run against a temporary Redis Cluster in staging, using the same application code as production, is the most reliable way to catch this class of errors before the actual cutover.
8. Combined architectures and when they make sense
In larger system landscapes it is common to run Redis Sentinel and Redis Cluster side by side for different purposes, not as competing but as complementary solutions. A session store with a bounded, well predictable data volume often runs more efficiently on a Sentinel setup, while a product catalog cache with rapidly growing data volume is better served by Redis Cluster. This split by use case, rather than by a company wide standard, is often the most pragmatic solution in practice.
Another pattern is using Redis Cluster for the primary data store combined with a separate, smaller Sentinel instance for specific use cases like distributed locks or rate limiting, where the compatibility guarantees of standalone Redis, such as unrestricted transactions, matter more than horizontal scaling. What matters here is that this combination is a deliberate choice, not the result of historically grown, uncoordinated infrastructure decisions.
# Example: two logical Redis deployments serving different needs
# deployment "sessions" - small, predictable, needs full command set
# -> Sentinel, 1 master + 2 replicas, 3 sentinel processes
redis-cli -p 26379 sentinel master sessions
# deployment "catalog-cache" - large, fast growing, read heavy
# -> Cluster, 6 masters + 6 replicas, sharded via hash slots
redis-cli -c -p 7000 cluster info | grep cluster_size
# Application config keeps both endpoints explicit and separate
# REDIS_SESSIONS_SENTINELS=10.0.1.11:26379,10.0.1.12:26379
# REDIS_CATALOG_CLUSTER_NODES=10.0.2.10:7000,10.0.2.11:7001
This deliberate separation by use case also prevents a common anti pattern: forcing all Redis workloads into the same infrastructure just to maintain a single operating model. In the short term that saves coordination effort, but in the long term it leads either to an oversized cluster for small workloads or to a Sentinel setup running into its capacity limit, even though part of that data never needed to live there in the first place.
Mironsoft
Redis architecture consulting and infrastructure decisions
Not sure whether Cluster or Sentinel fits?
We analyze your data volume, growth rate, and access patterns and recommend the architecture that actually matches your requirements, instead of pushing the more expensive solution by default.
Architecture assessment
Objectively evaluating data volume, growth, and access patterns
Setup & configuration
Setting up and documenting Sentinel or Cluster production ready
Migration planning
Planning and guiding the transition from Sentinel to Cluster without downtime
9. A practical decision matrix
Summed up, the decision between Redis Sentinel and Redis Cluster comes down to a few clear guiding questions. If the dataset fits on one host with headroom, Sentinel is enough. If the application depends on unrestricted multi-key operations and multiple logical databases, that also argues for Sentinel, even at larger data volumes, since migrating to Cluster would restrict those features.
If the dataset is foreseeably going to outgrow the capacity of a single host, or write throughput is already a limiting factor, the benefits of Redis Cluster outweigh the added operational complexity. What matters is repeating this assessment regularly, not just once, because data volumes rarely grow linearly, and an architecture that fits today can be the wrong choice in two years.
10. Summary
The choice between Redis Cluster and Redis Sentinel is not a question of old versus new or simple versus advanced, but a question of which concrete problem needs solving. Sentinel solves high availability for datasets that stay on one host. Cluster solves high availability for datasets that outgrow that limit, and pays for it with significantly higher operational complexity and restricted command compatibility.
Data volume and its growth rate are the most reliable decision criteria, complemented by the question of whether the application depends on unrestricted multi-key operations. Anyone who evaluates these criteria early and honestly avoids both the unnecessary complexity of an over eagerly adopted cluster and the painful retrofit of a Sentinel setup that has hit its capacity ceiling.
Cluster vs. Sentinel: The Essentials at a Glance
Sentinel for bounded data volume
If the dataset fits on one host with headroom, Sentinel is the simpler, sufficient solution.
Cluster for foreseeable growth
Once data volume exceeds one host's capacity, the benefits of Redis Cluster outweigh the cost.
Check multi-key requirements
Unrestricted transactions and multiple databases argue for Sentinel regardless of size.
Plan migration early
Hash tag friendly key design from the start considerably lowers later migration costs.