本文参考了Redis的英文官方指南 http://redis.io/topics/cluster-tutorial
1. 集群功能
- 能够自动把数据切分到集群的各个节点
- 当集群中的部分节点故障或者无法与集群通讯时,集群仍然可以继续运作
2. 集群分片
Redis集群使用的是一种叫哈希槽(hash slot)的分片形式,而不是一致性哈希(consistent hashing),一个Redis集群有16384个hash slot,集群使用CRC16(key) % 16384 来计算一个key属于哪个hash slot。集群中的每一个节点都负责一部分hash slot。例如一个有3个节点的集群:
- 节点A负责0-5500 hash slot
- 节点B负责5501-11000 hash slot
- 节点C负责11001-16383 hash slot
把hash slot切分到集群的各个节点便于添加或者移除节点,例如,如果想添加一个新的节点D,那么集群只需要把A,B,C节点中的某些hash slot移动到节点D就ok了。类似地,如果想从集群移除节点A,那么集群只需要把节点A的所有hash slot移动到节点B和C就ok了,当节点A的所有hash slot都移动完毕后,就可以把节点从集群移除。因为把hash slots从一个节点移动到另外一个节点集群不会停止运作,所以添加、移除节点或者改变某个节点的hash slots比例,集群都不需要停机。
Redis集群支持多个key的操作,只要这些keys都在同一个执行的命令(或事
1. 集群功能
- 能够自动把数据切分到集群的各个节点
- 当集群中的部分节点故障或者无法与集群通讯时,集群仍然可以继续运作
2. 集群分片
Redis集群使用的是一种叫哈希槽(hash slot)的分片形式,而不是一致性哈希(consistent hashing),一个Redis集群有16384个hash slot,集群使用CRC16(key) % 16384 来计算一个key属于哪个hash slot。集群中的每一个节点都负责一部分hash slot。例如一个有3个节点的集群:
- 节点A负责0-5500 hash slot
- 节点B负责5501-11000 hash slot
- 节点C负责11001-16383 hash slot
把hash slot切分到集群的各个节点便于添加或者移除节点,例如,如果想添加一个新的节点D,那么集群只需要把A,B,C节点中的某些hash slot移动到节点D就ok了。类似地,如果想从集群移除节点A,那么集群只需要把节点A的所有hash slot移动到节点B和C就ok了,当节点A的所有hash slot都移动完毕后,就可以把节点从集群移除。因为把hash slots从一个节点移动到另外一个节点集群不会停止运作,所以添加、移除节点或者改变某个节点的hash slots比例,集群都不需要停机。
Redis集群支持多个key的操作,只要这些keys都在同一个执行的命令(或事