OceanBase集群技术架构

这篇具有很好参考价值的文章主要介绍了OceanBase集群技术架构。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

说明

  • 本文章学习自OceanBase官方培训资料,仅供学习、交流

一 Paxos协议与负载均衡

1.1 数据分区与分区副本

分区

  • 当一个表很大的时候,可以水平拆分为若干个分区,每个分区包含表的若干行记录。根据行数据到分区的映射关系不同,分为hash分区,List分区(按列表),range分区(按范围)等
  • 每一个分区,还可以用不同的维度再分为若干分区,叫做二级分区
  • 分区是OceanBase数据架构的基本单元,是传统数据库的分区表在分布式系统上的实现

副本

  • 为了数据安全和提供高可用的数据服务,每个分区的数据在物理上存储多份,每一份叫做分区的一个副本
  • 副本根据负载和特定的策略,由系统自动调度分散在多个Server上。副本支持迁移、复制、增删、类型转换等管理操作

  • 例如,交易记录表,按照用户ID分为3个hash分区(红、蓝、黄),每个一级hash分区再按照交易时间分为4个range分区
    OceanBase集群技术架构,OceanBase,oceanbase,架构

1.2 副本类型

OceanBase集群技术架构,OceanBase,oceanbase,架构
根据存储数据种类的不同,副本有几种不同的类型,以支持不同业务在在数据安全,性能伸缩性,可用性,成本等之间进行取舍折中

  • 全能型副本:目前支持的普通副本,拥有事务日志,MemTable和SSTable等全部完整的数据和功能。它可以随时快速切换为leader对外提供服务
  • 日志型副本:只包含日志的副本,没有MemTable和SSTable。它参与日志投票并对外提供日志服务,可以参与其他副本的恢复,但自己不能变为主提供数据库服务。因为日志型副本所消耗的物理资源(CPU、内存、磁盘)更少,它可以有效降低最后一副本机器的成本,进而降低整个集群的总体成本
  • 只读型副本:包含完整的日志,MemTable和SSTable等,但是它的日志比较特殊。它不作为paxos成员参与日志的投票,而是作为一个观察者实时追赶paxos成员的日志,并在本地回放。这种副本可以在业务对读取数据的一致性要求不高的时候提供只读服务。因其不加入paxos成员组,又不会造成投票成员增加导致事务提交延时的增加
类型 Log MemTable SSTable 数据安全
全能型 有,参与投票
日志型 有,参与投票
只读型 有,但不属于paxos组,只是listener
  • 一个分区在一个zone中最多有一个全功能或日志型副本。只读型副本在同一个zone可以有多个

1.3 多副本一致性协议

  • 以分区为单位组建Paxos协议组:每个分区都有多份副本(Replica),自动建立Paxos组,在分区级用多副本保证数据可靠性和服务高可用,数据管理更加灵活方便
    OceanBase集群技术架构,OceanBase,oceanbase,架构
  • 自动选举主副本:OB自动生成多份副本,多副本自动选举主副本,主副本提供服务(如图黄色副本供应用访问,蓝色副本用于备份)

1.4 自动负载均衡

  • 自动负载均衡:主副本均匀打散到各个服务器中,使得各个服务器都能承载业务流量。(如图应用1、2、3读请求分布路由到不同的OB Server)
  • 每台OBServer相互独立:每台OBServer均可以独立执行SQL,如果应用需要访问的数据在不同机器上OBServer自动将请求路由至数据所在的机器,对业务完全透明(如应用2->P6->P7/P8)
    OceanBase集群技术架构,OceanBase,oceanbase,架构

1.5 数据持久化

