Skip to content

Commit

Permalink
PullRequest: 5473 V4.3.1 fix aone issues
Browse files Browse the repository at this point in the history
  • Loading branch information
obdev authored and ob-robot committed Jun 28, 2024
1 parent 3d0325b commit 2943bee
Show file tree
Hide file tree
Showing 15 changed files with 42 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,12 @@ OceanBase 数据库的一个集群由若干个节点组成。这些节点分属
在集群的每个节点上会运行一个叫做 observer 的服务进程,它内部包含多个操作系统线程。节点的功能都是对等的。每个服务负责自己所在节点上分区数据的存取,也负责路由到本机的 SQL 语句的解析和执行。这些服务进程之间通过 TCP/IP 协议进行通信。同时,每个服务会监听来自外部应用的连接请求,建立连接和数据库会话,并提供数据库服务。关于 observer 服务进程的更多信息,参见 [线程简介](../700.reference/100.oceanbase-database-concepts/1200.observer-node-architecture/300.observer-thread-model/100.thread-introduction.md)

为了简化大规模部署多个业务数据库的管理并降低资源成本,OceanBase 数据库提供了独特的多租户特性。在一个 OceanBase 集群内,可以创建多个互相之间隔离的数据库"实例",叫做租户。从应用程序的视角来看,每个租户等同于一个独立的数据库实例。不仅如此,每个租户可以选择 MySQL 或 Oracle 兼容模式。应用连接到 MySQL 租户后,可以在租户下创建用户、Database,与一个独立的 MySQL 库的使用体验一致。同样的,应用连接到 Oracle 租户后,可以在租户下创建 schema、管理角色等,与一个独立的 Oracle 库的使用体验一致。一个新的集群初始化之后,就会存在一个特殊的名为 sys 的租户,叫做系统租户。系统租户中保存了集群的元数据,是一个 MySQL 兼容模式的租户。

<main id="notice" >
<h4>功能适用性</h4>
<p>OceanBase 数据库社区版仅提供 MySQL 模式。</p>
</main>

为了隔离租户的资源,每个 observer 进程内可以有多个属于不同租户的虚拟容器,叫做资源单元(Unit)。资源单元包括 CPU 和内存资源。每个租户在多个节点上的资源单元组成一个资源池。

为了实现 OceanBase 数据库对应用程序屏蔽内部分区和副本分布等细节,使应用访问分布式数据库像访问单机数据库一样简单,我们提供了 OBProxy 代理服务。应用程序并不会直接与 OceanBase 数据库节点建立连接,而是连接 OBProxy,然后由 OBProxy 转发 SQL 请求到合适的 OceanBase 数据库节点。OBProxy 是无状态的服务,多个 OBProxy 节点通过网络负载均衡(例如,SLB)对应用提供统一的网络地址。
为了实现 OceanBase 数据库对应用程序屏蔽内部分区和副本分布等细节,使应用访问分布式数据库像访问单机数据库一样简单,我们提供了 OceanBase 数据库代理 ODP(OceanBase Database Proxy,又称 OBProxy)服务。应用程序并不会直接与 OceanBase 数据库节点建立连接,而是连接 ODP,然后由 ODP 转发 SQL 请求到合适的 OceanBase 数据库节点。ODP 是无状态的服务,多个 ODP 节点通过网络负载均衡(例如,SLB)对应用提供统一的网络地址。
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
|description||
|---|---|
|keywords||
|dir-name||
|dir-name-en||
|tenant-type||

# 其他问题

## 为备库设置日志恢复源失败

### 问题现象

基于网络的物理备库场景下,为备库设置日志恢复源时,客户端返回 `set tenant itself as log restore source is not allowed` 的错误。

### 问题原因

为防止用户将"租户自己"设置为恢复源,在设置网络备库的日志恢复源或创建基于网络的空备租户时,要求主库与备库的 `cluster_id``tenant_id` 两者不能都相同,即至少有一个不相同。如果不满足该条件,就可能会出现上述报错。

### 处理方法

* 对于主备租户在同一集群的场景,需要检查是否在设置日志恢复源的命令中将租户信息误填为本租户的信息。

