最近公司打算做redis集群分片,研究了下redis 自带的clutesr 功能真的很强大,唯一的不足之处就是当其中一个分片服务器挂掉的话整个集群就会宕机,处于系统不可用状态
官方的解决方案是:redis搭建cluster分片服务起需要针对每台分片搭建主从配置方案,实现在被自动切换从而解决相关问题,但是主从的配置有需要搭建redis sentinel哨兵服务,导致整个集群变得越来越复杂维护成本越来越高,所以未来解决这个问题,就打算通过客户端分片的方式实现该功能,减少运维压力
翻阅资料发现java 有现成的jredis客户端分片方案,C#比较悲哀只能自己实现,其实jedis实现实现分片方式是通过一致性哈希算法实现的集群分片,装模做样照搬实现方式,备份通过两次哈希键值达到备份的目的
那么什么是一致性哈希算法呢?网上有很多资料,我在冷饭热炒一边,讲讲自己的理解
redis 是键值对数据存储的一种数据库,我们在存出数据的时候要想将数据均匀的分布在多个服务器上面,就需要一种算法既一致性哈希算法
什么是一致性哈希算法 ,冷饭热炒再次不再做详述,网上一堆资料,具体算法代码参见
https://git.oschina.net/hl.wei/RedisCluster.git
一致性哈希算法可以实现数据散列到均衡的服务器,能够最大限度的达到增减服务器的时候数据散列问题影响至最小,但是还有一种更稳定的方式可以实现这种问题,
加入我们有 A,B,C 三台服务器,我们在三台服务器上面每天搭建三个redis 实例,等于创建了 有9台redis 实例,这样当我们添加新机器的时候就可以直接映射一台服务器到 其中一个实例,对该服务器数据进行迁移达到数据零误差完美迁移的目的,