通过多副本同步Redo Log确保数据持久化

  • Paxos组成员通过Redo-Log的多数派强同步,确保数据的持久化
  • Leader无需等待所有Follower的反馈,多数派完成同步即可向应用反馈成功

  1. 应用写数据到P2分区。Zone2-OB Server1的P2为主副本(Leader),承接业务需求
  2. 将Redo-Log同步请求发送到Zone1-OB Server1和Zone3-OB Server1中的P2从副本(Follower)
  3. 任何一个Follower完成Redo-Log落盘并将响应返回给Leader后,Leader即认为Redo-Log完成强同步,无需再等待其它Follower的反馈
  4. Leader反馈应用操作完成
    OceanBase集群技术架构,OceanBase,oceanbase,架构

1.6 智能路由

  • OB Proxy为应用提供智能路由服务,应用透明访问
    OceanBase集群技术架构,OceanBase,oceanbase,架构
    高效路由转发
  • 对SQL做基本解析,确定对应Leader所在机器
  • 反向代理,将请求路由至对应Leader;Leader位置无法确定时随机选择OB Server
  • 轻量SQL解析 + 快速转发,保证高性能,单OB Proxy每秒转发百万次请求

“非”计算节点,无状态

  • 每个OB Proxy是一个“无状态”的服务进程,不做数据持久化,对部署位置无要求
  • OB Proxy不参与数据库引擎的计算任务,不参与事务(单机 or 分布式)处理
  • 多个OB Proxy之间无联系,可通过F5/SLB组成负载均衡集群
  • 不需要独立服务器,可以与OB Server共用一台服务器,如果应用对实时性要求高,也可以将OB Proxy部署到应用服务器中

Primary Zone

  • 通过设置Primary Zone,将业务汇聚到特定Zone
    OceanBase集群技术架构,OceanBase,oceanbase,架构
  • 通过为不同的租户配置不同的Primary Zone,可以将业务流量集中到若干Zone中,减少跨Zone及跨服务器的操作。Zone List,逗号两侧优先级相同,分号左侧优先级高于右侧

  • Primary Zone有租户、数据库和表不同的级别
    OceanBase集群技术架构,OceanBase,oceanbase,架构
  • 如无特殊指定,自动继承上级对象的primary_zone:database继承租户的primary_zone设置,table继承database的primary_zone设置
  • database和table可以指定各自的primary_zone,不必和上一级对象的设置保持一致;提供更加灵活的负载均衡策略

1.7 Table Group

  • Table Group,将多个表的相同分区ID的主副本聚集在一个OB Server中,减少分布式事务引入的开销
    OceanBase集群技术架构,OceanBase,oceanbase,架构
  • 如果多个表的分区方式完全相同(分区类型、分区键个数、分区数量等) ,可以在逻辑上将这些表归属到同一个Table Group中,以影响动态负载均衡的策略
  • 同一个Table Group中的所有表,分区ID(partition_id)相同的所有分区,它们的leader在同一个observer上;在不影响全局负载均衡的前提下,可有效减少分布式事务引入的跨机访问开销
  • 如果负载均衡被打破(服务器故障后、扩容缩容等),Table Group中的所有表会作为一个整体来调整分区分布和leader分布
  • 动态创建和删除,并且对上层应用完全透明
  • 如果租户的unit_num=1且primary_zone只有一个zone,不需要tablegroup

  • Table Group举例
    OceanBase集群技术架构,OceanBase,oceanbase,架构

二 动态扩容和缩容

2.1 动态水平扩展

OceanBase集群技术架构,OceanBase,oceanbase,架构

  • 假设一个三副本的集群,每个Zone都有3000个分区的副本,扩容后,OceanBase自动将1500个分区的副本(含主副本)迁移到新服务器中的资源Unit中

2.2 动态扩容和缩容技术实现

  • 假设一个表有8个分区,扩容后,在每个Zone内,OceanBase自动将4个分区的副本(含有主副本)迁移到新服务器的租户资源单元
    中,实现Zone内各个OB Server的负载均衡。整个扩容过程是在线动态扩容,对业务无感知,可以降低运维难度
    OceanBase集群技术架构,OceanBase,oceanbase,架构

