The situation
You run CLUSTER INFO or CLUSTER NODES against your Redis instance โ maybe debugging, checking cluster status, or running a migration script โ and get this:
(error) ERR This instance has cluster support disabled
Your app or script breaks. The annoying part? The command is perfectly valid Redis syntax. Redis just refuses to run it because cluster mode was never enabled on this instance.
Why this happens
Redis runs in one of two modes: standalone or cluster. Every instance defaults to standalone. In that mode, all CLUSTER * commands are rejected at the protocol level โ no attempt to execute, just an immediate error.
A few common ways this bites people:
- A library that auto-runs
CLUSTER INFOto detect topology on startup โ Lettuce, ioredis, and Jedis all do this when initialized with a cluster client - A migration or deployment script written for a cluster environment, accidentally run against a dev/staging standalone Redis
- A cluster-aware client pointed at the wrong host โ standalone on port 6379 instead of the cluster endpoint on 7000+
- Manually running
CLUSTER MYIDorCLUSTER SLOTSwhile debugging
Quick diagnosis
Confirm what mode Redis is actually running in:
redis-cli -h 127.0.0.1 -p 6379 INFO server | grep redis_mode
You'll get one of two answers:
redis_mode:standalone
# or
redis_mode:cluster
If it says standalone, that's your culprit. No cluster commands will work on this instance, period.
Double-check the config value too:
redis-cli CONFIG GET cluster-enabled
1) "cluster-enabled"
2) "no"
Fix 1: You need standalone โ fix the client
If your Redis is intentionally standalone (single node, no sharding), the problem isn't Redis โ it's the client sending the wrong commands. Swap your cluster client for a regular one.
ioredis (Node.js) โ using new Redis.Cluster([...]) when you should use new Redis(...):
// Wrong โ cluster client against standalone Redis
const redis = new Redis.Cluster([
{ host: '127.0.0.1', port: 6379 }
]);
// Correct โ standalone client
const redis = new Redis({
host: '127.0.0.1',
port: 6379
});
Jedis (Java) โ replace JedisCluster with JedisPool:
// Wrong
JedisCluster jedis = new JedisCluster(new HostAndPort("127.0.0.1", 6379));
// Correct
JedisPool pool = new JedisPool("127.0.0.1", 6379);
Jedis jedis = pool.getResource();
Lettuce (Java/Spring) โ RedisClient instead of RedisClusterClient:
// Wrong
RedisClusterClient clusterClient = RedisClusterClient.create("redis://127.0.0.1:6379");
// Correct
RedisClient client = RedisClient.create("redis://127.0.0.1:6379");
redis-py (Python):
# Wrong
from redis.cluster import RedisCluster
r = RedisCluster(host='127.0.0.1', port=6379)
# Correct
import redis
r = redis.Redis(host='127.0.0.1', port=6379)
Fix 2: You need cluster mode โ enable it in Redis config
Actually need clustering? Data sharding, horizontal scaling, high availability across nodes? Then you have to enable cluster mode in redis.conf and build the cluster properly.
Step 1 โ Edit /etc/redis/redis.conf:
# Enable cluster mode
cluster-enabled yes
# Each node needs its own state file โ don't share this between instances
cluster-config-file nodes.conf
# How long (ms) before a node is considered unreachable
cluster-node-timeout 5000
Step 2 โ Restart Redis:
sudo systemctl restart redis
# or
redis-server /etc/redis/redis.conf
Step 3 โ Redis requires at least 3 master nodes to form a cluster. With 3 instances running on ports 7000โ7002:
redis-cli --cluster create \
127.0.0.1:7000 \
127.0.0.1:7001 \
127.0.0.1:7002 \
--cluster-replicas 0
Type yes at the prompt to confirm slot allocation across the 3 nodes.
Fix 3: Wrong endpoint โ check your ports
Running both a standalone and cluster Redis? Easy to point a cluster client at port 6379 by mistake. Check what's actually listening:
# Check what's listening
ss -tlnp | grep redis
# or
netstat -tlnp | grep redis
tcp LISTEN 0 128 0.0.0.0:6379 # standalone
tcp LISTEN 0 128 0.0.0.0:7000 # cluster node 1
tcp LISTEN 0 128 0.0.0.0:7001 # cluster node 2
tcp LISTEN 0 128 0.0.0.0:7002 # cluster node 3
Your cluster client needs to point at a cluster port (7000+), not 6379.
Verify the fix
Switched to a standalone client? Run a basic round-trip and confirm no cluster error:
redis-cli SET test_key "hello"
redis-cli GET test_key
# Expected: "hello"
Enabled cluster mode? Check that the cluster is healthy before trusting it with real traffic:
redis-cli -p 7000 CLUSTER INFO | grep cluster_state
# Expected: cluster_state:ok
redis-cli -p 7000 CLUSTER NODES
# Expected: 3 lines, each with a node ID and its slot range (0-5460, 5461-10922, 10923-16383)
redis-cli -c -p 7000 SET foo bar
redis-cli -c -p 7000 GET foo
# The -c flag tells redis-cli to follow MOVED redirects automatically
Watch out: enabling cluster mode deletes your data
You cannot switch a live standalone instance to cluster mode without wiping it. Redis stores data differently in each mode โ there's no in-place migration.
Before making the switch, dump everything first:
redis-cli --rdb dump.rdb
Then restore into the new cluster once it's up. Skip this step and you lose whatever was in the standalone instance.

