为了测试redis集群高可用,启动三主三从,kill掉一台master后,redis集群会slave自动切换到master,这都没有问题,但是客户端springboot服务报错,报错信息如下:
报错信息:
io.lettuce.core.RedisCommandExecutionException: CLUSTERDOWN The cluster is down] with root cause
io.lettuce.core.RedisCommandExecutionException: CLUSTERDOWN The cluster is down
at io.lettuce.core.ExceptionFactory.createExecutionException(ExceptionFactory.java:135)
at io.lettuce.core.ExceptionFactory.createExecutionException(ExceptionFactory.java:108)
at io.lettuce.core.protocol.AsyncCommand.completeResult(AsyncCommand.java:120)
at io.lettuce.core.protocol.AsyncCommand.complete(AsyncCommand.java:111)
at io.lettuce.core.protocol.CommandWrapper.complete(CommandWrapper.java:59)
at io.lettuce.core.cluster.ClusterCommand.complete(ClusterCommand.java:63)
at io.lettuce.core.protocol.CommandHandler.complete(CommandHandler.java:654)
at io.lettuce.core.protocol.CommandHandler.decode(CommandHandler.java:614)
at io.lettuce.core.protocol.CommandHandler.channelRead(CommandHandler.java:565)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
at io.netty.channel.DefaultChannelPipeline
H
e
a
d
C
o
n
t
e
x
t
.
c
h
a
n
n
e
l
R
e
a
d
(
D
e
f
a
u
l
t
C
h
a
n
n
e
l
P
i
p
e
l
i
n
e
.
j
a
v
a
:
1410
)
a
t
i
o
.
n
e
t
t
y
.
c
h
a
n
n
e
l
.
A
b
s
t
r
a
c
t
C
h
a
n
n
e
l
H
a
n
d
l
e
r
C
o
n
t
e
x
t
.
i
n
v
o
k
e
C
h
a
n
n
e
l
R
e
a
d
(
A
b
s
t
r
a
c
t
C
h
a
n
n
e
l
H
a
n
d
l
e
r
C
o
n
t
e
x
t
.
j
a
v
a
:
379
)
a
t
i
o
.
n
e
t
t
y
.
c
h
a
n
n
e
l
.
A
b
s
t
r
a
c
t
C
h
a
n
n
e
l
H
a
n
d
l
e
r
C
o
n
t
e
x
t
.
i
n
v
o
k
e
C
h
a
n
n
e
l
R
e
a
d
(
A
b
s
t
r
a
c
t
C
h
a
n
n
e
l
H
a
n
d
l
e
r
C
o
n
t
e
x
t
.
j
a
v
a
:
365
)
a
t
i
o
.
n
e
t
t
y
.
c
h
a
n
n
e
l
.
D
e
f
a
u
l
t
C
h
a
n
n
e
l
P
i
p
e
l
i
n
e
.
f
i
r
e
C
h
a
n
n
e
l
R
e
a
d
(
D
e
f
a
u
l
t
C
h
a
n
n
e
l
P
i
p
e
l
i
n
e
.
j
a
v
a
:
919
)
a
t
i
o
.
n
e
t
t
y
.
c
h
a
n
n
e
l
.
n
i
o
.
A
b
s
t
r
a
c
t
N
i
o
B
y
t
e
C
h
a
n
n
e
l
HeadContext.channelRead(DefaultChannelPipeline.java:1410) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) at io.netty.channel.nio.AbstractNioByteChannel
HeadContext.channelRead(DefaultChannelPipeline.java:1410)atio.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)atio.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)atio.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)atio.netty.channel.nio.AbstractNioByteChannelNioByteUnsafe.read(AbstractNioByteChannel.java:163)
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:714)
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:650)
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:576)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:745)`
解决方案:
spring:
application:
name: lizz-gateway
#***********************redis***********************
redis: #redis配置
lettuce: #lettuce客户端配置
pool: #连接池配置
max-active: 50 # 连接池最大连接数(使用负值表示没有限制) 默认 8
max-wait: 10 # 连接池最大阻塞等待时间(使用负值表示没有限制) 默认 -1
max-idle: 20 # 连接池中的最大空闲连接 默认 8
min-idle: 10 # 连接池中的最小空闲连接 默认 0
cluster:
refresh: #集群刷新
adaptive: true #自动刷新集群 默认false关闭
# period: 10M #定时刷新
timeout: 1000 # 连接超时时间(毫秒)
cluster: #集群配置
nodes: #集群节点
- 10.2.55.88:7001
- 10.2.55.88:7002
- 10.2.55.88:7003
- 10.2.55.88:7004
- 10.2.55.88:7005
- 10.2.55.88:7006
max-redirects: 3 #集群中重定向最大次数
配置cluster.refresh.adaptive等于true,自动刷新集群
如果上面方案不可用,则在pom.xml新增依赖
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.7.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<exclusions>
<exclusion>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
</exclusion>
</exclusions>
</dependency>
重启服务即可,以后就不出出现了