2.3 扩容基本步骤

  1. 为每个zone添加新的物理机器
  2. 在每台新添加的机器上,以正确的方式启动observer服务
  3. 为每个新添加的observer进程执行alter system add server;命令,将observer服务添加到集群中
  4. 执行alter resource pool unit_num = ;命令,扩充资源池中的unit个数
  5. OceanBase自动启动“rebalance”过程,将部分数据从旧的unit在线复制到新的unit上。此过程可能会花费数十分钟,具体时间取决于数据量
  6. 每个分区的数据复制完成后,OceanBase自动将服务切换到新的unit上,并删除旧unit中分区上的数据数据复制的过程是否已经完成。查看__all_virtual_sys_task_status表,是否有comment like '%partition migration%'的任务

2.4 租户扩容

  • 租户扩容:通过扩大资源池规格实现纵向扩展
    OceanBase集群技术架构,OceanBase,oceanbase,架构
  • 租户扩容 – 通过增大资源池Unit Num实现横向扩展
    OceanBase集群技术架构,OceanBase,oceanbase,架构
  • 租户扩容 – 增加系统可用性三副本扩容至五副本
    OceanBase集群技术架构,OceanBase,oceanbase,架构

2.5 缩容基本步骤

  1. 执行alter resource pool unit_num = ;命令,缩减资源池中的unit个数
  2. OceanBase自动启动“rebalance”过程,将一部分数据从待下线机器上的unit在线复制到同zone内其它机器的unit上
  3. 每个分区的数据复制完成后,OceanBase自动将服务切换到新的unit上,之后删除待下线机器的unit中分区上的数据
  4. 为每台要下线的机器执行alter system delete server;命令,完成机器下线的操作
  5. 手工终止已下线机器上的observer进程,并执行关机等操作
  • 数据复制的过程是否已经完成?查看__all_virtual_sys_task_status表,是否有comment like '%partition migration%'的任务

三 数据可靠及高可用

3.1 灾难恢复能力等级

  • 系统发生故障(掉电、宕机、进程误杀等)时,业务如何考察系统的“高可用”能力
  • RTO(Recovery Time Objective)恢复时间目标:在故障或灾难发生之后,数据库停止工作的最高可承受时间,这是一个最大可容忍时限,必须在此时限内恢复数据=服务可用性
  • RPO(Recovery Point Object)恢复点目标:这是一个过去的时间点,当灾难或紧急事件发生时,数据可以恢复到的时间点,是业务系统所能容忍的数据丢失量=数据可靠性
    OceanBase集群技术架构,OceanBase,oceanbase,架构
  • OceanBase RPO=0 RTO<30秒,意味着当少数派故障时,OceanBase能够在30秒内恢复业务,且不会丢失任何数据。

3.2 高可用性

  • OceanBase基于通用PC服务器提供高可用性
    OceanBase集群技术架构,OceanBase,oceanbase,架构
    少数派故障时自动实现服务接管,保证服务高可用
  • 举例:Leader副本故障
    OceanBase集群技术架构,OceanBase,oceanbase,架构
  • 假设Zone3-OB Server2故障,P7 Leader主副本无法正常提供服务
  • 位于Zone1的P7 Follower从副本和Zone2的P7 Follower从副本将重新选出新的Leader,并接管业务
  • 整个过程无需人工干预,自动完成
  • Zone3-OB Server2故障恢复后,P7副本首先追平数据,数据追平后,继续参加Paxos组,一般情况下,该P7副本还会是主副本(以实现负载均衡)

举例:Follower从副本故障

  • 假设Zone3-OB Server2故障,从副本(P5,P6,P8) 本来就不承接业务,剩下的2个副本依然满足多数派,依然可以正常提供业务,对业务无影响
  • 待从副本所在服务器故障恢复后,追平数据后继续加入Paxos组后依然是从副本

