当前位置: 首页 > news >正文

OceanBase 3.X 高可用 (一)

OceanBase 3.X 高可用(一)

一、分布式核心

OceanBase 3.x 采用的是paxos 协议,与raft协议相比。其复杂程度高,实现技术难度大。

Paxos 协议允许事务日志乱序发送,顺序提交。raft允许事务顺序发送,顺序提交。相比之下,paxos协议的事务执行速度将快于raft协议。

Paxos 与 Raft 都对节点网络延迟与时钟同步有要求,Paxos对网络抖动,性能影响方面都优于raft协议。
Raft算法认为各副本都是对等的,那么在leader选举机制上会弱于Paxos(会根据系统硬件,资源配置,负载均衡进行判断)。

二、Leader 选举

1.Leader选举会由其中一台Server 充当提议者,其它Server 充当 接受者。提议者会向充当者发送提议【编号与value】,如果充当者中的大多数都接收到了消息并进行了回复,则提议者当选为Leader。

2.当选Leader的Server会将【编号与value】发送给所有的接受者,如果多数接受者返回了AcceptAck(),说明大多数接受者已认同。

3.Leader 这个提议者将向所有的接受者发送Accept【编号与value】。

感觉上有点偏向TCP的三次握手。

多个Server 当选 为Leader的问题(相近的时间内,多个Server完成了上面动作),产生脑裂问题的解决办法:

Paxos 协议因为是基于时钟同步的(时钟也是集群)。
在无主的情况下,第一个Server当选为Leader,会存在一个lease(租约时间,未过期状态下)。
当有Leader存在租约时间且小于其Server中的leader lease小(且不过期的情况下),则只会认为拥有最小lease的Server充当Leader。

突然联想到了注册中心实现分布式锁的原理(比如zookeeper)。

三、Leader 三种改选类型(需要考虑健康程度,硬件优势)

MAX_DELAY=100ms
MAX_TST=200ms

NTP 小于 100ms
Server 之间小于 200ms

1.有主连任:
在lease租期内,自我推荐,拥有优先权(其它Server默认其有优先权)。

2.无主选举:
1.所有的follow Observer 会发起devote_prepare(相当于当选意愿,包含了自己想要当选的权重)。
2.所有的follow Observer 在交换意愿后,推举最大意愿的follow Observer 为Leader,并向其发送devote_prepare消息(告诉最大意愿的follow Observer当选了)。且意愿低的follow observer会记录unconfirmed_leader_lease。
3.当多数派都选择了统一个Server,Server就要开始Leader上任了 ,并将好消息(成功当选)广播给所有的follow observer,follow observer们就默默记录Leader_lease了(相当于备案,防止自己不长眼,自己造时势力,准备谋反,可惜天意天命不在身呀)。
4.Leader 选举完成,开始清理所有的选举产生的临时状态信息(有点卸磨杀驴,抹掉痕迹,然后其他人感觉Leader是寿命于天、既受永昌)。

四、Leader 日志同步

1.app 发起dml ,leader 记录dml到memstore与clog,clog同步到其它follower中并重放至memstore。
2.app 发起commit,leader中的clog开始落盘,同时其它follower也开始落盘,当大多数follower都落盘OK ,则app将认为已执行成功。

因为Paxos的原因,日志是乱序发送,顺序提交。

五、Paxos如何保证一致性

在这里插入图片描述

严重:
多数派节点宕机:此时服务中断,需要重启宕机进行副本恢复。
集群全部宕机:此时服务中断,需要重启宕机进行副本恢复。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 利用git将项目上传到github
  • 图表示学习中的Transformer:Graphormer的突破
  • idea怎么快速生成get set方法,快捷键是什么?
  • MySQL—视图详解
  • 【结构型】树形结构的应用王者,组合模式
  • ubuntu安装无线网卡驱动(非虚拟机版)
  • 安卓13修改设置设备型号和设备名称分析与更改-android13设置设备型号和设备名称更改
  • 【计算机网络篇】物理层
  • 【Android】使用Room数据库解决本地持久化
  • 配置win10开电脑时显示可登录账号策略
  • ER论文阅读-Incomplete Multimodality-Diffused Emotion Recognition
  • MySQL 8 查看 SQL 语句的执行进度
  • C++之初识STL(概念)
  • GitLab 迁移后 Token 失效解决方法
  • java项目之城镇保障性住房管理系统(源码+文档)
  • dva中组件的懒加载
  • ES6 学习笔记(一)let,const和解构赋值
  • extract-text-webpack-plugin用法
  • Javascript弹出层-初探
  • Linux快速复制或删除大量小文件
  • magento 货币换算
  • Otto开发初探——微服务依赖管理新利器
  • 前端攻城师
  • 前端技术周刊 2019-02-11 Serverless
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 线上 python http server profile 实践
  • 协程
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • 积累各种好的链接
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • ​【经验分享】微机原理、指令判断、判断指令是否正确判断指令是否正确​
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • #git 撤消对文件的更改
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (C#)获取字符编码的类
  • (ISPRS,2021)具有遥感知识图谱的鲁棒深度对齐网络用于零样本和广义零样本遥感图像场景分类
  • (java)关于Thread的挂起和恢复
  • (每日一问)计算机网络:浏览器输入一个地址到跳出网页这个过程中发生了哪些事情?(废话少说版)
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (十六)、把镜像推送到私有化 Docker 仓库
  • (四)事件系统
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • .desktop 桌面快捷_Linux桌面环境那么多,这几款优秀的任你选
  • .Net Core与存储过程(一)
  • .NET/C# 使用 SpanT 为字符串处理提升性能
  • .NET开源快速、强大、免费的电子表格组件
  • .net利用SQLBulkCopy进行数据库之间的大批量数据传递
  • .Net下使用 Geb.Video.FFMPEG 操作视频文件
  • @ModelAttribute使用详解
  • @RequestMapping 的作用是什么?
  • [2021 蓝帽杯] One Pointer PHP
  • [android] 天气app布局练习
  • [AUTOSAR][诊断管理][ECU][$37] 请求退出传输。终止数据传输的(上传/下载)
  • [BJDCTF2020]Easy MD51
  • [C++]运行时,如何确保一个对象是只读的