首页 > 数据库 > 国内数据库 > OceanBase集群架构
ODP,全称为OceanBase Database Proxy,也被称为OBProxy,是OceanBase数据库的核心组件之一。它是一种数据库代理中间件,主要负责连接池管理、负载均衡、故障转移等功能。OBProxy作为可选组件,其部署取决于应用需求和场景。
OBProxy本身无状态,支持无限水平扩展,支持同时访问多个OceanBase集群。通过丰富的内部命令对OBProxy状态进行实时监控,使得运维简单便利。OBProxy高可用分为两部分:一方面保证自身高可用,持续提供代理服务;另一方面OBProxy是OceanBase高可用体系的主要组成部分,可以对用户屏蔽宕机、升级等情况,保证OceanBase数据库服务的稳定和快速恢复。
OBProxy与OBServer节点默认采用了OceanBase专有协议,如增加报文的CRC校验保证与OBServer节点链路的正确性,增强传输协议以支持Oracle兼容性的数据类型和交互模型。
通过上述功能,ODP/OBProxy在OceanBase数据库系统中扮演着至关重要的角色,确保了系统的高性能、高可用性和易运维性。
Primary Zone 是 OceanBase 数据库中用于控制数据副本(Replica)分布和负载均衡的关键特性。它允许数据库管理员指定 Leader 副本的偏好位置,从而影响数据的分布和系统的负载均衡。
Primary Zone 表示 Leader 副本的偏好位置。通过设置 Primary Zone,可以指定 Leader 更倾向于被调度到哪个 Zone 上。例如,如果一张表的 Primary Zone 设置为 "zone1",则 RootService 会尽量将该表的 Leader 调度到 zone1 上。Primary Zone 实际上是一个 Zone 的列表,列表中的 Zone 用
;
分隔表示从高到低的优先级,用
,
分隔表示相同优先级。
Primary Zone 的设置涉及到多个层面,包括 Table 级、TableGroup 级、Database 级以及 Tenant 级。每个级别都可以指定 Primary Zone,如果没有指定,则默认向上继承。Tenant 级别的 Primary Zone 是必须指定的,如果创建时未指定, 默认填写为 RANDOM,表示各个 Zone 优先级相同。
数据库管理员可以通过 SQL 语法对 Primary Zone 进行设置或修改。例如,创建租户时指定 Primary Zone:
CREATE TENANT [IF NOT EXISTS] tenant_name PRIMARY_ZONE [=] zone;
或者修改已存在表的 Primary Zone:
ALTER TABLE [SET] PRIMARY_ZONE [=] zone;
假设有三个 Zone 分别位于不同的 Region:sh1, sh2, sh3 在 Region SH,hz1, hz2, hz3 在 Region HZ,sz1, sz2, sz3 在 Region SZ。用户设置的 Primary Zone 为 'sh1;hz1;hz2;sz1',根据改写规则,最终得到的 Primary Zone 为 'sh1;sh2,sh3;hz1;hz2;hz3;sz1;sz2,sz3'。这意味着 Leader 会优先分布在 sh1 上,如果 sh1 发生故障,Leader 会依次分布在 sh2 和 sh3 上。
Primary Zone 的设置遵循一定的继承规则。如果 Table 级的 Primary Zone 未指定,则会查看 TableGroup 的 Primary Zone,如果 TableGroup 也未指定,则查看 Database 的 Primary Zone,最后是 Tenant 级的 Primary Zone。
表组(Tablegroup)是OceanBase数据库中用于优化分布式环境下表间关联查询性能的重要特性。它通过将具有相同分区键和分区数量的表组织在一起,减少跨节点的数据访问,从而提高查询效率。
在分布式数据库中,数据被分散存储在不同的节点上。当执行涉及多个表的查询时,如果这些表的数据分布在不同的节点上,就需要进行跨节点的数据访问,这会显著增加查询的延迟。表组通过将相关表的数据集中在同一个节点上,减少了这种跨节点的数据访问,从而优化了查询性能。
表组特别适用于以下场景:
在OceanBase中,可以通过以下SQL语句创建表组:
CREATE TABLEGROUP tablegroup_name [BINDING = {TRUE | FALSE}] [PARTITION BY hash (column_list)] PARTITIONS num;tablegroup_name
是表组的名称。BINDING
指定表组是否绑定,绑定的表组不能被删除,直到所有表都从表组中移除。PARTITION BY hash (column_list)
定义了分区策略,
column_list
是用于分区的列名。PARTITIONS num
指定了分区的数量。将表加入表组的语句如下:
ALTER TABLE table_name TABLEGROUP tablegroup_name;
假设有两个表
orders
和
order_details
,它们都包含
order_id
作为分区键。创建表组并添加表的示例如下:
CREATE TABLEGROUP order_group BINDING PARTITION BY hash(order_id) PARTITIONS 6; ALTER TABLE orders TABLEGROUP order_group; ALTER TABLE order_details TABLEGROUP order_group;
这样,
orders
和
order_details
表的分区将尽量被分配到同一个节点上,从而优化了涉及这两个表的查询性能。
RootService(RS)是OceanBase数据库中的总控服务,它扮演着集群管理和协调的核心角色。RootService负责整个OceanBase集群的管理和协调,包括集群的初始化、启动、关闭,租户的创建、资源分配,以及管理集群中服务器的加入和退出等。它还负责数据表格的创建、删除以及分区的管理和迁移,同时维护集群元数据的一致性和可用性,比如表的元数据、服务器和租户的配置信息。此外,RootService还负责在服务器之间平衡数据和请求的分布。
RootService服务使用Paxos协议实现高可用,可以通过集群配置指定RootService服务副本数。RootService的各副本基于Paxos协议选举leader,leader副本上任后为集群提供RootService服务。当RootService的当前leader发生故障卸任时,其他的RootService副本重新选举产生新的leader,并继续提供RootService服务,实现高可用。
在数据库容灾和业务连续性规划中,两个关键的性能指标是恢复点目标(Recovery Point Objective,简称RPO)和恢复时间目标(Recovery Time Objective,简称RTO)。这两个指标帮助企业评估和制定灾难恢复计划,确保在面临灾难时能够最小化数据丢失和业务中断。
RPO(恢复点目标)
RPO是指在灾难发生后,业务系统所能容忍的数据丢失量。它衡量的是容灾系统的数据冗余备份能力,具体来说,RPO是业务系统在灾难过程中允许丢失数据的最大时间长度。RPO的值取决于数据备份的频率和数据复制技术。例如,如果一个企业的RPO为1小时,那么在发生灾难或故障的情况下,该企业可以容忍1小时内的数据丢失。
RTO(恢复时间目标)
RTO是指灾难发生后,从IT系统宕机导致业务停顿之刻开始,到IT系统恢复至可以支持业务部门运作,业务恢复运营之时,此两点之间的时间。RTO衡量的是业务恢复的及时性,即业务从中断到恢复正常所需的时间。RTO的值越小,代表容灾系统的数据恢复能力越强。
RPO与RTO的关系
RPO和RTO并不是孤立的,而是从不同角度反映数据中心的容灾能力。RPO关注的是数据丢失的容忍度,而RTO关注的是业务恢复的时间。两者的数值越小,就越能有效缩短业务从正常到过渡期的时间间隔。在实际应用中,企业需要根据自身的业务需求和成本效益分析,来确定合适的RPO和RTO值。
OceanBase数据库的仲裁高可用(Arbitratrion Service)是一种基于Paxos多副本容灾方案提出的新型高可用方案,它通过引入仲裁节点来增强分布式数据库的容灾能力。这种方案允许在多个数据副本间发生半数异常时,通过集群之外的仲裁服务来参与变更决策,进而恢复服务。自OceanBase数据库V4.1.0版本开始,这一特性得到了支持
OceanBase的仲裁服务可以通过OCP(OceanBase Cloud Platform)进行配置和管理,提供仲裁服务的部署、启停、接管、删除、升级等能力,实现了对仲裁服务的全生命周期管理。
OceanBase数据库的自动切换Leader机制是其高可用性(High Availability, HA)的核心特性之一。在分布式数据库系统中,为了保证服务的连续性和数据的一致性,当某个节点发生故障时,系统需要能够快速地选举出一个新的Leader来接管服务。OceanBase通过Paxos协议和多副本机制,实现了在故障场景下的自动切换Leader,确保了系统的稳定性和数据的安全性。
OceanBase数据库中的每个分区都维护了多个副本,这些分区的多个副本之间通过Paxos协议进行日志同步。每个分区和它的副本构成一个独立的Paxos组,其中一个副本为主(Leader),其它副本为备(Follower)。当OBServer节点出现故障时,Follower分区不受影响,Leader分区的写服务短时间内会受到影响,直到通过Paxos协议将该分区的某个Follower选为新的Leader为止,整个过程不超过30秒。
在OceanBase中,当检测到Leader节点故障时,系统会自动触发选举流程。这个过程包括:
OceanBase数据库系统在设计之初就将高可用性(High Availability, HA)作为核心特性之一。在分布式数据库系统中,数据副本的自动补充是保障数据高可用和容灾能力的关键机制。当系统检测到某个节点发生故障时,OceanBase能够自动进行副本补充,以维持数据的冗余度和系统的稳定性。
OceanBase的自动补副本机制主要依赖于其内部的RootService组件。RootService负责管理集群中的服务器节点、租户和资源分配。当集群中的某个节点发生故障,RootService会检测到这一变化,并触发副本补充流程。这个过程包括以下几个关键步骤:
OceanBase提供了灵活的副本补充策略,以适应不同的业务需求和容灾要求。管理员可以根据业务特点和资源状况,调整副本补充的参数,如副本数量、副本分布策略等。
来自 “ ”, 原文作者: ;原文链接:,如有侵权,请联系管理员删除。