* 对于主备租户不在同一集群的场景,除了检查租户信息,还需要检查主备租户所在集群的 `cluster_id` 是否相同。使用 OCP 或 OBD 等工具部署的 OceanBase 集群,默认系统会保证 `cluster_id` 唯一,但是手动部署的 OceanBase 集群可能会出现 `cluster_id` 不唯一的情况。
Original file line number Diff line number Diff line change
Expand Up @@ -85,13 +85,13 @@ OceanBase 数据库支持修改用户租户的属性,包括修改租户的副

示例:

* 修改租户 `mq_t1` 的 Primary Zone 为 `"zone1,zone2"`,Locality 为 `"F@sa128_obv4_1,F@sa128_obv4_2,F@sa128_obv4_3"`
* 修改租户 `mq_t1` 的 Primary Zone 为 `"zone1,zone2"`,Locality 为 `"F@zone1,F@zone2,F@zone3"`

```shell
obclient [oceanbase]> ALTER TENANT mq_t1 PRIMARY_ZONE='zone1,zone2';
Query OK, 0 rows affected
obclient [oceanbase]> ALTER TENANT mq_t1 LOCALITY="F@sa128_obv4_1,F@sa128_obv4_2,F@sa128_obv4_3";
obclient [oceanbase]> ALTER TENANT mq_t1 LOCALITY="F@zone1,F@zone2,F@zone3";
Query OK, 0 rows affected
```

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -313,7 +313,7 @@ OceanBase 数据库支持两种类型的租户,MySQL 兼容模式和 Oracle

<main id="notice" type='notice'>
<h4>注意</h4>
<p>在指定 `PRIMARY_ZONE` 时,其值可以设置为 RANDOM(必须大写),表示随机选择最高优先级内的任意一个 Zone 作为 `Primary Zone`</p>
<p>在指定 <code>PRIMARY_ZONE</code> 时,其值可以设置为 RANDOM(必须大写),表示指定租户所在的所有 Zone 作为 <code>PRIMARY_ZONE</code> 的第一优先级</p>
</main>

* `RESOURCE_POOL_LIST`:指定分配给租户的资源池列表,必填。如果有多个资源池,要求多个资源池的 `UNIT_NUM` 个数一致。
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -222,7 +222,7 @@ OceanBase 数据库通过集群级配置项 `enable_cgroup` 来控制 OBServer
```shell
[usercg@xxx /]$ sudo mkdir /sys/fs/cgroup/cpu

[usercg@xxx /]$ sudo chown usercg:users -R /sys/fs/cgroup/cpu
[usercg@xxx /]$ sudo chown usercg:usercg -R /sys/fs/cgroup/cpu
```

<main id="notice" type='explain'>
Expand All @@ -244,7 +244,7 @@ OceanBase 数据库通过集群级配置项 `enable_cgroup` 来控制 OBServer
```shell
[usercg@xxx /]$ sudo mkdir /sys/fs/cgroup/cpu/oceanbase

[usercg@xxx /]$ sudo chown usercg:users -R /sys/fs/cgroup/cpu/oceanbase
[usercg@xxx /]$ sudo chown usercg:usercg -R /sys/fs/cgroup/cpu/oceanbase
```

6. 执行以下命令,配置 `oceanbase` 目录继承上级的 CPU 和 Memory 配置,并设置对下级目录的自动继承。
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@
+-----------+-------------+-------------+----------------------------+----------------------------+-------------------+---------------------------------------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+----------+------------+-----------+
| 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 | UNIT_NUM | COMPATIBLE | MAX_LS_ID |
+-----------+-------------+-------------+----------------------------+----------------------------+-------------------+---------------------------------------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+----------+------------+-----------+
| 1006 | mysql001 | USER | 2023-09-25 17:06:51.025654 | 2023-09-25 17:07:31.606415 | zone1;zone2;zone3 | FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3 | NULL | MYSQL | NORMAL | NO | NO | PRIMARY | NORMAL | 0 | 1695633705492686782 | 1695633705492686782 | 1695633705492686782 | 4611686018427387903 | NOARCHIVELOG | DISABLED | 2 | 4.2.1.0 | 1002 |
| 1006 | mysql001 | USER | 2023-09-25 17:06:51.025654 | 2023-09-25 17:07:31.606415 | zone1;zone2,zone3 | FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3 | NULL | MYSQL | NORMAL | NO | NO | PRIMARY | NORMAL | 0 | 1695633705492686782 | 1695633705492686782 | 1695633705492686782 | 4611686018427387903 | NOARCHIVELOG | DISABLED | 2 | 4.2.1.0 | 1002 |
+-----------+-------------+-------------+----------------------------+----------------------------+-------------------+---------------------------------------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+----------+------------+-----------+
1 row in set
```
Expand All @@ -158,7 +158,7 @@
6 rows in set
```

