暂无图片
暂无图片
13
暂无图片
暂无图片
暂无图片

OceanBase高可用架构概述

OceanBase 2022-10-19
625

OceanBase 数据库的体系架构和实现方式,保证了数据的强一致性、完整性和高可用。

OceanBase 数据库体系架构

高可用

如图所示,数据服务层表示一个 OceanBase 数据库集群。该集群由三个子集群(Zone)组成,一个 Zone 由多台物理机器组成,每台物理机器称之为数据节点(OBServer)。OceanBase 数据库采用 Shared-Nothing 的分布式架构,每个数据节点都是对等的。

OceanBase 数据库中存储的数据分布在一个 Zone 的多个数据节点上,其它 Zone 存放多个数据副本。如图所示的 OceanBase 数据库集群中的数据有三个副本,每个 Zone 存放一份。这三个 Zone 构成一个整体的数据库集群,为用户提供服务。

根据部署方式的不同,OceanBase 数据库可以实现各种级别容灾能力:

  • 服务器(Server)级无损容灾:能够容忍单台服务器不可用,自动无损切换。

  • 机房(Zone)级无损容灾:能够容忍单个机房不可用,自动无损切换。

  • 地区(Region)级无损容灾:能够容忍某个城市整体不可用,自动无损切换。

当数据库集群部署在一个机房的多台服务器时,实现服务器级别容灾。当集群的服务器在一个地区的多个机房中时,能够实现机房级别容灾。当集群的服务器在多个地区的多个机房中时,能够实现地区级别容灾。

OceanBase 数据库的容灾能力可以达到 RPO=0,RTO=30 秒的国标最高的 6 级标准。

高可用

OceanBase 分布式集群的多台机器同时提供数据库服务,并利用多台机器提供数据库服务高可用的能力。在上图中,应用层将请求发送到代理服务(ODP,也称为 OBProxy),经过代理服务的路由后,发送到实际服务数据的数据库节点(OBServer),请求的结果沿着反向的路径返回给应用层。整个过程中不同的组件通过不同的方式来达到高可用的能力。

在数据库节点(OBServer)组成的集群中,所有的数据以分区为单位存储并提供高可用的服务能力,每个分区有多个副本。一般来说,一个分区的多个副本分散在多个不同的 Zone 里。多个副本中有且只有一个副本接受修改操作,叫做主副本(Leader),其他叫做从副本(Follower)。主从副本之间通过基于 Multi-Paxos 的分布式共识协议实现了副本之间数据的一致性。当主副本所在节点发生故障的时候,一个从节点会被选举为新的主节点并继续提供服务。

选举服务是高可用的基石,分区的多个副本通过选举协议选择其中一个作为主副本(Leader),在集群重新启动时或者主副本出现故障时,都会进行这样的选举。选举服务依赖集群中各台机器时钟的一致性,每台机器之间的时钟误差不能超过 200 毫秒,集群的每台机器应部署 NTP 或其他时钟同步服务以保证时钟一致。选举服务有优先级机制保证选择更优的副本作为主副本,优先级机制会考虑用户指定的 Primary Zone,考虑机器的异常状态等。

当主副本开始服务后,用户的操作会产生新的数据修改,所有的修改都会产生日志,并同步给其他的备副本(Follower)。OceanBase 数据库同步日志信息的协议是 Multi-Paxos 分布式共识协议。Multi-Paxos 协议保证任何需要达成共识的日志信息,在副本列表中的多数派副本持久化成功后即可保证,在任意少数派副本故障时,信息不会丢失。Multi-Paxos 协议同步的多个副本保证了在少数节点故障时系统的两个重要特性:数据不会丢失、服务不会停止。用户写入的数据可以容忍少数节点的故障,同时,在节点故障时,系统总是可以自动选择新的副本作为主副本继续数据库的服务。

OceanBase 数据库每个租户还有一个全局时间戳服务(GTS),为租户内执行的所有事务提供事务的读取快照版本和提交版本,保证全局的事务顺序。如果全局时间戳服务出现异常,租户的事务相关操作都会受到影响。OceanBase 数据库使用与分区副本一致的方案保证全局时间戳服务的可靠性与可用性。租户内的全局时间戳服务实际会由一个特殊的分区来决定其服务的位置,这个特殊分区与其他分区一样也有多副本,并通过选举服务选择一个主副本,主副本所在节点就是全局时间戳服务所在节点。如果这个节点出现故障,特殊分区会选择另一个副本作为主副本继续工作,全局时间戳服务也自动转移到新的主副本所在节点继续提供服务。

以上是数据库集群节点实现高可用的关键组件,代理服务(ODP,也称为 OBProxy)也需要高可用能力来保证其服务。用户请求首先到达的是代理服务,如果代理服务不正常用户请求也无法被正常服务。代理服务还需要处理数据库集群节点故障,并做出响应的容错处理。

代理服务不同于数据库集群,代理服务没有持久化状态,其工作依赖的所有数据库信息都来自于对数据库服务的访问,所以代理服务故障不会导致数据丢失。代理服务也是由多台节点组成集群服务,用户的请求具体会由哪个代理服务节点来执行,应由用户的F5或者其他负载均衡组件负责,同时代理服务的某台节点故障,也应由负载均衡组件自动剔除,保证之后的请求不会再发送到故障节点上。

代理服务工作过程会实时监控数据库集群的状态,一方面代理服务会实时获取集群系统表,通过系统表了解每台机器的健康状态和分区的实时位置,另一方面代理服务会通过网络连接探测数据库集群节点的服务状态,遇到异常时会标记相应节点的故障状态,并进行相应的服务切换。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论