016redis3.0集群简介

来源:互联网 发布:网络运营商代理商 编辑:程序博客网 时间:2024/06/05 12:49
一、基本概念
1、redis集群是一个可以在多个节点之间进行数据共享的设施。redis集群提供了以下两个好处
1.1 将数据自动切分(split)到多个节点
1.2 当集群中的某一个节点故障时,redis还可以继续处理客户端的请求。

2、一个 Redis 集群包含 16384 个哈希槽(hash slot),数据库中的每个数据都属于这16384个哈希槽中的一个。集群使用公式 CRC16(key) % 16384 来计算键 key 属于哪个槽。集群中的每一个节点负责处理一部分哈希槽。这样的话就可以很方便的向集群中添加或者移除节点。(假设集群中有A B C 三个节点)

2.1 添加节点:如果要添加一个D节点到集群中,首先要把这个节点添加到集群,然后还需要将节点ABC中的某些哈希槽移动到节点D。
2.2 移除节点:如果要移除节点A,那么只需要把节点A中的所有哈希槽转移到节点B和节点C中,然后再移除空白节点A就可以了。

3、集群中的主从复制
集群中的每个节点都有1个至N个复制品,其中一个为主节点,其余的为从节点,如果主节点下线了,集群就会把这个主节点的一个从节点设置为新的主节点,继续工作。这样集群就不会因为一个主节点的下线而无法正常工作。
注意:如果某一个主节点和他所有的从节点都下线的话,redis集群就会停止工作了。
4、redis集群不保证数据的强一致性,在特定的情况下,redis集群会丢失已经被执行过的写命令
4.1 使用异步复制(asynchronous replication)是 Redis 集群可能会丢失写命令的其中一个原因
4.2 网络原因,如果网络断开时间太长,redis集群就会启用新的主节点,之前发给主节点的数据就会丢失。

二、redis cluster 现状

reids-cluster计划在redis3.0中推出,可以看作者antirez的声明:http://antirez.com/news/49 (ps:跳票了好久,今年貌似加快速度了),目前的最新版本见:https://raw.githubusercontent.com/antirez/redis/3.0/00-RELEASENOTES

作者的目标:Redis Cluster will support up to ~1000 nodes. 赞...

目前redis支持的cluster特性(已测试):

1):节点自动发现

2):slave->master 选举,集群容错

3):Hot resharding:在线分片

4):集群管理:cluster xxx

5):基于配置(nodes-port.conf)的集群管理

6):ASK 转向/MOVED 转向机制

三 redis cluster 架构

1)redis-cluster架构图

 

架构细节:

(1)所有的redis节点彼此互联(PING-PONG机制),内部使用二进制协议优化传输速度和带宽.

(2)节点的fail是通过集群中超过半数的节点检测失效时才生效.

(3)客户端与redis节点直连,不需要中间proxy层.客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可

(4)redis-cluster把所有的物理节点映射到[0-16383]slot上,cluster 负责维护node<->slot<->value

2) redis-cluster选举:容错

 

(1)领着选举过程是集群中所有master参与,如果半数以上master节点与master节点通信超过(cluster-node-timeout),认为当前master节点挂掉.

(2):什么时候整个集群不可用(cluster_state:fail)? 

    a:如果集群任意master挂掉,且当前master没有slave.集群进入fail状态,也可以理解成集群的slot映射[0-16383]不完成时进入fail状态. ps : redis-3.0.0.rc1加入cluster-require-full-coverage参数,默认关闭,打开集群兼容部分失败.

    b:如果集群超过半数以上master挂掉,无论是否有slave集群进入fail状态.

  ps:当集群不可用时,所有对集群的操作做都不可用,收到((error) CLUSTERDOWN The cluster is down)错误
参考文章: http://hot66hot.iteye.com/blog/2050676
0 0
原创粉丝点击