redis分片

http://www.javashuo.com/article/p-zeolisey-kc.htmlphp

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处连接和本声明。
本文连接:http://www.javashuo.com/article/p-zeolisey-kc.html
转载:http://blog.csdn.net/shmnh/article/details/72868328html

Redis集群的目的是实现数据的横向伸缩,把一块数据分片保存到多个机器,能够横向扩展数据库大小,扩展带宽,计算能力等。java

实现数据分片(集群)方式大体有三种:node

1)客户端实现数据分片redis

即客户端本身计算数据的key应该在哪一个机器上存储和查找,此方法的好处是下降了服务器集群的复杂度,客户端实现数据分片时,服务器是独立的,服务器以前没有任何关联。多数redis客户端库实现了此功能,也叫sharding,这种方式的缺点是客户端须要实时知道当前集群节点的联系信息,同时,当添加一个新的节点时,客户端要支持动态sharding.,多数客户端实现不支持此功能,须要重启redis。另外一个弊端是redis的HA须要额外考虑。数据库

2)服务器实现数据分片ruby

其理论是,客户端随意与集群中的任何节点通讯,服务器端负责计算某个key在哪一个机器上,当客户端访问某台机器时,服务器计算对应的key应该存储在哪一个机器,而后把结果返回给客户端,客户端再去对应的节点操做key,是一个重定向的过程,此方式是redis3.0正在实现,目前处于beta版本, Redis 3.0的集群同时支持HA功能,某个master节点挂了后,其slave会自动接管。服务器

服务器端实现集群须要客户端语言实现服务器集群的协议,目前java,php,ruby语言多数有redis-cluster客户端实现版本。负载均衡

Redis Cluster原理http://www.cnblogs.com/foxmailed/p/3630875.htmlide

Redis Cluster 是Redis的集群实现,内置数据自动分片机制,集群内部将全部的key映射到16384个Slot中,集群中的每一个Redis Instance负责其中的一部分的Slot的读写。集群客户端链接集群中任一Redis Instance便可发送命令,当Redis Instance收到本身不负责的Slot的请求时,会将负责请求Key所在Slot的Redis Instance地址返回给客户端,客户端收到后自动将原请求从新发往这个地址,对外部透明。一个Key到底属于哪一个Slot由crc16(key) % 16384 决定。

关于负载均衡,集群的Redis Instance之间能够迁移数据,以Slot为单位,但不是自动的,须要外部命令触发。

关于集群成员管理,集群的节点(Redis Instance)和节点之间两两按期交换集群内节点信息而且更新,从发送节点的角度看,这些信息包括:集群内有哪些节点,IP和PORT是什么,节点名字是什么,节点的状态(好比OK,PFAIL,FAIL,后面详述)是什么,包括节点角色(master 或者 slave)等。

关于可用性,集群由N组主从Redis Instance组成。主能够没有从,可是没有从 意味着主宕机后主负责的Slot读写服务不可用。

一个主能够有多个从,主宕机时,某个从会被提高为主,具体哪一个从被提高为主,协议相似于Raft,参见这里。如何检测主宕机?Redis Cluster采用quorum+心跳的机制。从节点的角度看,节点会按期给其余全部的节点发送Ping,cluster-node-timeout(可配置,秒级)时间内没有收到对方的回复,则单方面认为对端节点宕机,将该节点标为PFAIL状态。经过节点之间交换信息收集到quorum个节点都认为这个节点为PFAIL,则将该节点标记为FAIL,而且将其发送给其余全部节点,其余全部节点收到后当即认为该节点宕机。从这里能够看出,主宕机后,至少cluster-node-timeout时间内该主所负责的Slot的读写服务不可用。

3)经过代理服务器实现数据分片

此方式是借助一个代理服务器实现数据分片,客户端直接与proxy联系,proxy计算集群节点信息,并把请求发送到对应的集群节点。下降了客户端的复杂度,须要proxy收集集群节点信息。Twemproxy是twitter开源的,实现这一功能的proxy。这个实现方式在客户端和服务器之间加了一个proxy,但这是在redis 3.0稳定版本出来以前官方推荐的方式。结合redis-sentinel的HA方案,是个不错的组合。

参考:http://www.zhizhihu.com/html/y2014/4590.html

http://www.cnblogs.com/foxmailed/p/3630875.html

http://itindex.net/detail/51037-redis-%E9%9B%86%E7%BE%A4
原文连接:http://www.javashuo.com/article/p-zeolisey-kc.html

相关文章
相关标签/搜索