复制架构,Redis Sentinel分析

存储高可用,一般采用复制架构,复制架构,需要关注故障架构和状态决策2个要点


复制架构通用关注点


数据复制


复制格式


格式

优点

缺点

举例

命令

数据量小

可能存在数据不一致

Mysql 的statement同步方式,按commit顺序同步,可能存在数据不一致




Redis 的 AOF,每个操作室幂等的。




MongoDB的oplog ,oplog中每个操作室幂等的

数据

保证数据一致性

数据量大

Mysql的row模式

文件

保证生成文件时数据一致性

数据量大

Redis的RDB



复制的时候,数据可能有变化



复制方式


同步方式

特点

适用场景

同步

最强一致性

主备,主从架构


故障容忍度低



写入性能低


异步

会出现,数据不一致

数据存储集群


故障容忍度高



写入性能高


半同步

同步,异步的折中方案

数据存储集群

多数同步

数据一致性强

例如要求,分布式一致性


故障容忍度高

例如:OceanBase


写入性能低,实现复制



最强高可用



状态决策


决策方式

特点

适用场景

依靠决策者(利用zookeepr等)

决策简单

大多数业务


数据一致性中等



决策者本身高可用复杂


协商式

一般采用双通道,心跳机制

内部系统,网络设备


数据一致性弱


标准算法式

决策过程复杂,一般采用标准算法 Raft,ZAB,Paxos等

余额,库存,或金融场景


数据一致性最强



可用性最高,一般使用quorum 防止脑裂



Redis Sentinel 分析


下图,是Redis,Sentinel 的架构图图:


Sentinel 是决策者, master 是主库,follow 是从库,下面按照数据复制,状态决策2个角度进行分析



数据复制


复制格式


AOF 命令


redis是先写内存,后写AOF日志,不阻塞写操作


同步到磁盘的策略



AOF 重写 针对AOF文件大,redis优化方式



复制方式



注:
   Redis的WAIT命令,可确保指定数量的Redis副本已确认

   在故障切换期间,已确认的写入可能会丢失,取决于Redis持久性的配置



状态决策,决策者:sentinel


Sentinel 作用


监控



选主(筛选+3轮打分)


筛选


down-after-milliseconds * 10 以内的作为候选主库


down-after-milliseconds 主从库断连的最大连接超时时间。超过10倍,认为该候选库网络不好,剔除


打分



master_repl_offset,master写入的点位


slave_repl_offset 从库复制的点位



通知


让从库执行replicaof,与新主库同步


通知client 连接新的主库


Sentinel Leader 选举流程


Raft 协议的实现,大致流程如下:


  1. 哨兵给其他哨兵发送命令,表明希望由自己成为leader,并让所有其他哨兵进行投票
  2. 每个哨兵选自己,并且根据先到先得的规则,接受/拒绝其他哨兵成为leader的请求
  3. 作为Leader的2个条件 拿到半数以上的赞成票 ,拿到的票数还要大于等于quorum


注意:每个哨兵的quorum 和 down-after-milliseconds 必须一样
展开阅读全文

页面更新:2024-04-23

标签:架构   主从   哨兵   决策者   重写   故障   命令   性能   方式   数据

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top