redis 主从、哨兵、集群

本文详细介绍了Redis的三种高可用方案:主从模式、哨兵和集群模式。主从模式实现读写分离,哨兵提供故障转移,集群模式基于分布式思想,利用一致性哈希分配数据,确保高可用性和数据一致性。

目录

一、主从模式

二、 哨兵

三、集群(cluster)模式


一、主从模式

即slave节点保存master数据副本,可以读写分离,从slave节点读,缓解了master的节点的读写压力

二、 哨兵

1. 基本过程:集群监控、消息通知,故障转移、配置中心

2. 具体过程: 多个sentinel节点监控master、slave节点,当一个sentinel节点发现master节点出现故障宕机时(主观下线),它就会去通知其他sentinel节点,当认为master节点故障的sentinel节点数大于quroum时(客观下线),sentinel发起领导者选举,选出一个sentinel节点进行去进行主从切换。

3. 优点:保证了一定的高可用性,当master宕机时,会有slave节点补上,选中的slave节点变成master节点,宕机的master节点变成slave节点

4. 问题:

  • 主备切换的数据丢失问题:

min-slaves-to-write 1
          min-slaves-max-lag 10 

配置要求至少有一个slave节点,复制和同步master节点的数据延迟不超过10s。若所有slave,数据复制和同步超过10s,   master节点就不会再接受任何请求。

  • slave选择标准:

跟master断开连接的时长

slave优先级

复制offset

run id

三、集群(cluster)模式

集群主要基于分布式的思想了,维护多个master节点,一般在不同机器上,每个master节点保存一部分数据。

1. 一致性哈希->hash slot

CRC16(key)%16384,有16384个slot(槽),每个master节点会分配到一定数量的槽。

2. gossipe协议

meet:加入集群后,第一次与集群里的其他节点进行通讯,通知其它节点,该节点加入了集群。

ping:发送ping消息时,可以携带自身和其他节点的信息,会有一个cluster_node_timeout的时间,当超过cluster_node_timeout还没得到pong回应时,则会认为这个节点宕机,并且会通知其他节点。当半数以上的节点都认为其宕机,则该节点会客观下线。

pong:返回ping和meet,包含自己的状态和其他信息

fail:某个节点判断另一个节点fail后,就发送fail给其他节点,通知其他节点,指定的节点宕机啦!

3. ask、move重定向及smart client

当集群扩容或缩容的时候,就会有slot进行迁移。这时若有client进行请求,就会出现数据所在的slot不在当前访问节点上,因此要进行重定向。

ask:在slot迁移还未完成时

move:slot迁移已经完成

smart client:会在client本地缓存一个 hashslot->node映射表,当要查找某个数据时,通过CRC16(key)%16384得到slot位置,然后通过查询这个映射表,确定到去哪个node进行请求。当请求同时该节点有slot在迁移,若是正在迁移过程中,会返回ask,这时client不会更新映射表,而是再次到目标节点进行请求,直到迁移完成,节点返回move,此时更新映射表,并将到新的对应得node进行请求。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值