3.3 OB Server进程异常处理策略

  • 如果OB Server进程异常终止,通过通过server_permanent_offline_time参数的值来判定是否进行“临时线下”处理。
    OceanBase集群技术架构,OceanBase,oceanbase,架构
  • 由于进程异常终止时间不长,异常进程可能很快就可以恢复,因此OceanBase暂时不做处理,以避免频繁的数据迁移
  • 此时P5-P8只有两份副本,虽然依然满足多数派,可以保证RPO=0,但存在风险
    OceanBase集群技术架构,OceanBase,oceanbase,架构
  • OceanBase会将机器做“临时下线”处理,从其它zone的主副本中,将缺失的数据复制到本zone内剩余的机器上(需要有足够的资源),以维持副本个数
  • 异常终止的observer进程恢复后会自动加入集群,如果已经做过“临时下线”处理,需要从本zone内其它机器上(或者其它zone内)将unit迁移过来

OceanBase集群技术架构,OceanBase,oceanbase,架构

3.4 OceanBase容灾

3.4.1 同城三机房

  • 同城3个机房组成一个集群(每个机房是一个Zone),机房间延迟一般在0.5 ~ 2ms之间
  • 机房级灾难时,剩余的两份副本依然是多数派,依然可以同步Redo-Log日志,保证RPO=0
  • 但无法应对城市级的灾难
    OceanBase集群技术架构,OceanBase,oceanbase,架构

3.4.2 三地五中心五副本

OceanBase集群技术架构,OceanBase,oceanbase,架构

  • 三个城市,组成一个5副本的集群
  • 任何一个IDC或者城市的故障,依然构成多数派,可以确保RPO=0
  • 由于3份以上副本才能构成多数派,但每个城市最多只有2份副本,为降低时延,城市1和城市2应该离得较近,以降低同步Redo-Log的时延
  • 为降低成本,城市3可以只部署日志型副本(只有日志)

3.4.3 同城两机房“主-备”方案

  • 同城三机房或者三地五中心的方案对基础设施要求太高。为了利旧企业现网的基础设施,OceanBase提供了同城两机房和两地三中心两种方案
    OceanBase集群技术架构,OceanBase,oceanbase,架构
  • 每个城市都部署一个OceanBase集群,一个为主集群一个为备集群;每个集群有自己单独的Paxos group,多副本一致性
  • “集群间”通过Redo-log做数据同步,形式上类似传统数据库“主从复制”模式;有“异步同步”和“强同步”两种数据同步模式,类似ODD中的“最大性能”和“最大保护”两种模式

3.4.3 两地三中心“主-备”方案

OceanBase集群技术架构,OceanBase,oceanbase,架构

  • 主城市与备城市组成一个5副本的集群。任何IDC的故障,最多损失2份副本,剩余的3份副本依然满足多数派
  • 备用城市建设一个独立的3副本集群,做为一个备集群,从主集群”异步同步“或者”强同步“到备集群
  • 一旦主城市遭遇灾难,备城市可以接管业务

四 分布式事务

4.1 分布式事务

  • 分布式事务跨机执行时,OceanBase通过多种机制保证ACID
    OceanBase集群技术架构,OceanBase,oceanbase,架构

OceanBase集群技术架构,OceanBase,oceanbase,架构

  • OceanBase是一个原生的分布式架构,采用了多点无共享(即Shared-Nothing)的架构,在实现全局(跨机器)一致的快照隔离和多版本并发控制时,会面临分布式架构所带来的技术挑战
  • OceanBase数据库利用一个集中式服务来提供全局一致的版本号。事务在修改数据或者查询数据的时候,无论请求源自哪台物理机器,都会从这个集中式的服务处获取版本号,保证所有的版本号单调向前并且和真实世界的时间顺序保持一致
    OceanBase集群技术架构,OceanBase,oceanbase,架构

4.2 两阶段提交保证事务原子性

