介绍
redis 主要是有三种集群模式:
- 主从模式
- 哨兵模式(Sentinel)
- Cluster模式(常用的集群模式)
我们本次主要完成的是Cluster模式,也是现在比较常用的一种模式。而主从模式和哨兵模式,制作一下简介介绍。
主从模式
一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。
用户请求主节点进行增、删、改操作,而查询则放到其他从节点。 满足 多查少写 的网络应用状态。
存在问题:
主从模式中,只存在一个主节点,而如果主节点发生单机故障,对于其他的从节点则可以正常获取数据,但无法进行的修改、删除、增加数据。高可用性提高不大。
贴个连接: redis 主从复制模式
哨兵模式
贴个连接:redis 哨兵模式
Cluster模式
我们主要来说一下Cluster模式,此模式至少需要6个redis服务完成,从redis3.0版本以后才可以使用。
redis 槽设置
在redis集群中,采用虚拟槽设置,共计16384个槽,cluster 负责维护,并平均分配到各个Master节点上面。当新增一个数据时,采用CRC16算法将数据分配到某个Master节点上。
槽示例
初始化Master
例如3个Master服务:
序号 | 槽范围 |
---|---|
1 | 0~5460 |
2 | 5461~10921 |
3 | 10921~16384 |
添加一个Master服务
如果这时候再加一个Master服务,则会各取三个序号中前一部分拼接成一个新的Master服务槽范围。
序号 | 槽范围 |
---|---|
1 | 1365~5460 |
2 | 6842~10921 |
3 | 12286~16384 |
4 | 0~1364 , 5461~6842 , 12286~16384 |
某个Master服务宕机
如果某个Master服务宕机了,会在他的从节点中挑选一个替代宕机的Master,槽节点不变。
序号 | 槽范围 |
---|---|
1 | 1365~5460 |
2 | 6842~10921 |
3 | 12286~16384 |
4(从) | 0~1364 , 5461~6842 , 12286~16384 |
Cluster 容错
在cluster中,节点之间通过gossip协议进行通信。A节点会发送PING消息给B节点,若是在cluster_node_timeout时长内没有收到B节点的回复消息,则A节点会判定B节点已经下线(只是A节点)了。
这时候,A节点会发起投票,会向集群广播B节点下线的消息。如果集群中的超过半数以上(所以Master最少为3台)的节点都认为B节点下线后,B节点就会真正的下线。然后会从B的从节点中挑选一个出来替代下线的B节点。
当B节点没有从节点的可以替代他时,集群就进入fail状态(槽点不完整)。
当半数以上的Master下线,不管有没有从节点代替,集群也会进入fail状态。