データの複数のレプリカのタイプと分散戦略を記述するために、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の値はゾーンの名前です。クラスタおよびテナント内の各ゾーンの名前は、oceanbase.DBA_OB_ZONESビューを使用して照会できます。DBA_OB_ZONESビューの詳細については、oceanbase.DBA_OB_ZONES参照してください。 |
| 量詞 | 1に固定されており、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
例
以下の例は、5つのゾーン(z1~z5)を持つOceanBaseクラスタにおいて、異なるローカリティを持つ複数のテナントとそれぞれのローカリティ状況を収容できることを示しています。
sysテナントのローカリティ:
F@z1,F@z2,F@z3,F@z4,F@z5。システムテナントが
z1,z2,z3,z4,z5の各ゾーンにフル機能型レプリカを1つずつ持つことを示します。tenant1のローカリティ:
F@z1,F@z2,F@z3。テナントtenant1が
z1,z2,z3の各ゾーンにフル機能型レプリカを1つずつ持つことを示します。tenant2のローカリティ:
F@z3,F@z4,F@z5。テナントtenant2が
z3,z4,z5の各ゾーンにフル機能型レプリカを1つずつ持つことを示します。
図のように:

Locality属性と高可用性アーキテクチャ
マルチレプリカアーキテクチャは、OceanBaseデータベースが従来のデータベースと比較して持つアーキテクチャ上の利点であり、OceanBaseデータベースがマルチレベルの無損失災害復旧機能を備える基盤となっています。これには、単一サーバーレベルの無損失災害復旧、データセンターレベルの無損失災害復旧、都市レベルの無損失災害復旧などの機能が含まれます。OceanBaseデータベースは、クラスタのデプロイアーキテクチャを柔軟に調整することができるため、ビジネスシナリオの技術進化に対応できます。
OceanBaseデータベースの柔軟なデプロイアーキテクチャは、まさにLocality属性によって表現されています。Localityはレプリカのタイプを記述するだけでなく、ゾーン間でのレプリカの分散戦略も記述しています。ゾーンにはRegion属性があり、oceanbase.DBA_OB_ZONESビューのREGIONフィールドを通じて確認できます。これは、そのゾーンの地理的分布を説明しています。テナントの複数のレプリカを異なるRegionの異なるゾーン間で分散させることで、柔軟なデプロイモードを実現します。
OceanBaseデータベースの代表的なデプロイモードには、同一都市内の3リージョン構成、2リージョン構成、3リージョン構成、そして3リージョン構成による5リージョン構成の3種類があります。そのLocality属性の例は以下のとおりです:
| デプロイメントモード | Localityプロパティ | Zoneの分散 |
|---|---|---|
| 同一都市3リージョン | F@z1,F@z2,F@z3 |
z1、z2、z3はそれぞれRegion R1のIDC idc1、idc2、idc3に配置されます |
| 2リージョン3データセンター | 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に配置されます |
| 3リージョン5データセンター | 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に配置されます |