OceanBase集群技术架构,OceanBase,oceanbase,架构
两阶段提交包括以下两个阶段:

  1. 提交准备阶段(Prepare Phase):在这个阶段,事务的协调者(Coordinator)向所有参与者(Participants)发送准备提交的请求。参与者接收到请求后,会执行事务的操作,并将事务的日志记录到本地的redo log中。如果所有参与者都成功地执行了事务并准备好提交,那么它们会向协调者发送“同意”(Agree)的响应。

  2. 提交确认阶段(Commit Phase):在这个阶段,协调者根据参与者的响应情况来决定是否提交事务。如果所有参与者都返回了“同意”,那么协调者会向所有参与者发送提交的指令,参与者接收到后会正式将事务提交并将其结果持久化到磁盘。如果有任何一个参与者返回了“否决”(Abort),那么协调者会向所有参与者发送中止的指令,参与者接收到后会撤销事务的操作。

OceanBase两阶段提交协议特点

  • 事务协调者和所有参与者都是高可用的
  • 单机多分区事务,所有参与者都prepare成功即认为事务进入提交状态 , 立 即返回客户端commit
  • 全自动处理异常情况

五 多版本并发控制(MVCC)

MVCC核心功能

  • 采用锁机制控制读写冲突时,加锁后其他事务无法进行读,导致读写竞争,影响读的并发度。MVCC可以有效解决该问题
  • 全局统一的数据版本号管理,取自全局唯一的时间戳服务(GTS)
  • “读”、“写”操作都要从GTS获取版本号;同一个租户内只有一个GTS服务,可以保持全局(跨机)一致性
  • 修改数据:事务未提交前,数据的新旧版本共存,但拥有不同的版本号
  • 读取数据:先获取版本号,再去查找小于等于当前版本号的已提交数据
  • 写操作获取行锁,读操作不需要锁,有效避免读写锁竞争,提高读写并发度

OceanBase集群技术架构,OceanBase,oceanbase,架构

六 事务隔离级别(Isolation Level)

  • 保证全局数据一致性的隔离级别

事务并发问题

  • 脏读:读取了未提交的数据
  • 不可重复读:指的是在同一事务内,不同的时刻读到的同一批数据可能是不一样的(期间被别的事务更新数据)
  • 幻读:指的是在同一事务内,在操作过程中进行两次查询,第二次查询的结果包含了第一次查询中未出现的数据或者缺少了第一次查询中出现的数据(期间被别的事务插入或者删除了数据)

OceanBase支持多种事务隔离级别文章来源地址https://www.toymoban.com/news/detail-806515.html

  • 基于全局一致的数据版本号管理,以不同的版本号策略实现不同的隔离级别
  • Oracle模式支持以下两种隔离级别,应用系统可以根据需求权衡使用任何一种隔离级别:
    • Read-Committed:避免脏读,存在不可重复读和幻读(默认)
    • Serializable:避免脏读、不可重复读、幻读
  • MySQL模式支持读已提交、可重复读两种隔离级别
  • 不支持脏读(Dirty-Read),只能获取已提交数据

