首批通过分布式安全可靠测评,为关键业务系统打造
Locality 介绍
更新时间:2024-12-05 14:46:39
为了描述数据的多个副本的类型及分布策略,我们引入了 Locality 的概念。OceanBase 数据库当前版本仅支持租户级别的 Locality,不再支持表级、DB 级、Table Group 级配置 Locality。
副本指的是数据,而 Locality 描述的对象是承载数据的容器,从而该容器下的数据具有容器的 Locality 属性所描述的类型及分布策略。
OceanBase 数据库当前版本仅支持租户级别的 Locality,而 OceanBase 数据库 V3.x 还支持表级、DB 级、Table Group 级配置 Locality。
Locality 语法
Locality 的语法结构如下所示:
replicas{量词}@location
语法中各元素的意义如下表所示:
| 元素 | 说明 |
|---|---|
| replicas | 表示副本类型。replicas 的值为副本名称,可以在 副本介绍 中的副本类型说明表中的名称列获得支持的值(支持全名和简写)。 |
| location | 表示位置。它是系统已知的一组枚举值。location 的值为 Zone 的名称。集群和租户中的各 Zone 的名称可以通过 oceanbase.DBA_OB_ZONES 视图查询。有关 oceanbase.DBA_OB_ZONES 视图的详细信息,参见 oceanbase.DBA_OB_ZONES。 |
| 量词 | 固定为 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上存在一个全能型副本。
如图所示:

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 |