Redis学习(Redis分片集群)
Redis分片集群
Redis主从虽然解决了高可用,高并发读的问题,但是依然有问题没有解决
- 海量数据存储
- 高并发写
分片集群特征
- 集群中有多个master,每个master保持不同数据
- 每个master都可以有多个slave节点
- master之间通过ping监测彼此健康状态
- 客户端请求可以访问集群任意节点,最终都会被转发到正确节点
散列插槽
Redis会把每一个master节点映射到0~16383共16384个插槽上
数据key不是与节点绑定,而是与插槽绑定,Redis会根据key的有效部分计算插槽值,key分为两种情况
- key包含{},且{}不为空,{}中的部分就是有效部分
- key中不包含{},那么整个key都是有效部分
数据与插槽绑定好处就是节点宕机之后还能够不丢失数据并且快速恢复,并且方便数据转移
Redis判断哪个key应该在哪个实例上
- 将16384个插槽分配到不同的实例
- 根据key的有效部分计算哈希值,对16384取余
- 余数作为插槽,寻找插槽所在的实例
集群伸缩
就是添加或者移除节点
命令为
add-node new_host:new_port existing_host:existing_port
reshard命令可以重新分配插槽
故障转移
这里就不需要哨兵机制
1.该实例与其它实例失去链接
2.疑似宕机
3.确定下线,自动提升一个slave为新的master
数据迁移
利用cluster failover命令可以手动让某个master宕机,切换到执行cluster failover命令的slave节点,实现无感知的数据迁移
流程图如下: