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

OceanBase数据库副本分布之Locality 介绍

Tonyhacks 2023-12-10
304

Locality 介绍

为了描述数据的多个副本的类型及分布策略,我们引入了 Locality 的概念。OceanBase 数据库当前版本仅支持租户级别的 Locality,不再支持表级、DB 级、Table Group 级配置 Locality。

副本指的是数据,而 Locality 描述的对象是承载数据的容器,从而该容器下的数据具有容器的 Locality 属性所描述的类型及分布策略。

OceanBase 数据库当前版本仅支持租户级别的 Locality,而 OceanBase 数据库 V3.x 还支持表级、DB 级、Table Group 级配置 Locality。

Locality 语法

Locality 的语法结构如下所示:

replicas{量词}@location

语法中各元素的意义如下表所示:

元素 说明
replicas 表示副本类型。replicas 的值为副本名称,可以在 https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000218084 中的副本类型说明表中的名称列获得支持的值(支持全名和简写)。
location 表示位置。它是系统已知的一组枚举值。location 的值为 Zone 的名称。集群和租户中的各 Zone 的名称可以通过 oceanbase.DBA_OB_ZONES 视图查询。有关 DBA_OB_ZONES 视图的详细信息,参见 https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000220133。
量词 固定为 1,表示一个副本。也可以不指定。

租户的 Locality 属性可以通过系统租户下 oceanbase.DBA_OB_TENANTS 视图的 LOCALITY 字段查看。示例如下:

obclient> SELECT * FROM oceanbase.DBA_OB_TENANTS limit 10; +-----------+-------------+-------------+----------------------------+----------------------------+--------------+---------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+ | TENANT_ID | TENANT_NAME | TENANT_TYPE | CREATE_TIME | MODIFY_TIME | PRIMARY_ZONE | LOCALITY | PREVIOUS_LOCALITY | COMPATIBILITY_MODE | STATUS | IN_RECYCLEBIN | LOCKED | TENANT_ROLE | SWITCHOVER_STATUS | SWITCHOVER_EPOCH | SYNC_SCN | REPLAYABLE_SCN | READABLE_SCN | RECOVERY_UNTIL_SCN | LOG_MODE | ARBITRATION_SERVICE_STATUS | +-----------+-------------+-------------+----------------------------+----------------------------+--------------+---------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+ | 1 | sys | SYS | 2023-05-17 18:10:19.940353 | 2023-05-17 18:10:19.940353 | RANDOM | FULL{1}@zone1 | NULL | MYSQL | NORMAL | NO | NO | PRIMARY | NORMAL | 0 | NULL | NULL | NULL | NULL | NOARCHIVELOG | DISABLED | | 1001 | META$1002 | META | 2023-05-17 18:15:21.455549 | 2023-05-17 18:15:36.639479 | zone1 | FULL{1}@zone1 | NULL | MYSQL | NORMAL | NO | NO | PRIMARY | NORMAL | 0 | NULL | NULL | NULL | NULL | NOARCHIVELOG | DISABLED | | 1002 | mysql001 | USER | 2023-05-17 18:15:21.461276 | 2023-05-17 18:15:36.669988 | zone1 | FULL{1}@zone1 | NULL | MYSQL | NORMAL | NO | NO | PRIMARY | NORMAL | 0 | 1684398681521302749 | 1684398681521302749 | 1684398681345969089 | 4611686018427387903 | NOARCHIVELOG | DISABLED | | 1003 | META$1004 | META | 2023-05-17 18:18:19.927859 | 2023-05-17 18:18:36.443233 | zone1 | FULL{1}@zone1 | NULL | MYSQL | NORMAL | NO | NO | PRIMARY | NORMAL | 0 | NULL | NULL | NULL | NULL | NOARCHIVELOG | DISABLED | | 1004 | oracle001 | USER | 2023-05-17 18:18:19.928914 | 2023-05-17 18:18:36.471606 | zone1 | FULL{1}@zone1 | NULL | ORACLE | NORMAL | NO | NO | PRIMARY | NORMAL | 0 | 1684398681335427475 | 1684398681335427475 | 1684398681144712832 | 4611686018427387903 | NOARCHIVELOG | DISABLED | | 1005 | META$1006 | META | 2023-05-18 15:48:57.441320 | 2023-05-18 15:49:12.820051 | zone1 | FULL{1}@zone1 | NULL | MYSQL | NORMAL | NO | NO | PRIMARY | NORMAL | 0 | NULL | NULL | NULL | NULL | NOARCHIVELOG | DISABLED | | 1006 | mq_t1 | USER | 2023-05-18 15:48:57.447657 | 2023-05-18 15:49:12.857944 | zone1 | FULL{1}@zone1 | NULL | MYSQL | NORMAL | NO | NO | PRIMARY | NORMAL | 0 | 1684398680916392609 | 1684398680916392609 | 1684398680742451346 | 4611686018427387903 | NOARCHIVELOG | DISABLED | +-----------+-------------+-------------+----------------------------+----------------------------+--------------+---------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+ 7 rows in set

示例

下述示例展示了在一个拥有五个 Zone(z1~z5)的 OceanBase 集群中,可以容纳不同 Locality 的多个租户和它们的 Locality 情况:

  • sys tenant 的 Locality:F@z1,F@z2,F@z3,F@z4,F@z5

    表示系统租户在 z1,z2,z3,z4,z5 上各存在一个全能型副本。

  • tenant1 的 Locality:F@z1,F@z2,F@z3

    表示租户 tenant1 在 z1,z2,z3 上各存在一个全能型副本。

  • tenant2 的 Locality:F@z3,F@z4,F@z5

    表示租户 tenant2 在 z3,z4,z5 上存在一个全能型副本。

如图所示:

!https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/observer-enterprise/V4.2.1/manage/locality.jpg

Locality 属性与高可用架构

多副本架构是 OceanBase 数据库相比于传统数据库的架构优势,多副本架构是 OceanBase 数据库具备多级无损容灾能力的基础,包括单机级无损容灾、机房级无损容灾、城市级无损容灾等能力。OceanBase 数据库支持灵活的调整集群部署架构,从而可以满足业务场景的技术演进。

OceanBase 数据库的灵活的部署架构正是通过 Locality 属性体现的,Locality 除了描述副本类型,还描述了副本在 Zone 间的分布策略。Zone 具有 Region 属性,可通过 oceanbase.DBA_OB_ZONES 视图的 REGION 字段查看,描述了该 Zone 的地域分布。通过调整租户的多个副本在不同 Region 的 不同 Zone 间的分布,从而达到灵活的部署模式。

OceanBase 数据库典型的部署模式有三种,分别是同城三中心、两地五中心、三地五中心,其 Locality 属性举例如下:

部署模式 Locality 属性 Zone 分布
同城三中心 F@z1,F@z2,F@z3 z1、z2、z3 分别位于 Region R1 的 IDC idc1、idc2、idc3
两地五中心 F@z1,F@z2,F@z3,F@z4,F@z5 z1、z2 位于 Region R1 的 IDC idc1;z3、z4 位于 Region R1 的 IDC idc2;z5 位于 Region R2
三地五中心 F@z1,F@z2,F@z3,F@z4,F@z5 z1、z2 位于 Region R1 的 IDC idc1 和 IDC idc2;z3、z4 位于 Region R2 的 IDC idc3 和 IDC idc4;z5 位于 Region R3
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论