Redis CLuster主备切换、故障转移测试

redis版本5.0.5

测试redis Cluster主备切换、故障转移

  1. 下线一个从节点,此时它的主节点打印的日志

    image-20201208181906771

    集群状态

    image-20201208181932029

  2. 下线一台主节点,此时它的从节点打印的日志

image-20201208181725461

集群状态

image-20201208181958933

测试主备切换时客户端状态

第一步:查看当前集群状态

image-20201209101821781

可以看到六个节点都是可用状态,其中83.46637981.64上的6380的从节点,计划Kill掉81.64上的6380主节点,然后观察83.466379节点日志

第二步:kill掉81.64上的6380

10:11:25:kill掉81.64上的6380,可以看到其从节点很快提示连接主节点失败,并且开始一秒钟一次的重连操作

image-20201209102313423

此时查看集群的节点状态如下,可以看到槽 5461-10922在这个主节点上,此时整个reidis集群处于不可用状态

image-20201209102407738

10:12:24:应用程序报错,redis操作超时

image-20201209104034068

10:11:43 :在重连17次失败次数之后,从节点将主节点标记为失败,并且整个集群的状态切换为不可用,之后不甘心,又去尝试连接主节点

image-20201209102858890

10:12:03:在重连20次失败后,从节点打印日志,等待投票选举,但是没有达到多数赞成,于是继续重连之前的主节点

image-20201209103703376

10:12:14:提示选举失败,选举过期,又继续重连

image-20201209104224945

10:12:45:选举成功胜出,成为了新的主节点,整个集群的状态变为可用

image-20201209104408650

10:13:39:大概一分钟之后,redis客户端自动刷新了集群配置,成功连接上redis集群,此时主备切换和故障转移完成image-20201209104602379

此前项目中存在的问题

redis master宕机之后,会出现应用程序连接不上redis cluster的问题,需要重启服务才能解决

排查原因之后发现是spring boot 2.x版本默认使用了lettuce作为redis客户端,而lettuce默认是不开启自动刷新集群拓扑的,当redis master宕机并且集群完成故障转移/主从切换之后,客户端使用的还是之前错误的集群信息,就会导致应用程序一直连接不上redis集群。解决方案就是修改redis客户端配置,开启开启自适应刷新拓扑

配置文件如下

spring.redis.cluster.nodes=${redis.nodes}
spring.redis.password=${redis.pass}
spring.redis.timeout=60000
# 最大重定向次数
spring.redis.cluster.max-redirects=3
spring.redis.lettuce.pool.max-active=64
spring.redis.lettuce.pool.max-idle=16
spring.redis.lettuce.pool.min-idle=0
spring.redis.lettuce.pool.max-wait=60000ms
spring.redis.lettuce.shutdown-timeout=100ms

完整的配置类如下

import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.lettuce.core.cluster.ClusterClientOptions;
import io.lettuce.core.cluster.ClusterTopologyRefreshOptions;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.springframework.beans.factory.annotation
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值