如何以集群模式运行Docker Redis?集群模式连接单实例报错求助
解决Spring Redis集群模式连接Docker Redis报错的问题
这个坑我踩过!你遇到的ERR This instance has cluster support disabled错误,本质原因很直白:你用docker run redis启动的是普通单实例Redis,默认是关闭集群支持的,但Spring这边却用了集群模式的客户端去连接,自然会报错。
接下来给你两种解决方案,分别适配开发测试和正式集群场景:
方案一:快速启动单节点集群模式(开发测试用)
先把你现在的旧容器停掉删掉:
docker stop TestRedis docker rm TestRedis
然后用带集群参数的命令启动新容器:
docker run --privileged=true -p 6379:6379 --name TestRedisCluster -d redis redis-server --cluster-enabled yes
重点就是最后加的redis-server --cluster-enabled yes,它会让Redis实例开启集群模式支持。
启动后,你再用Spring的集群客户端连接127.0.0.1:6379,应该就能正常工作了。
方案二:搭建完整Redis集群(3主3从,适合正式环境)
如果需要模拟真实的集群环境,推荐用docker-compose来快速搭建:
- 创建
docker-compose.yml文件,内容如下:
version: '3' services: redis-node1: image: redis command: redis-server --port 7000 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes ports: - "7000:7000" - "17000:17000" redis-node2: image: redis command: redis-server --port 7001 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes ports: - "7001:7001" - "17001:17001" redis-node3: image: redis command: redis-server --port 7002 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes ports: - "7002:7002" - "17002:17002" redis-node4: image: redis command: redis-server --port 7003 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes ports: - "7003:7003" - "17003:17003" redis-node5: image: redis command: redis-server --port 7004 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes ports: - "7004:7004" - "17004:17004" redis-node6: image: redis command: redis-server --port 7005 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes ports: - "7005:7005" - "17005:17005"
- 启动所有节点:
docker-compose up -d
- 初始化集群(把前3个设为主节点,后3个设为从节点):
docker exec -it redis-node1 redis-cli --cluster create 127.0.0.1:7000 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 --cluster-replicas 1
执行命令后输入yes确认集群创建即可。
- Spring配置里,把集群节点地址配置成这6个节点的地址(比如
127.0.0.1:7000,127.0.0.1:7001,...),就能正常连接集群了。
关键提醒
不管用哪种方案,核心都是让Redis实例开启集群模式——也就是启动时加上--cluster-enabled yes参数。之前的命令没加这个,所以Spring集群客户端连过去才会报错。
内容的提问来源于stack exchange,提问作者Don Rhummy
相关产品推荐
相关产品推荐

