shardedjedis单分片挂掉整个集群不可用问题解决

本文介绍ShardedJedis作为Redis分片集群的一种方式,并提出针对其原有实现中存在的问题进行的改进措施,包括避免连接失败导致正常节点被销毁的情况,通过加入失效节点集合来提高系统的稳定性和响应速度。

shardedjedis是用来做redis分片集群的方式之一,根据redis key通过一致性哈希算法找到选择操作的redis服务分片。它是基于apache的开源项目通用对象管理池实现的,需要时从pool中获取,用完时放回到pool中(详情见http://www.cnblogs.com/chenjian5/p/5149312.html )。

输入图片说明

在官方的实现中有一个问题当一个jedis(tcp client)创建连接失败或连接失效时抛异常(心跳检查或者使用时检查),池对象会被销毁,导致另一个正常的jredis(tcp client)也一块被销毁了。同理如果一个redis服务分片挂掉所有的池对象到该redis分片服务的jedis(tcp client) 都不可用以至于所有的池对象都被销毁。进而导致整个集群不可用。

因此本项目( https://git.oschina.net/zhanggaofeng/redis-proxy )针对该问题进行二次开发,池对象创建连接失败或连接失效抛异常时(心跳检查或者使用时检查),不会被销毁并加入到一个失效节点集合中,利用redis心跳检查(配置必须开启)失效节点和失效节点恢复(从失效节点中移除)。每次操作获取时首先判断根据key获取的jedis是否失效并快速失败返回(因为每次jedis操作前会判断tcp是否连接并尝试连接,每次回耗时很长特别是redis服务分片挂的时候),达到快送响应的目的。
增加redis连接失效和恢复报警。

转载于:https://my.oschina.net/u/1176903/blog/822613

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值