redis cluster

redis常用的使用模式是主从,主挂了启动从库,但是这个是单个实例的,如果处理数据量量级太大,(具体不好说没碰到过,几亿,几十亿条记录?),单个redis会遭遇读写性能的瓶颈。

redis cluster试图解决这个问题,来看下它的设计目标:

1,高性能,线性分布到1000+机器上

2,写入的安全度是可接受的:大部分写请求直接落到master节点,这样会保证写入是安全的

3,可用性:redis server机器down掉后,服务是可用的

对于3,如何保证可用性的?

每台redis server都有至少一个从节点,如果主节点down掉,自动启用从节点,从节点来保证服务是可用的(数据的同步可想象成msyql的binlog追加)。

如果主server,和对应的从server同时down掉,是会影响服务的。

 

细节1:redis实现了对于某些key强制写入相同的节点的能力。是hash tags技术

Redis Cluster implements a concept called hash tags that can be used in order to force certain keys to be stored in the same node.

细节2:在手工reshard的时候,multi操作在cluster模式中有时候会不可用,但是单个key操作总是可用的

However during manual reshardings, multi-key operations may become unavailable for some time while single keys operations are always available.

细节3:cluster不保证key能够放到不同的数据库上(因为redis支持选择database,类似于mysql),只会放在0号数据库上。cluster模式不支持select操作

Redis Cluster does not support multiple databases like the stand alone version of Redis, there is just database 0, and the SELECT command is not allowed.

细节4:如果检查redis的节点是否坏掉?

redis cluster bus就是解决这个问题的,redis的每个server节点都会主动探测其它所有节点的状态,如果down掉,可能会自动执行slave升级到master的动作。

redis的server状态和key的map是server端来管理维护的,redis的client理论上不用知道key是分布在哪个server node上的,但是如果client能缓存对应关系,性能提升是明显的

细节5:write safety未完成

细节6:fail的几种情况

fail1:大多数节点fail,整个系统fail

recovery:如果master节点fail,从节点升为master

fail2:如果所有的从节点被升为master,这个时候再有一个master fail,整个系统fail

参考:

http://www.redis.io/topics/cluster-spec

http://redis.io/topics/cluster-tutorial

posted on 2015-04-30 01:02  awildfish  阅读(455)  评论(0编辑  收藏  举报

导航