到了这里,关于OceanBase集群技术架构的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于DataX迁移MySQL到OceanBase集群

    📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】!😜😜😜 中国DBA联盟(ACDU)成员,目前服务于工业互联网 擅长主流Oracle、MySQL、PG、高斯及Greenplum运维开发,备份恢复,安装迁移,性能优

    2024年03月18日
    浏览(45)
  • 深入OceanBase内部机制:系统架构与组件精讲

    码到三十五 : 个人主页 心中有诗画,指尖舞代码,目光览世界,步履越千山,人间尽值得 ! OceanBase 数据库采用 Shared-Nothing 架构,各个节点之间完全对等,每个节点都有自己的 SQL 引擎、存储引擎、事务引擎,运行在普通 PC 服务器组成的集群之上,具备高可扩展性、高可用

    2024年04月12日
    浏览(36)
  • OBD搭建OceanBase三副本集群(1-1-1)docker版

            本次使用OBD方式搭建一个OceanBase三副本集群,由于服务器资源有限,选择较为轻量级的docker,运行三个容器来实现OceanBase(1-1-1)+OBProxy集群架构的搭建,ODC开发工具客户端远程连接做简单查询。 IP 服务器 资源规格 软件及版本 宿主机:容器端口映射 宿主机:容器目录映射

    2024年01月23日
    浏览(44)
  • OceanBase社区版4.x核心技术解密

    数字化时代,各行各业的数据量呈现爆发式增长,对于海量数据价值的挖掘和应用,正成为推动创新的主要力量,与此同时,数据计算复杂度正在提升。在此背景下,对于数据处理的基石数据库而言,正面临市场变局。集中式数据库、分库分表等传统解决方案难以面对海量数

    2024年02月10日
    浏览(33)
  • 实力认证!OceanBase获“鼎信杯”优秀技术支撑奖

    6 月 30 日,2023 “鼎信杯”信息技术发展论坛在京隆重举办第二届“鼎信杯”大赛颁奖典礼。OceanBase 凭借完全自主研发的原生分布式数据库,以及丰富的核心系统国产数据库升级案例,斩获“优秀技术支撑奖”。 论坛上,国内首个基于在线交易风控场景的 HTAP 数据库基准——

    2024年02月10日
    浏览(45)
  • OceanBase 4.0:当我们谈单机分布式一体化架构时,我们在说什么?

    关于作者: 杨传辉,OceanBase CTO。2010年作为创始成员之一加入 OceanBase 团队,主导了 OceanBase 历次架构设计和技术研发,从无到有实现 OceanBase 在蚂蚁集团全面落地。同时,他也主导了两次 OceanBase TPC-C 测试并打破世界纪录,著有《大规模分布式存储系统:原理与实践》。目前

    2023年04月09日
    浏览(48)
  • 【实战】OceanBase之OMS迁移Oracle至oceanbase

    背景 最近公司因为需要做Oracle2OceanBase的数据迁移后做测试,但是数据接近2T,对于超大数据表的迁移使用ETL工具,效率太慢了。综合考虑使用OMS,以下是做数据迁移的具体步骤,给大家提供一些借鉴。 把源端和目标端添加进去,源断是Oracle_ods,目标端是oceanbase_ods 选择好源

    2024年02月08日
    浏览(39)
  • 【oceanbase】centos7/kylinv10部署oceanbase(x86版本)

    1. 修改系统​ vim /etc/sysctl.conf fs.file-max = 102400 net.nf_conntrack_max = 1024000 net.netfilter.nf_conntrack_max = 1024000 2. 修改 ulimit 的 open file,系统默认的 ulimit 对文件打开数量的限制是 1024 vim /etc/security/limits.conf # 加入以下配置,重启即可生效 * hard nofile 102400 * soft nofile 102400 3. 资源下载: o

    2024年02月07日
    浏览(48)
  • OceanBase—01(入门篇——使用docker安装OceanBase以及介绍连接OB的几种方式)

    1.1.1 安装前提 安装了docker Linux下安装docker以及docker安装Oracle19c的全部详细过程及各种问题解决. 1.1.2 参考 参考官网: 使用 Docker 部署 OceanBase 数据库. 提示:这是安装之后的操作,需要的话可以,安装之后可以跳到这里看修改密码!!! 安装后默认密码为空,可以修改也可以

    2024年02月09日
    浏览(47)
  • 「OceanBase 4.1 体验」OceanBase:解读领先的分布式数据库系统,功能与体验全解析

    本文旨在介绍 OceanBase 4.1 版本的特点、更新内容和初体验,帮助读者了解和掌握这个开源分布式关系型数据库管理系统。如果你对大规模数据存储和处理的挑战感兴趣,或者正在寻找一种满足互联网领域高并发、高可靠性和高扩展性要求的数据库解决方案,本文将为你提供有

    2024年02月05日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包