redis 分片技术
大约 2 分钟
redis 分片技术
最多1000节点
集群节点间使用异步复制
Keys hash tags, 用来将多个(相关的)key分配到相同的hash slot中,Redis Cluster中实现multi-key操作的基础
每个节点维护着集群内其他节点的以下信息
redis-cli cluster nodes
node id, address:port, flags, last ping sent, last pong received, configuration epoch, link state, slots
Cluster总线
每个Redis Cluster节点有一个额外的TCP端口用来接受其他节点的连接
该端口往往是client连接的tcp端口+10000(端口6379监听客户端连接,那么它的集群总线端口16379也会被打开)
N个节点的集群中,每个节点由N-1个TCP传出连接,和N-1个TCP传入连接
节点使用gossip协议和配置更新机制来避免在正常情况下节点之间交换过多的消息
Moved 重定向
- 槽命中:直接返回结果
- 槽不命中:键不在节点中,向客户端发送一个Moved重定向,客户端再一次发送命令官方给目标节点
cluster keyslot keyName # 得到keyName的槽
ASK 重定向
集群伸缩会导致槽迁移
去源节点访问时,此时数据已经可能已经迁移到了目标节点
回复Ask重定向
客户端重新发送请求到目标节点
扩容 && 缩容
- 确定哪些槽需要被迁移到目标节点
- 然后获取槽中key
- 将槽中的key全部迁移到目标节点
- 向集群所有主节点广播槽(数据)全部迁移到了目标节点
为什么Redis Cluster中不建议使用发布订阅呢
publish命令都会向所有节点(包括从节点)进行广播,加重了带宽负担
为什么Redis Cluster的Hash Slot 是16384=16k
bitmap压缩后是2k(2 * 8 (8 bit) * 1024(1k) = 16K),也就是说使用2k的空间创建了16k的槽数