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 |