5. 修改租户 `mysql001``PRIMARY_ZONE` 属性, 1 调整为 2
5. 修改租户 `mysql001``PRIMARY_ZONE` 属性,第一优先级 Zone 的个数从 1 调整为 2

```sql
ALTER TENANT mysql001 PRIMARY_ZONE='zone1,zone2;zone3';
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ Oracle 模式下,系统在创建新租户时内置了以下默认角色:

* `DBA`:拥有绝大多数的系统权限。
* `RESOURCE`:拥有 Resource 角色的用户只可以在自己的 Schema 中创建数据库对象。
* `CONNECT`:拥有 Connect 权限的用户只可以登录数据库
* `CONNECT`:拥有 Connect 权限的用户可以登录数据库
* `PUBLIC`:该角色适用于整个租户内的用户。默认未授予权限。
* `STANDBY_REPLICATION`:该角色主要用于基于网络的物理备库场景。

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

# 权限转授

权限转授解决了授权者集中的问题。通过在授权时指定 with admin/grant option,可以同时授予用户将对应权限转授给其他用户的权限。回收对象权限时,要同时回收该用户转授给其他用户的对应权限,即 A 授予 B 权限,B 授予 C 权限,如果 A 收回 B 的权限,C 的权限也会被回收。回收系统权限时,不会级联回收转授的权限
权限转授解决了授权者集中的问题。通过在授权时指定 with admin/grant option,可以同时授予用户将对应权限转授给其他用户的权限。回收用户的对象权限或系统权限时,不会级联回收该用户转授的权限

## 权限转授示例

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ SQL 层并行化执行能力可以将执行计划分解成多个部分,由多

## 接入层

OceanBase 数据库代理(OceanBase Database Proxy,ODP)是 OceanBase 数据库的接入层,负责将用户的请求转发到合适的 OceanBase 数据库实例上进行处理。
OceanBase 数据库代理 ODP(OceanBase Database Proxy,又称 OBProxy)是 OceanBase 数据库的接入层,负责将用户的请求转发到合适的 OceanBase 数据库实例上进行处理。

ODP 是独立的进程实例,独立于 OceanBase 数据库实例部署。ODP 监听网络端口,兼容 MySQL 网络协议,支持使用 MySQL 驱动的应用直接连接 OceanBase 数据库。

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ Oracle 模式的权限分为两类:

* `RESOURCE`:拥有 Resource 角色的用户只可以在自己的 Schema 中创建数据库对象。

* `CONNECT`:拥有 Connect 权限的用户只可以登录数据库
* `CONNECT`:拥有 Connect 权限的用户可以登录数据库

* `PUBLIC`:该角色适用于整个租户内的用户。默认未授予权限。

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ SHOW proxyconfig [LIKE '%var_name%'];

* 启动时在 `-o` 参数后面加上配置的内容,如 `-o <var_name>=<var_value>`

* 使用 `root@proxysys` 登录,通过 `alter proxyconfig set <var_name>=<var_value>` 修改配置后,对于need_reoobt 的配置不会动态生效,必须要重启。
* 使用 `root@proxysys` 登录,通过 `alter proxyconfig set <var_name>=<var_value>` 修改配置后,对于need_reboot 的配置不会动态生效,必须要重启。

ODP 还有一类配置,只会生效一次,参考下面表格:

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ OceanBase 数据库的存储引擎基于 LSM-Tree 架构,数据大体上被分

### L0 层

L0 层内部称为 Mini SSTable,根据不同转储策略需要的不同参数设置,L0 层 SSTable 可能存在可以为空。对于 L0 层提供 server 级配置参数来设置 L0 层内部分层数和每层最大 SSTable 个数,L0 层内部即分为level-0 到 level-n 层,每层最大容纳 SSTable 个数相同。当 L0 层 level-n 的 SSTable 到达一定数目上限或阈值后开始整体 compaction,合并成一个 SSTable 写入 level-n+1 层。当 L0 层 max level 内 SSTable 个数达到上限后,开始做 L0 层到 L1 层的整体 compaction 释放空间。在存在 L0 层的转储策略下,冻结 MemTable 直接转储在 L0-level0 写入一个新的 Mini SSTable,L0 层每个 level 内多个 SSTable 根据 base_version (这是一个用于标识 SSTable 版本的值)有序,后续本层或跨层合并时需要保持一个原则,参与合并的所有 SSTable 的 version 必须邻接,这样新合并后的 SSTable 之间仍然能维持 version 有序,简化后续读取合并逻辑。
L0 层内部称为 Mini SSTable,根据不同转储策略需要的不同参数设置,L0 层 SSTable 可以为空。对于 L0 层提供 server 级配置参数来设置 L0 层内部分层数和每层最大 SSTable 个数,L0 层内部即分为level-0 到 level-n 层,每层最大容纳 SSTable 个数相同。当 L0 层 level-n 的 SSTable 到达一定数目上限或阈值后开始整体 compaction,合并成一个 SSTable 写入 level-n+1 层。当 L0 层 max level 内 SSTable 个数达到上限后,开始做 L0 层到 L1 层的整体 compaction 释放空间。在存在 L0 层的转储策略下,冻结 MemTable 直接转储在 L0-level0 写入一个新的 Mini SSTable,L0 层每个 level 内多个 SSTable 根据 base_version (这是一个用于标识 SSTable 版本的值)有序,后续本层或跨层合并时需要保持一个原则,参与合并的所有 SSTable 的 version 必须邻接,这样新合并后的 SSTable 之间仍然能维持 version 有序,简化后续读取合并逻辑。

L0 层内部分层会延缓到 L1 的 compaction,更好的降低写放大,但同时会带来读放大,假设共 n 层,每层最多 m 个 SSTable,则最差情况 L0 层会需要持有(n X m + 2)个 SSTable,包括 Minor SSTable 和 Major SSTable。因此实际应用中层数和每层 SSTable 上限都需要控制在合理范围。

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@
<main id="notice" type='explain'>
<h4>说明</h4>
<ul>
<li> 该配置项的取值为 0 时,表示无论转储多少次也不会触发合并。 </li>
<li> 该配置项的取值为 0 时,表示无论转储多少次都不会自动触发合并。 </li>
<li> 该配置项与 <code>major_compact_trigger</code> 配置项具有相同功能。 </li>
</ul>
</main>
Original file line number Diff line number Diff line change
Expand Up @@ -24,4 +24,4 @@



当 major_compact_trigger 配置项的取值为 0 时,表示无论转储多少次也不会触发合并
当 major_compact_trigger 配置项的取值为 0 时,表示无论转储多少次都不会自动触发合并
2 changes: 1 addition & 1 deletion zh-CN/800.FAQ/200.sql-related-problems-faq.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ SQL 引擎和事务引擎都是区分租户的,不同租户之间完全隔离

| 配置项 | 默认值 | 范围 | 生效方式 | 含义 |
| --- | --- | --- | --- | --- |
| ob_enable_batched_multi_statement | FALSE | 租户 | 动态 | 用于设置是否启用批处理多条语句的功能。开启这个参数同时也意味着:在 Batch 执行场景下,当 Client/Server 使用文本协议进行通许时,OceanBase 数据库会对格式一致的多条 UPDATE 语句当成一条语句进行解析,并根据对应的参数和数据分布,生成 Batch physical plan。 |
| ob_enable_batched_multi_statement | FALSE | 租户 | 动态 | 用于设置是否启用批处理多条语句的功能。开启这个参数同时也意味着:在 Batch 执行场景下,当 Client/Server 使用文本协议进行通讯时,OceanBase 数据库会对格式一致的多条 UPDATE 语句当成一条语句进行解析,并根据对应的参数和数据分布,生成 Batch physical plan。 |
| _ob_enable_prepared_statement | FALSE | 集群 | 动态 | 表示是否可以使用 Server 端的 Prepared 语句。 |
| _enable_static_typing_engine | TRUE | 集群 | 动态 | 指定是否使用新的 SQL 引擎。新老的 SQL 引擎对于是否能处理 Batch UPDATE 有差别,老引擎只能处理包含全部主键的 Batch UPDATE,新引擎能处理不包含全部主键的 Batch UPDATE。 |

Expand Down

0 comments on commit 2943bee

Please sign in to comment.