环境:
redis cluster集群分别在三个ip上部署了9个节点(7001-7009),三个主节点六个从节点;节点中主从数据同步确保正常;再在三个ip上部署了sentinel26379,sentinel26380,sentinel26381三个哨兵;
客户端连接:
- 使用ServiceStack组件 + .NET CORE 6.0;使用的哨兵+卡槽计算方式创建连接(ServiceStack官网信息说不支持redis cluster集群分区模式连接,要用redis sentinel哨兵模式创建连接,如果要用redis cluster集群分区模式得客户端代码实现,过程比较复杂)。
- 备用方案csredis组件 + .NET CORE 6.0;支持redis cluster集群分区和redis sentinel哨兵模式创建连接。
- 备用方案StackExchange组件 + .NET CORE 6.0;支持redis cluster集群分区和redis sentinel哨兵模式创建连接。
故障现象:
一、在csredis组件下出现的故障现象
在测试用例高压状态下手动kill掉当前应用命中的主节点,在配置的主从切换时间内没有顺利切换成功。
下例截图是使用csredis组件进行分析(这组件可以在控制台直观的显示出节点的状态和切换情况)
这个是在Redis Sentinel创建的连接
官网例子
我们的tcp应用
第一步先确认redis节点的状态
上图可以看出目前主节点是7001,7007,7008
第二步再确认sentinel哨兵的监控状态
上图可以看出哨兵监控到的主节点信息状态是正常的;
第三步启动tcp应用程序进行测试用例压测