Move the docs folder
This commit is contained in:
committed by
LINxiansheng
parent
7c6dcc6712
commit
d42f317422
@ -0,0 +1,15 @@
|
||||
集群管理概述
|
||||
===========================
|
||||
|
||||
OceanBase 集群由多个 Zone 和多台 OBServer 构成。
|
||||
|
||||
OceanBase 集群的唯一标识是集群名称和集群 ID。集群管理实现了集群的创建、重启和下线等功能。同时可以通过增加或减少 Zone 以及 OBServer 来实现集群的扩容和缩容。
|
||||
|
||||
通过集群的扩容或缩容功能可以扩展 OceanBase 集群的弹性能力。在已经实现 3 副本同城机房级别容灾的情况下,可以扩展集群到 3 中心 5 副本的方式实现城市级别容灾。扩容和下线功能同样可以使用于机器的替换和维修。例如任意服务器硬件故障,可以通过集群扩容的方式添加新的服务器到集群,将硬件问题服务器下线。整个操作过程中集群的节点数量在前后保持一致,同时集群的 RootService 服务会自动探测新节点并自动进行补副本动作。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -0,0 +1,20 @@
|
||||
集群参数管理概述
|
||||
=============================
|
||||
|
||||
OceanBase 集群配置可以通过集群参数和租户参数来设定。通过参数的设定可以使 OceanBase 数据库的行为符合您业务的要求。
|
||||
|
||||
OceanBase 数据库的集群参数分为集群级别和租户级别,同时参数分为动态生效和重启生效两类。通过集群参数的设置可以控制集群的负载均衡、合并时间、合并方式、资源分配和模块开关等功能。
|
||||
|
||||
系统租户可以查看和设置所有其他租户的参数(包括 sys 租户)。普通租户只能设置自己租户的参数。
|
||||
|
||||
不同租户对集群参数的查看和修改级别如下表所示。
|
||||
|
||||
|
||||
| 租户类型 | 参数查看 | 参数设置 |
|
||||
|------|---------------|------------------|
|
||||
| 系统租户 | 查看集群参数和其他租户参数 | 可以设置集群参数或指定租户的参数 |
|
||||
| 普通租户 | 只能查看本租户的参数 | 只能设置本租户的参数 |
|
||||
|
||||
|
||||
|
||||
当 OBServer 启动后,如果没有指定参数,则使用系统指定的参数 Default 值。在 observer 进程启动成功后,参数值持久化到 `/home/admin/oceanbase/etc/observer.config.bin` 文件中,您可以通过 `strings` 命令来查看内容。
|
||||
@ -0,0 +1,116 @@
|
||||
查询集群参数
|
||||
===========================
|
||||
|
||||
您可以通过 SQL 语句或 OCP 查询集群参数。
|
||||
|
||||
通过 SQL 语句查询
|
||||
--------------------------------
|
||||
|
||||
系统租户和普通租户查询集群参数的语句如下所示:
|
||||
|
||||
* 系统租户查询集群参数的语法
|
||||
|
||||
```sql
|
||||
SHOW PARAMETERS [SHOW_PARAM_OPTS] [tenant='tenant'];
|
||||
```
|
||||
|
||||
|
||||
|
||||
* 普通租户查询集群参数的语法
|
||||
|
||||
```sql
|
||||
SHOW PARAMETERS [SHOW_PARAM_OPTS]
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
其中各参数的含义如下:
|
||||
|
||||
* `[SHOW_PARAM_OPTS]` :值可指定为 `[LIKE 'pattern' | WHERE expr]`。
|
||||
|
||||
* ` [tenant='tenant']` :系统租户查看集群参数时需指定租户名。
|
||||
|
||||
|
||||
|
||||
|
||||
具体示例如下所示:
|
||||
|
||||
* 系统租户
|
||||
|
||||
```sql
|
||||
obclient> SHOW PARAMETERS LIKE 'sql_work_area' tenant=t1;obclient> SHOW PARAMETERS WHERE edit_level='static_effective' AND name='sql_work_area' tenant=t1;
|
||||
```
|
||||
|
||||
|
||||
|
||||
* 普通租户
|
||||
|
||||
```sql
|
||||
obclient> SHOW PARAMETERS LIKE 'sql_work_area';
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
`SHOW PARAMETERS` 返回结果中的列属性如下表所示。
|
||||
|
||||
|
||||
| 列名 | 含义 |
|
||||
|------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
||||
| zone | 所在的 Zone。 |
|
||||
| svr_ip | 机器 IP。 |
|
||||
| svr_port | 机器的端口。 |
|
||||
| name | 配置项名。 |
|
||||
| data_type | 配置项的数据类型,包括 `NUMBER`、`STRING`、`CAPACITY` 等。 |
|
||||
| value | 配置项的值。 |
|
||||
| info | 配置项的说明信息, |
|
||||
| section | 配置项所属的分类。 |
|
||||
| scope | 配置项范围属性: * `TENANT`:租户级别 * `CLUSTER`:集群级别 |
|
||||
| source | 当前值来源: * `TENANT` * `CLUSTER` * `CMDLINE` * `OBADMIN` * `FILE` * `DEFAULT` |
|
||||
| edit_level | 定义该配置项的修改行为: * `READONLY`:表示该参数不可修改。 * `STATIC_EFFECTIVE`:表示该参数可修改但需要重启 OBServer 才会⽣效。 * `DYNAMIC_EFFECTIVE`:表示该参数可修改且修改后动态⽣效。 |
|
||||
|
||||
|
||||
|
||||
通过 OCP 查询
|
||||
------------------------------
|
||||
|
||||
**说明**
|
||||
|
||||
|
||||
|
||||
不同 OCP 版本的操作界面可能不同,本节以 OCP V3.1.0 版本为例提供操作指导,OCP 其他版本的操作请参考对应版本的《 OCP 用户指南》文档。
|
||||
|
||||
1. 登录 OCP 。默认进入 **集群概览** 页面。
|
||||
|
||||
|
||||
|
||||
2. 在 **集群概览** 页面的 **集群列表** 区域,选择待操作的集群并单击其集群名。
|
||||
|
||||
|
||||
|
||||
3. 在显示的页面的左侧导航栏上,单击 **参数管理** 。
|
||||
|
||||
|
||||
|
||||
4. 在 **参数列表** 页面,可以查看当前集群所有参数的信息,包括各参数的参数名称、取值类型、取值范围、默认值、当前值、参数说明和是否重启生效等信息。
|
||||
|
||||
**说明**
|
||||
* 如果 **当前值** 是集群范围内统一,则如上图 **backup_region** 的参数值所示,表示 **0(集群)** 。
|
||||
|
||||
|
||||
|
||||
* 如果参数在 Zone 或者 Server 级别不一样,则会显示所有值的组合,例如, **12;10 自定义)**
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -0,0 +1,159 @@
|
||||
修改集群参数
|
||||
===========================
|
||||
|
||||
您可以通过 SQL 语句或 OCP 修改集群参数。
|
||||
|
||||
通过 SQL 语句修改集群参数
|
||||
------------------------------------
|
||||
|
||||
集群参数即配置项,修改配置项的语法如下所示,同时修改多个系统配置项时,请用逗号(,)分隔。
|
||||
|
||||
```sql
|
||||
ALTER SYSTEM SET param_name = expr
|
||||
[COMMENT 'text']
|
||||
[PARAM_OPTS]
|
||||
[TENANT = 'tenantname']
|
||||
|
||||
PARAM_OPTS:
|
||||
[ZONE='zone' | SERVER='server_ip:rpc_port']
|
||||
```
|
||||
|
||||
|
||||
|
||||
参数修改语句说明如下:
|
||||
|
||||
* `PARAM_OPTS` 是修改配置项时所指定的其它限定条件,例如,指定 Zone、指定 Server 等。
|
||||
|
||||
|
||||
|
||||
* `ALTER SYSTEM` 语句不能同时指定 Zone 和 Server。并且在指定 Zone 时,仅支持指定一个 Zone;指定 Server 时,仅支持指定一个 Server。
|
||||
|
||||
|
||||
|
||||
* 集群级别的配置项(`Scope`) 不能通过普通租户设置,也不可以通过 sys 租户指定普通租户来设置。例如,`ALTER SYSTEM SET memory_limit='100G' TENANT='test_tenant'` 将导致报错,因为 `memory_limit` 是集群级别(`Scope`)的配置项。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
集群级别与租户级别的配置项设置会有所不同:
|
||||
|
||||
* 系统租户设置集群配置项的语法
|
||||
|
||||
```sql
|
||||
ALTER SYSTEM SET mysql_port=8888 [PARAM_OPTS]
|
||||
```
|
||||
|
||||
|
||||
|
||||
* 系统租户设置租户配置项的语法
|
||||
|
||||
```sql
|
||||
ALTER SYSTEM SET clog_max_unconfirmed_log_count=1600 [PARAM_OPTS] TENANT=all|TENANT_NAME
|
||||
```
|
||||
|
||||
|
||||
|
||||
* 租户设置租户配置项的语法
|
||||
|
||||
```sql
|
||||
ALTER SYSTEM SET clog_max_unconfirmed_log_count=1600 [PARAM_OPTS]
|
||||
```
|
||||
|
||||
|
||||
|
||||
系统租户也可以使用该命令修改系统租户本身的租户配置项的值。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
示例如下:
|
||||
|
||||
* 系统租户设置集群配置项。
|
||||
|
||||
```sql
|
||||
obclient> ALTER SYSTEM SET mysql_port=8888;
|
||||
|
||||
obclient> ALTER SYSTEM SET mysql_port=8888 ZONE='z1';
|
||||
|
||||
obclient> ALTER SYSTEM SET mysql_port=8888 SERVER='192.168.100.1:2882';
|
||||
```
|
||||
|
||||
|
||||
|
||||
* 系统租户设置租户配置项。
|
||||
|
||||
```sql
|
||||
obclient> ALTER SYSTEM SET clog_max_unconfirmed_log_count=1600 tenant='test_tenant';
|
||||
```
|
||||
|
||||
|
||||
|
||||
* 租户设置租户配置项。
|
||||
|
||||
```sql
|
||||
obclient> ALTER SYSTEM SET clog_max_unconfirmed_log_count=1600;
|
||||
|
||||
obclient> ALTER SYSTEM SET memory_limit = '100G' SERVER='192.168.100.1:2882';
|
||||
|
||||
obclient> ALTER SYSTEM SET memory_limit = '100G' ZONE='z1';
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
更多配置项信息,请参见《参考指南》文档中 [系统配置项](../../../../14.reference-guide-oracle-mode/3.system-configuration-items-1/1.system-configuration-items-overview-1.md) 章节。
|
||||
|
||||
更多配置项信息,请参见《参考指南》文档中 [系统配置项概述](../../../../14.reference-guide-oracle-mode/3.system-configuration-items-1/1.system-configuration-items-overview-1.md) 章节。
|
||||
|
||||
通过 OCP 修改集群参数
|
||||
----------------------------------
|
||||
|
||||
**说明**
|
||||
|
||||
不同 OCP 版本的操作界面可能不同,本节以 OCP V2.5.0 版本为例提供操作指导,OCP 其他版本的操作请参考对应版本的《 OCP 用户指南》文档。
|
||||
|
||||
1. 登录 OCP 。
|
||||
|
||||
默认进入 **集群概览** 页面。
|
||||
|
||||
|
||||
2. 在 **集群概览** 页面的 **集群列表** 区域,选择待操作的集群并单击其集群名。
|
||||
|
||||
|
||||
|
||||
3. 在显示的页面的左侧导航栏上,单击 **参数管理** 。
|
||||
|
||||
|
||||
|
||||
4. (可选)在 **参数列表** 页面上方的搜索框中,输入参数名相关信息进行模糊搜索。
|
||||
|
||||

|
||||
|
||||
|
||||
5. 找到待修改的参数,在对应的 **操作** 列中,单击 **修改值** 。
|
||||
|
||||
|
||||
|
||||
6. 在弹出的对话框中,修改参数的值及生效范围,单击 **确定** 。
|
||||
|
||||

|
||||
|
||||
由于 OceanBase 集群参数可以有全局(即 **集群** )、Zone 和 Server 三种生效范围,故在修改值时请根据业务需要选择生效范围。
|
||||
|
||||
默认生效范围是 **集群** 。如果需要调整到 Zone 或 Server 的生效范围,则可以在 **生效范围** 列取消选中 **集群** ,此时系统会显示集群下的 Zone 列表。根据提示选择 Zone 并选中,则选中了 Zone 的生效范围;如果选择 Zone 后,继续选择该 Zone 下的 Server 列表,则在 Server 范围生效。
|
||||
|
||||
如果需要修改参数的值同时在不同的范围生效,例如,修改 **backup_concurrency** 在 **Zone 1** 为 **10** ;在 **Zone 2** 为 **12** ;在 **Server 1** 上为 **20** ,则可以在 **值** 列单击 **添加值** 后出现 3 行记录。每行记录可以选中对应的生效范围。
|
||||
**说明**
|
||||
|
||||
|
||||
|
||||
如果单击 **添加值** 后出现多行修改值时,对集群的参数修改顺序是从第一行往下依次执行,并且每次执行成功后,会在 OCP 的 **修改历史** 页签中产生一条历史记录。
|
||||
|
||||
|
||||
|
||||
|
||||
@ -0,0 +1,28 @@
|
||||
Zone 管理概述
|
||||
==============================
|
||||
|
||||
|
||||
|
||||
一个 OceanBase 集群,由若干个 Zone 组成。Zone 是可用区(Availability Zone)的简写。Zone 本身是一个逻辑概念,是对物理机进行管理的容器,一般是同一机房的一组机器的组合。物理层面来讲一个 Zone 通常等价于一个机房、一个数据中心或一个 IDC。为交付高级别的数据安全性和服务可用性能力,一个 OceanBase 集群通常会分布在同城的 3 个机房中,同一份数据的三个副本分别分布在 3 个机房中(即三个 Zone 中)。
|
||||
|
||||
OceanBase 数据库支持数据跨地域(Region)部署,且不同 Region 的距离通常较远,从而满足地域级容灾的需求。一个 Region 可以包含一个或者多个 Zone。例如,某 OceanBase 集群部署在某城市(某一 Region)且分布在三个 IDC 机房中,每个 IDC 机房中又有 3 台服务器,所以每个 IDC 机房的中的这 3 台服务器组合成一个 Zone。
|
||||
**注意**
|
||||
|
||||
|
||||
|
||||
1. Region 并不是一个 OceanBase 的对象定义,而是 Zone 的关键属性之一。
|
||||
|
||||
|
||||
|
||||
2. 对于租户、数据库、数据分区(表和索引等)不同级别均有主可用区(Primary Zone)的属性配置,可用于支持高可用和负载均衡能力。
|
||||
|
||||
|
||||
|
||||
3. 对于租户级别有只读可用区(Read Zone 简称 RZone)的属性配置,用于交付高可用和负载均衡能力,也是针对读写分离场景的一种方案。相比主可用区属性配置,只读可用区需要在原有副本组(Paxos 组)的基础上追加 1 个或多个副本。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||

|
||||
@ -0,0 +1,111 @@
|
||||
增加或删除 Zone
|
||||
===============================
|
||||
|
||||
您可以通过命 SQL 语句或 OCP 来增加或删除 Zone。
|
||||
|
||||
通过 SQL 语句增加或删除 Zone
|
||||
----------------------------------------
|
||||
|
||||
在集群中增加或删除 Zone 的操作通常用于集群扩容或缩容等需求场景。
|
||||
|
||||
增加或删除 Zone 的命令如下所示,其中参数 `Zone_Name` 为目标 Zone 的名称。
|
||||
|
||||
```sql
|
||||
ALTER SYSTEM {ADD|DELETE} ZONE Zone_Name;
|
||||
```
|
||||
|
||||
|
||||
|
||||
**示例 1:** 下述示例语句展示了在集群中新增一个名为 `Zone1`的 Zone。
|
||||
|
||||
```sql
|
||||
obclient> ALTER SYSTEM ADD ZONE Zone1;
|
||||
```
|
||||
|
||||
**示例 2** :下述示语句展示了在集群中删除名为 `Zone1`的 Zone。
|
||||
|
||||
|
||||
|
||||
```sql
|
||||
obclient> ALTER SYSTEM DELETE ZONE Zone1;
|
||||
```
|
||||
|
||||
|
||||
|
||||
通过 OCP 增加 Zone
|
||||
-----------------------------------
|
||||
|
||||
**说明**
|
||||
|
||||
|
||||
|
||||
不同 OCP 版本的操作界面可能不同,本节以 OCP V2.5.0 版本为例提供操作指导,OCP 其他版本的操作请参考对应版本的《OCP 用户指南》文档。
|
||||
|
||||
在集群中,根据实际部署模式增加 Zone。
|
||||
|
||||
1. 登录 OCP。
|
||||
|
||||
默认进入 **集群概览** 页面。
|
||||
|
||||
|
||||
2. 在 **集群概览** 页面的 **集群列表** 区域,选择待增加 Zone 的集群并单击其集群名。
|
||||
|
||||
|
||||
|
||||
3. 在 **总览** 页面右上角,单击 **新增 Zone** 。
|
||||
|
||||
|
||||
|
||||
4. 在弹出的对话框中,设置 Zone 信息。
|
||||
|
||||
默认是添加一个 Zone 信息,如果您需要添加多个 Zone ,可以在下方单击 **新增** 按钮,添加多个 Zone 信息。
|
||||
|
||||
需要配置的 Zone 信息如下表所示。
|
||||
|
||||
|
||||
| 配置 | 描述 |
|
||||
|-------------|-------------------------------------------------------------------------------------------------------------------|
|
||||
| **Zone 名称** | 自定义 Zone 名称。 |
|
||||
| **机房** | Zone 所在的机房。 |
|
||||
| **机型** | 可选项。如果选择了机型,后面主机列表会根据机型进行过滤。 |
|
||||
| **机器选择方式** | 可以选择自动分配或者手动选择。 |
|
||||
| **IP** | 您可以选择多个 IP。如果 **机器选择方式** 是 **自动分配** ,则只需要输入机器的数量,OCP 会自动选择相应数量的可用机器;如果 **机器选择方式** 是 **手动选择** ,则需要您手动从列表中选择若干个 IP。 |
|
||||
|
||||
|
||||
|
||||
5. 完成后,单击 **确定** 。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
通过 OCP 删除 Zone
|
||||
-----------------------------------
|
||||
|
||||
在集群中,根据实际部署模式下线 Zone。
|
||||
**注意**
|
||||
|
||||
|
||||
|
||||
相比停止和删除 Zone 命令,OCP 中提供的删除 Zone 功能是删除数据副本并下线 Zone 内所有 OceanBase 服务器节点操作的组合。
|
||||
|
||||
1. 登录 OCP。
|
||||
|
||||
默认进入 **集群概览** 页面。
|
||||
|
||||
|
||||
2. 在 **集群概览** 页面的 **集群列表** 区域,选择待操作的集群并单击其集群名。
|
||||
|
||||
|
||||
|
||||
3. 在 **总览** 页面的 **Zone 列表** 区域,选择待删除的 Zone,在对应的 **操作** 列中,单击 ... 图标,选择 **删除** 。
|
||||
|
||||
|
||||
|
||||
4. 在弹出的确认框中,单击 **删除** 。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -0,0 +1,157 @@
|
||||
增加或删除加密 Zone
|
||||
=================================
|
||||
|
||||
OceanBase 数据库提供了 Zone 级别的日志传输和保存加密功能,您可以在集群中添加 Zone 时,指定 Zone 的加密属性,后续在向该加密 Zone 发送日志时,系统会对 Clog 进行加密,并且该 Zone 在持久化 Clog 时也会加密。
|
||||
|
||||
添加加密 Zone
|
||||
------------------------------
|
||||
|
||||
本节以下述集群为例,提供加密 Zone 的添加方法。
|
||||
|
||||
假设集群中已有 2个 Zone: `z1` 和 `z2`,需要添加一个Zone `z3`。其中,`z1` 和 `z2` 是常规读写 Zone,`z3` 是加密 Zone,`z3` 只包含加密的事务日志数据。
|
||||
|
||||
添加加密 Zone 的步骤如下:
|
||||
|
||||
1. 使用 root 用户登录数据库的 sys 租户。
|
||||
|
||||
|
||||
|
||||
2. 依次执行以下语句,生成主密钥。
|
||||
|
||||
```sql
|
||||
obclient> ALTER SYSTEM set tde_method = 'internal';
|
||||
|
||||
obclient>ALTER INSTANCE ROTATE INNODB MASTER KEY;
|
||||
```
|
||||
|
||||
|
||||
|
||||
3. 执行以下语句,检查上一步中生成的主密钥是否生效。
|
||||
|
||||
```sql
|
||||
obclient> SELECT min(max_active_version) FROM oceanbase.__all_virtual_master_key_version_info WHERE tenant_id = 1;
|
||||
```
|
||||
|
||||
|
||||
|
||||
当查询结果中 `min(max_active_version) `大于 `0` 时,则表示主密钥已生效,否则主密钥没有生效。
|
||||
|
||||
虚拟表 `__all_virtual_master_key_version_info` 用于记录每个 OBServer 上主密钥的版本信息,其表结构如下:
|
||||
|
||||
```unknow
|
||||
table_name = '__all_virtual_master_key_version_info',
|
||||
|
||||
rowkey_columns = [
|
||||
('svr_ip', 'varchar:MAX_IP_ADDR_LENGTH'),
|
||||
('svr_port', 'int'),
|
||||
('tenant_id', 'int'),
|
||||
],
|
||||
normal_columns = [
|
||||
('max_active_version', 'int'),
|
||||
('max_stored_version', 'int'),
|
||||
('expect_version', 'int'),
|
||||
]
|
||||
```
|
||||
|
||||
|
||||
|
||||
每个 OBServer 上的每一个租户的主密钥信息占据该虚拟表中的一行。其中:
|
||||
* `expect_version` 表示集群中该租户当前已生成的主密钥的最大版本。
|
||||
|
||||
|
||||
|
||||
* `max_stored_version` 表示对应 OBServer 在其本地持久化中,该租户的主密钥的最大版本。
|
||||
|
||||
|
||||
|
||||
* `max_active_version` 表示对应 OBServer 在进行加密时,该租户可以使用的主密钥的最大版本,`max_active_version` 等于 `0` 表示没有已经生效的主密钥。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
4. 执行以下命令,添加加密 Zone。
|
||||
|
||||
**注意**
|
||||
|
||||
|
||||
|
||||
在添加加密 Zone 前,系统租户必须要有一个已生效的主密钥,如果系统租户没有一个生效的主密钥,则执行添加加密 zone 的语句会失败。
|
||||
|
||||
```sql
|
||||
obclient> ALTER SYSTEM ADD Zone 'z3' zone_type = 'encryption';
|
||||
```
|
||||
|
||||
|
||||
|
||||
5. 分别执行以下命令,调整系统租户的 Locality。
|
||||
|
||||
由于集群之前为 2 副本,为保证系统租户的高可用,在添加完加密 Zone 后,需要将系统租户补充为 3 副本。
|
||||
|
||||
```sql
|
||||
obclient> CREATE RESOURCE POOL sys_pool2 unit_num = 1, resource_pool_list=('z3'), unit='sys_unit_config';
|
||||
|
||||
obclient> ALTER TENANT sys resource_pool_list = ('sys_pool','sys_pool2');
|
||||
|
||||
obclient> ALTER TENANT sys LOCALITY = 'F@z1,F@z2,E@z3';
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
轮转主密钥
|
||||
--------------------------
|
||||
|
||||
当用户希望更换主密钥时,管理员可以为加密 Zone 轮转主密钥。
|
||||
|
||||
1. 使用 root 用户登录数据库的 sys 租户。
|
||||
|
||||
|
||||
|
||||
2. 执行以下语句,为加密 Zone 轮转主密钥。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
```sql
|
||||
obclient> ALTER INSTANCE ROTATE INNODB MASTER KEY;
|
||||
```
|
||||
|
||||
|
||||
**说明**
|
||||
|
||||
|
||||
|
||||
在轮转主密钥时,如果出现了 OBServer 宕机,加密 Zone 上的 OBServer 宕机不会对主密钥生效产生影响,但常规 Zone 上的 OBServer 宕机对主密钥的生效可能产生影响,可能会导致轮转生成的新主密钥不能立即生效。
|
||||
|
||||
删除加密 Zone
|
||||
------------------------------
|
||||
|
||||
加密 Zone 添加成功后,如果需要删除加密 Zone,其操作与常规读写 Zone 的删除操作相同,您可以使用以下语句删除该加密 Zone:
|
||||
|
||||
```sql
|
||||
obclient> ALTER SYSTEM DELETE ZONE 'z3';
|
||||
```
|
||||
|
||||
|
||||
|
||||
加密 Zone 使用限制
|
||||
---------------------------------
|
||||
|
||||
加密 Zone 和加密投票型副本的使用有一定限制,具体限制如下:
|
||||
|
||||
* 加密 Zone 上仅支持部署加密投票型副本,不支持部署其他类型的副本,例如全功能副本、只读副本、普通日志副本等均不能部署在加密 Zone 上。
|
||||
|
||||
|
||||
|
||||
* 加密投票型副本仅支持部署在加密 Zone 上,不支持部署在常规读写 Zone上。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -0,0 +1,69 @@
|
||||
启动或停止 Zone
|
||||
===============================
|
||||
|
||||
您可以通过 SQL 语句或 OCP 来启动或停止 Zone。
|
||||
|
||||
通过 SQL 语句启动和停止
|
||||
-----------------------------------
|
||||
|
||||
在集群中启动或停止 Zone 的操作通常用于允许或禁止 Zone 内的所有物理服务器对外提供服务的需求场景。
|
||||
|
||||
启动或停止 Zone 的命令如下所示,其中参数 `zone_name` 为目标 Zone 的名称:
|
||||
|
||||
```sql
|
||||
ALTER SYSTEM {START|STOP|FORCE STOP} ZONE zone_name;
|
||||
```
|
||||
|
||||
|
||||
|
||||
**示例 1** :在集群中启动名为 `Zone1`的 Zone。
|
||||
|
||||
```sql
|
||||
obclient> ALTER SYSTEM START ZONE Zone1;
|
||||
```
|
||||
|
||||
|
||||
|
||||
**示例 2** :在集群中停止运行名为 `Zone1`的 Zone。
|
||||
|
||||
```sql
|
||||
obclient> ALTER SYSTEM STOP ZONE Zone1;
|
||||
```
|
||||
|
||||
|
||||
|
||||
**示例 3** :在集群中停止运行名为 `Zone1`的 Zone。
|
||||
**说明**
|
||||
|
||||
|
||||
|
||||
`FORCE STOP ZONE` 不会检查 Zone 内的 clog 是否同步,而是直接停止 Zone。
|
||||
|
||||
```sql
|
||||
obclient> ALTER SYSTEM FORCE STOP ZONE Zone1;
|
||||
```
|
||||
|
||||
|
||||
|
||||
通过 OCP 启动和停止
|
||||
---------------------------------
|
||||
|
||||
**说明**
|
||||
|
||||
不同 OCP 版本的操作界面可能不同,本节以 OCP V2.5.0 版本为例提供操作指导,OCP 其他版本的操作请参考对应版本的《 OCP 用户指南》文档。
|
||||
|
||||
1. 登录 OCP。
|
||||
|
||||
默认进入 **集群概览** 页面。
|
||||
|
||||
|
||||
2. 在 **集群概览** 页面的 **集群列表** 区域,选择待操作的集群并单击其集群名。
|
||||
|
||||
|
||||
|
||||
3. 在 **总览** 页面的 **Zone 列表** 区域,选择待操作的 Zone,在对应的 **操作** 列中,单击 ... 图标,选择 **启动** 或 **停止** 。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -0,0 +1,25 @@
|
||||
修改 Zone
|
||||
============================
|
||||
|
||||
OceanBase 数据库提供了 SQL 语句来修改 Zone 的配置信息。
|
||||
|
||||
修改 Zone 的命令如下所示:
|
||||
|
||||
```sql
|
||||
ALTER SYSTEM {ALTER|CHANGE|MODIFY} ZONE Zone_Name SET [Zone_Option_List];
|
||||
```
|
||||
|
||||
|
||||
|
||||
其中各参数的含义如下:
|
||||
|
||||
* `Zone_Name`:指定 Zone 的名称。
|
||||
|
||||
* `[Zone_Option_List]`:指定目标 Zone 要被修改的属性,同时修改多个属性时各属性之前用逗号(,)分隔。下述为 Zone 中的属性:
|
||||
|
||||
|
||||
|
||||
|
||||
<!-- -->
|
||||
|
||||
|
||||
@ -0,0 +1,6 @@
|
||||
OBServer 管理概述
|
||||
==================================
|
||||
|
||||
OceanBase Server(简称 OBServer) 是一个 OceanBase 数据库的节点(节点不完全等同于物理机器)。 observer 是节点上运行的分布式数据库内核进程的名字。
|
||||
|
||||
每一个 OceanBase 数据库的进程 observer 由 IP 和端口作为唯一标识。通常一台物理或者虚拟服务器运行一个 observer 进程。observer 进程作为 OceanBase 数据库最核心的进程负责几乎所有数据库内核功能,包括 SQL 引擎、存储引擎和事务引擎。分布式的功能也同样在这个进程中,包括 RPC 通信、负载均衡和分区管理等。
|
||||
@ -0,0 +1,47 @@
|
||||
查看 OBServer 状态
|
||||
===================================
|
||||
|
||||
您可以通过命令或 OCP 来查看 OBServer 的状态。
|
||||
|
||||
通过命令查看 observer 进程
|
||||
---------------------------------------
|
||||
|
||||
1. 登录 OBServer 所在的宿主机。
|
||||
|
||||
|
||||
|
||||
2. 在命令行工具中运行以下语句以查看 observer 进程。
|
||||
|
||||
```shell
|
||||
ps -ef |grep observer
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
通过 OCP 查看 OBServer 状态
|
||||
------------------------------------------
|
||||
|
||||
**说明**
|
||||
|
||||
|
||||
|
||||
不同 OCP 版本的操作界面可能不同,本节以 OCP V2.5.0 版本为例提供操作指导,OCP 其他版本的操作请参考对应版本的《OCP 用户指南》文档。
|
||||
|
||||
1. 登录 OCP。
|
||||
|
||||
默认进入 **集群概览** 页面。
|
||||
|
||||
|
||||
2. 在 **集群概览** 页面的 **集群列表** 区域,选择待操作的集群并单击其集群名。
|
||||
|
||||
|
||||
|
||||
3. 在 **总览** 页面的 **OBServer 列表** 区域,查看集群中的 OBServer 状态。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -0,0 +1,53 @@
|
||||
停止 OBServer
|
||||
================================
|
||||
|
||||
您可以通过命令或 OCP 来停止 OBServer 的运行。
|
||||
|
||||
通过命令停止 observer 进程
|
||||
---------------------------------------
|
||||
|
||||
登录 OBServer 所在的宿主机,在命令行工具中执行以下语句,停止 observer 进程。
|
||||
|
||||
```shell
|
||||
kill -15 `pgrep observer`
|
||||
```
|
||||
|
||||
|
||||
|
||||
如果遇到无法正常退出的情况,可以执行以下语句。
|
||||
|
||||
```shell
|
||||
kill -9 `pgrep observer`
|
||||
```
|
||||
|
||||
|
||||
|
||||
通过 OCP 停止 OBServer
|
||||
---------------------------------------
|
||||
|
||||
**说明**
|
||||
|
||||
|
||||
|
||||
不同 OCP 版本的操作界面可能不同,本节以 OCP V2.5.0 版本为例提供操作指导,OCP 其他版本的操作请参考对应版本的《OCP 用户指南》文档。
|
||||
|
||||
1. 登录 OCP。
|
||||
|
||||
默认进入 **集群概览** 页面。
|
||||
|
||||
|
||||
2. 在 **集群概览** 页面的 **集群列表** 区域,选择待操作的集群并单击其集群名。
|
||||
|
||||
|
||||
|
||||
3. 在 **总览** 页面的 **OBServer 列表** 区域,找到待启动的 OBServer,在对应的 **操作** 列中,单击 **停止** 。
|
||||
|
||||

|
||||
|
||||
|
||||
4. 在弹出的确认框中,单击 **停止** 。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -0,0 +1,129 @@
|
||||
启动 OBServer
|
||||
================================
|
||||
|
||||
您可以通过命令或 OCP 来启动 OBServer,使其处于运行状态。
|
||||
|
||||
通过命令启动 observer 进程
|
||||
---------------------------------------
|
||||
|
||||
登录 OBServer 所在的宿主机,通过命令行工具进入 `/home/admin/oceanbase/bin` 目录,运行下述命令启动 observer 进程。
|
||||
|
||||
```shell
|
||||
cd /home/admin/oceanbase/
|
||||
|
||||
./bin/observer [启动参数]
|
||||
```
|
||||
|
||||
|
||||
|
||||
同时,可以运行 `./bin/observer --help` 查看 observer 启动参数的详细信息。
|
||||
|
||||
启动 observer 进程的命令示例如下:
|
||||
|
||||
```shell
|
||||
cd /home/admin/oceanbase/bin
|
||||
|
||||
./observer -p 2881 -P 2882 -z 'zone_1' -d '/data/1/prod_data/' -r '192.168.1.1:2882:2881;192.168.1.2:2882:2881;192.168.1.3:2882:2881' -l WARN -d '/data/1/prod_data' -o 'memory_limit=100GB,datafile_disk_percentage=85'
|
||||
```
|
||||
|
||||
|
||||
|
||||
其中:
|
||||
|
||||
* `2881`:表示 MySQL 的访问端口。
|
||||
|
||||
|
||||
|
||||
* `2882`:表示远程访问端口。
|
||||
|
||||
|
||||
|
||||
* `zone_1`:表示 Zone 名称。
|
||||
|
||||
|
||||
|
||||
* `/data/1/prod_data`:表示数据盘目录。
|
||||
|
||||
|
||||
|
||||
* `datafile_disk_percentage=85`:表示数据盘的占用比率为 85%。
|
||||
|
||||
|
||||
|
||||
* `192.168.1.1和``192.168.1.2` 和 `192.168.1.3`:表示 rs_list。
|
||||
|
||||
|
||||
|
||||
* `memory_limit=100GB`:表示进程启动内存上限为 100 GB。
|
||||
|
||||
|
||||
|
||||
* `WARN`:表示 log_level 为 WARNING 级别。
|
||||
|
||||
|
||||
|
||||
* 使用 `-o` 参数时,需满足以下条件:
|
||||
|
||||
* 不分大小写,但是推荐按照 `observer.config.bin` 中的变量名称来写。
|
||||
|
||||
|
||||
|
||||
* 参数不能包含以下特殊字符:
|
||||
|
||||
* 空格
|
||||
|
||||
|
||||
|
||||
* \\r
|
||||
|
||||
|
||||
|
||||
* \\n
|
||||
|
||||
|
||||
|
||||
* \\t
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
* 参数名和参数值中间必须有等号(=)。
|
||||
|
||||
|
||||
|
||||
* 参数之间使用逗号(,)进行分割。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
通过 OCP 启动 OBServer
|
||||
---------------------------------------
|
||||
|
||||
**说明**
|
||||
|
||||
|
||||
|
||||
不同 OCP 版本的操作界面可能不同,本节以 OCP V2.5.0 版本为例提供操作指导,OCP 其他版本的操作请参考对应版本的《OCP 用户指南》文档。
|
||||
|
||||
1. 登录 OCP。
|
||||
|
||||
默认进入 **集群概览** 页面。
|
||||
|
||||
|
||||
2. 在 **集群概览** 页面的 **集群列表** 区域,选择待操作的集群并单击其集群名。
|
||||
|
||||
|
||||
|
||||
3. 在 **总览** 页面的 **OBServer 列表** 区域,找到待启动的 OBServer,在对应的 **操作** 列中,单击 **启动** 。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -0,0 +1,146 @@
|
||||
管理 OBServer 节点状态
|
||||
=====================================
|
||||
|
||||
OceanBase 数据库提供了命令行方式来管理 OBServer 的节点状态
|
||||
|
||||
在运维操作中,如果需要替换节点、维修节点或者对节点进行诊断,可以通过 `STOP SERVER` 命令将该节点的分区 Leader 切到其他节点上。然后该 Server 状态将变为 `stopped` 并且不会对外提供服务。
|
||||
|
||||
节点的 `stopped` 状态并非等价于进程退出,进程可能仍然在运行,仅仅是集群的状态标志认为该节点为 `stopped` 状态。同理与之对应的是节点的 `started` 状态。
|
||||
|
||||
|
||||
|
||||
**Start Server 操作**
|
||||
----------------------------------------
|
||||
|
||||
Start Server 操作对应 Stop Server 操作。当集群中的 OBServer 启动后,默认状态是 `started`。在执行 Stop Server 操作后,需要通过 Start Server 操作将 Server 状态置为 `started`。Start Server 操作的命令如下所示:
|
||||
|
||||
```sql
|
||||
ALTER SYSTEM START SERVER 'ip:port' [,'ip:port'...] [ZONE='zone']
|
||||
```
|
||||
|
||||
|
||||
|
||||
示例语句如下所示:
|
||||
|
||||
```sql
|
||||
obclient> ALTER SYSTEM START SERVER "10.10.10.1:2882"
|
||||
```
|
||||
|
||||
|
||||
|
||||
**Stop Server 操作**
|
||||
---------------------------------------
|
||||
|
||||
Stop Server 操作的目的是将该 Server 上的分区 Leader 切到其他节点。当该 Server 上没有分区 Leader 的情况下,系统将内部标记 Server 为 `stopped` 状态,客户端请求不会再次发送到该 Server,该 Server 也不会再对外提供服务。
|
||||
|
||||
Stop Server 操作通常是特殊运维操作时执行,比如机器硬件维修、替换和升级,或者对该 Server 进行诊断等而进行的动作。Stop Server 操作的命令如下所示:
|
||||
|
||||
```sql
|
||||
ALTER SYSTEM STOP SERVER 'ip:port' [,'ip:port'...] [ZONE='zone']
|
||||
```
|
||||
|
||||
|
||||
|
||||
示例语句如下所示:
|
||||
|
||||
```sql
|
||||
obclient> ALTER SYSTEM STOP SERVER "10.10.10.1:2882" zone='z1'
|
||||
```
|
||||
|
||||
|
||||
|
||||
**Add Server 操作**
|
||||
--------------------------------------
|
||||
|
||||
Add Server 操作的目的是添加节点到集群,该操作是运维扩容的操作。被添加的新节点要求是空的,即 CLog 和 ILog 目录下为空。Add Server 操作的命令如下所示:
|
||||
|
||||
```sql
|
||||
ALTER SYSTEM ADD SERVER 'ip:port' [,'ip:port'...] [ZONE [=] 'zone']
|
||||
```
|
||||
|
||||
|
||||
|
||||
示例语句如下所示:
|
||||
|
||||
```sql
|
||||
obclient> ALTER SYSTEM ADD SERVER "10.10.10.1:2882" zone='z1'
|
||||
```
|
||||
|
||||
|
||||
|
||||
**Delete Server 操作**
|
||||
-----------------------------------------
|
||||
|
||||
Delete Server 用于从集群中删除节点。Delete Server 操作的命令如下所示:
|
||||
|
||||
```sql
|
||||
ALTER SYSTEM DELETE SERVER 'ip:port' [,'ip:port'...] [ZONE [=] 'zone']
|
||||
```
|
||||
|
||||
|
||||
|
||||
示例语句如下所示:
|
||||
|
||||
```sql
|
||||
obclient> ALTER SYSTEM DELETE SERVER "192.168.100.1:2882" zone='z1'
|
||||
```
|
||||
|
||||
|
||||
|
||||
**Cancel Delete Server 操作**
|
||||
------------------------------------------------
|
||||
|
||||
Delete Server 的动作会涉及到负载均衡。被删除的 Server 上的资源单元会在同一个 Zone 中进行资源单元(Unit)迁移。Unit 的迁移动作是 Unit 自动均衡过程由 RootService 控制。Unit 均衡过程中可能发生资源不足,其他同 Zone 的机器资源不足容纳这个新迁移的 Unit。这样将导致 Unit 迁移失败,通过 `/home/admin/oceanbase/log/rootservice.log` 可以看到迁移 Unit 失败的错误代码 -4624。如果希望取消 Delete Server 动作,可以通过 Cancel Delete Server 操作实现。 Cancel Delete Server 操作的命令如下所示:
|
||||
|
||||
```sql
|
||||
ALTER SYSTEM CANCEL DELETE SERVER 'ip:port' [,'ip:port'...] [ZONE [=] 'zone']
|
||||
```
|
||||
|
||||
|
||||
|
||||
示例语句如下所示:
|
||||
|
||||
```sql
|
||||
obclient> ALTER SYSTEM CANCEL DELETE SERVER "10.10.10.1:2882" zone='z1'
|
||||
```
|
||||
|
||||
|
||||
|
||||
操作限制说明
|
||||
---------------------------
|
||||
|
||||
对节点执行操作时:
|
||||
|
||||
* 不能跨 Zone 执行 Stop Server 操作,同一个 Zone 可以同时 Stop 多个 Server。
|
||||
|
||||
|
||||
|
||||
* 一个 Stop 操作发起没有结束前,不能发起第二个操作。
|
||||
|
||||
|
||||
|
||||
* `enable_auto_leader_switch`参数必须设置为开启。
|
||||
|
||||
* 分区副本满足多数派。
|
||||
|
||||
|
||||
|
||||
* 如果分区数多,或者被 Stop Server 的节点分区的 Leader 数量多, Alter System Stop Server 操作时间会比较长,如果超时,可以加大 SQL 超时时间。
|
||||
|
||||
|
||||
|
||||
* 如果命令很快失败,那么可能是日志不同步。
|
||||
|
||||
|
||||
|
||||
* 检查 `__all_rootservice_event_history `可以确认是否有 Stop Server 动作。
|
||||
|
||||
|
||||
|
||||
* Stop Server 后该 Server 的状态仍为 `Active` ,但 `stop_service_time `的值由 0 变为 Stop Server 的时间点。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -0,0 +1,26 @@
|
||||
资源管理概述
|
||||
===========================
|
||||
|
||||
|
||||
|
||||
OceanBase 数据库是多租户的分布式数据库,租户使用的资源建立在资源池上。资源池包含了资源单元,而资源单元则规定了具体资源的量化(如 CPU、Memory、Disk_Size 和 IOPS 等)。 创建租户前,必须规定租户使用的资源范围,资源池和资源单元就是为了满足租户资源隔离和负载均衡而存在的。
|
||||
|
||||
下述是一些资源管理中的概念:
|
||||
|
||||
* 资源单元(Resource Unit,Unit)
|
||||
|
||||
资源单元是一个容器。实际上,副本是存储在资源单元之中的,所以资源单元是副本的容器。资源单元包含了计算存储资源(Memory、CPU 和 IO 等)同时资源单元也是集群负载均衡的一个基本单位,在集群节点上下线,扩容缩容时会动态调整资源单元在节点上的分布进而达到资源的使用均衡。
|
||||
|
||||
|
||||
* 资源池 (Resource Pool)
|
||||
|
||||
一个租户拥有若干个资源池,这些资源池的集合描述了这个租户所能使用的所有资源。一个资源池由具有相同资源规格(Unit Config)的若干个资源单元组成。一个资源池只能属于一个租户。每个资源单元描述了位于一个 Server 上的一组计算和存储资源,可以视为一个轻量级虚拟机,包括若干 CPU 资源、内存资源、磁盘资源等。一个租户在同一个 Server 上最多有一个资源单元。
|
||||
|
||||
|
||||
* 资源配置(Resource Config)
|
||||
|
||||
资源配置是资源单元的具体配置,包含资源单元所属的资源池信息、使用资源的租户信息、资源单元的配置信息(如 CPU 核数和内存资源)等。修改资源配置可以动态调整资源单元的计算资源,进而调整对应租户的资源。
|
||||
|
||||
|
||||
|
||||
|
||||
@ -0,0 +1,77 @@
|
||||
创建资源单元
|
||||
===========================
|
||||
|
||||
您可以通过 SQL 语句或 OCP 创建资源单元。
|
||||
|
||||
通过 SQL 语句创建
|
||||
--------------------------------
|
||||
|
||||
租户使用的资源被限制在资源单元的范围内,如果当前存在的资源单元配置无法满足新租户的需要,可以新建资源单元。
|
||||
|
||||
下述为创建资源单元语句的语法:
|
||||
|
||||
```sql
|
||||
CREATE RESOURCE UNIT unitname
|
||||
MAX_CPU [=] cpunum,
|
||||
MAX_MEMORY [=] memsize,
|
||||
MAX_IOPS [=] iopsnum,
|
||||
MAX_DISK_SIZE [=] disksize,
|
||||
MAX_SESSION_NUM [=] sessionnum,
|
||||
[MIN_CPU [=] cpunum,]
|
||||
[MIN_MEMORY [=] memsize,]
|
||||
[MIN_IOPS [=] iopsnum] ;
|
||||
```
|
||||
|
||||
|
||||
|
||||
参数说明和取值范围:
|
||||
|
||||
* 语法中提及的参数不能省略,必须指定 CPU、Memory、IOPS、Disk Size 和 Session Num 的大小。
|
||||
|
||||
|
||||
|
||||
* 为参数指定值时,可以采用纯数字不带引号的方式,也可以使用带单位加引号的方式(例如:`'1T'`、`'1G'`、`'1M'`、`'1K'`)。
|
||||
|
||||
例如: `max_memory='10G'` 等效于 `max_memory=10737418240`
|
||||
**说明**
|
||||
|
||||
|
||||
|
||||
为参数指定值时,不建议使用纯数字带引号的方式。
|
||||
|
||||
|
||||
* `MAX_MEMORY` 的取值范围为 \[1073741824,+∞),单位为字节,即最小值为 1 G。
|
||||
|
||||
|
||||
|
||||
* `MAX_IOPS` 的取值范围为 \[128,+∞)。
|
||||
|
||||
|
||||
|
||||
* `MAX_DISK_SIZE` 的取值范围为 \[536870912,+∞\],单位为字节,即最小值为 512 M。
|
||||
|
||||
|
||||
|
||||
* `MAX_SESSION_NUM` 的取值范围为 \[64,+∞)。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
示例:
|
||||
|
||||
```sql
|
||||
obclient> CREATE RESOURCE UNIT unit1 max_cpu 1, max_memory '1G', max_iops 128,max_disk_size '10G', max_session_num 64, MIN_CPU=1, MIN_MEMORY='1G', MIN_IOPS=128;
|
||||
|
||||
obclient> CREATE RESOURCE UNIT unit1 max_cpu 1, max_memory 1073741824, max_iops 128, max_disk_size 10737418240, max_session_num 64, MIN_CPU=1, MIN_MEMORY=1073741824, MIN_IOPS=128;
|
||||
```
|
||||
|
||||
|
||||
|
||||
创建的资源单元实际上是资源单元的模版。可以被其他多个不同的资源池使用。比如,资源单元 `unit1` 创建后,可以创建资源池 `pool1` 和 `pool2` 并且 `pool1` 和 `pool2` 均使用 `unit1` 资源单元的配置。
|
||||
|
||||
通过 OCP 创建
|
||||
------------------------------
|
||||
|
||||
OCP 支持在创建租户时,为租户创建新的资源单元。创建租户相关操作请参见 [创建租户](https://open.oceanbase.com/docs/community/oceanbase-database/V3.1.0/create-a-user-tenant )。
|
||||
@ -0,0 +1,14 @@
|
||||
查看资源单元
|
||||
===========================
|
||||
|
||||
您可以通过数据库表查看集群中已存在的资源单元。
|
||||
|
||||
通过查询内部表可以获知当前集群中已经存在的资源单元信息。资源单元可以理解为服务器资源的使用模版。
|
||||
|
||||
下述为资源单元的查看语句:
|
||||
|
||||
```sql
|
||||
obclient> SELECT * FROM __all_unit_config;
|
||||
```
|
||||
|
||||
|
||||
@ -0,0 +1,30 @@
|
||||
修改资源单元
|
||||
===========================
|
||||
|
||||
修改资源单元的配置可以动态调整租户的资源单元大小,实现租户节点内的动态扩容或缩容功能。
|
||||
|
||||
在增加资源的过程中必须保证 OBServer 有足够的剩余资源可用于分配。可以通过内部表 `_all_virtual_server_stat` 查询节点总资源和已经分配的资源,然后通过计算可知是否可以修改资源单元。
|
||||
|
||||
下述为修改资源单元语句的语法:
|
||||
|
||||
```sql
|
||||
ALTER RESOURCE UNIT unitname
|
||||
MAX_CPU [=] cpunum,
|
||||
MAX_MEMORY [=] memsize,
|
||||
MAX_IOPS [=] iopsnum,
|
||||
MAX_DISK_SIZE [=] disksize,
|
||||
MAX_SESSION_NUM [=] sessionnum,
|
||||
[MIN_CPU [=] cpunum,]
|
||||
[MIN_MEMORY [=] memsize,]
|
||||
[MIN_IOPS [=] iopsnum] ;
|
||||
```
|
||||
|
||||
|
||||
|
||||
示例:
|
||||
|
||||
```sql
|
||||
obclient> ALTER RESOURCE UNIT unit1 max_cpu 15, max_memory '20G', max_iops 128,max_disk_size '100G', max_session_num 64, MIN_CPU=10, MIN_MEMORY='10G', MIN_IOPS=128;
|
||||
```
|
||||
|
||||
|
||||
@ -0,0 +1,15 @@
|
||||
删除资源单元
|
||||
===========================
|
||||
|
||||
您可以通过 SQL 语句删除不需要使用的资源单元。
|
||||
|
||||
删除资源单元的前提是必须确保当前资源单元未被使用。因此,删除资源单元需要将资源单元从资源池中移除。
|
||||
|
||||
删除资源单元的示例语句如下:
|
||||
|
||||
```sql
|
||||
obclient> DROP RESOURCE UNIT unitname;
|
||||
```
|
||||
|
||||
|
||||
|
||||
@ -0,0 +1,34 @@
|
||||
创建资源池
|
||||
==========================
|
||||
|
||||
在创建新租户时,如果当前的资源池均被使用(被其他租户使用),需要创建新的资源池。
|
||||
|
||||
下述为创建资源池语句的语法:
|
||||
|
||||
```sql
|
||||
CREATE RESOURCE POOL poolname
|
||||
UNIT [=] unitname,
|
||||
UNIT_NUM [=] unitnum,
|
||||
ZONE_LIST [=] ('zone' [, 'zone' ...]);
|
||||
```
|
||||
|
||||
|
||||
|
||||
* 参数 `unit_num` 表示在集群的一个 Zone 里面包含的资源单元个数。该值小于等于一个 Zone 中的 OBServer 的个数。
|
||||
|
||||
|
||||
|
||||
* 参数 `zone_list` 表示资源池的 Zone 列表,显示该资源池的资源在哪些 Zone 中被使用。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
示例:
|
||||
|
||||
```sql
|
||||
obclient> CREATE RESOURCE POOL pool1 unit='unit1', unit_num=1, zone_list=('zone1','zone2','zone3');
|
||||
```
|
||||
|
||||
|
||||
@ -0,0 +1,40 @@
|
||||
查看资源配置
|
||||
===========================
|
||||
|
||||
OceanBase 数据库支持通过视图或 OCP 来查看租户的资源配置情况。
|
||||
|
||||
通过视图查看
|
||||
---------------------------
|
||||
|
||||
执行以下 SQL 语句,查看资源配置。
|
||||
|
||||
```sql
|
||||
obclient> SELECT * FROM oceanbase.gv$unit;
|
||||
```
|
||||
|
||||
|
||||
|
||||
通过 OCP 查看
|
||||
------------------------------
|
||||
|
||||
通过 OCP 可以查看指定租户的资源配置。
|
||||
|
||||
1. 登录 OCP。
|
||||
|
||||
|
||||
|
||||
2. 在左侧导航栏中单击 **租户** 。
|
||||
|
||||
|
||||
|
||||
3. 在 **租户列表** 中找到指定租户,并单击租户名称。
|
||||
|
||||
|
||||
|
||||
4. 在 **总览** 页面的 **副本详情** 区域,查看租户的资源配置,包括 Unit 规格和 Unit 数量。
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
|
||||
@ -0,0 +1,115 @@
|
||||
修改资源池
|
||||
==========================
|
||||
|
||||
资源池创建后,您可以根据业务需要修改资源池。
|
||||
|
||||
修改资源池可以实现租户的另一种扩容或缩容的方式。例如,在每个 Zone 中增加或减少节点数量,可以通过修改参数 `unit_num` 来实现。
|
||||
|
||||
通过 SQL 语句修改资源池
|
||||
-----------------------------------
|
||||
|
||||
下述为修改资源池语句的语法:
|
||||
|
||||
```sql
|
||||
ALTER RESOURCE POOL poolname
|
||||
UNIT [=] unitname,
|
||||
UNIT_NUM [=] unitnum,
|
||||
ZONE_LIST [=] ('zone' [, 'zone' ...]);
|
||||
```
|
||||
|
||||
|
||||
|
||||
修改说明:
|
||||
|
||||
* 修改资源池的命令每次仅支持修改一个参数值。
|
||||
|
||||
|
||||
|
||||
* 被修改的资源池必须是没有被使用的或者不包含任何资源单元的空的资源池。
|
||||
|
||||
|
||||
|
||||
* 新创建的资源池不能更改 `zone_list`。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
示例如下:
|
||||
|
||||
* 修改资源池 `pool1` 的资源单元,修改后 `unit2` 替代 `unit1` 属于资源池` pool1`。
|
||||
|
||||
```sql
|
||||
obclient> ALTER RESOURCE POOL pool1 unit='unit2'
|
||||
```
|
||||
|
||||
|
||||
|
||||
* 资源池 `pool1` 被使用中,尝试修改会报错。
|
||||
|
||||
```sql
|
||||
obclient> ALTER RESOURCE POOL pool1 zone_list=('HANGZHOU_1');
|
||||
ERROR 4179 (HY000): alter resource pool zone list with non-empty unit not allowed
|
||||
```
|
||||
|
||||
|
||||
|
||||
* 同时修改资源池的两个参数时,会报错。
|
||||
|
||||
```sql
|
||||
obclient> ALTER RESOURCE POOL pool1 unit='unit1', zone_list=('HANGZHOU_1');
|
||||
ERROR 1235 (0A000): alter unit_num, resource_unit, zone_list in one cmd not supported
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
通过 OCP 修改资源配置
|
||||
----------------------------------
|
||||
|
||||
OCP 内置了一套 Unit 规格,您可以根据需要修改指定租户的 Unit 规格和 Unit 数量。
|
||||
**说明**
|
||||
|
||||
|
||||
|
||||
* 修改租户的 Unit 规格和 Unit 数量前,建议通过内部的 __all_virtual_server_stat 表对资源总体和已分配情况进行查询。
|
||||
|
||||
|
||||
|
||||
* Unit 数量不能超过该 Zone 下 Server 的个数。
|
||||
|
||||
|
||||
|
||||
* 不同 OCP 版本的操作界面可能不同,本节以 OCP V2.5.0 版本为例提供操作指导,OCP 其他版本的操作请参考对应版本的《OCP 用户指南》文档。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
1. 登录 OCP。
|
||||
|
||||
|
||||
|
||||
2. 在左侧导航栏中单击 **租户** 。
|
||||
|
||||
|
||||
|
||||
3. 在 **租户列表** 中找到指定租户,并单击租户名称。
|
||||
|
||||
|
||||
|
||||
4. 在 **总览** 页面的 **副本详情** 区域,选择需要修改资源规格的 Zone,在对应的 **操作** 列中,单击 **编辑** **。**
|
||||
|
||||
|
||||
|
||||
5. 选择新的 Unit 规格以及 Unit 数量,单击 **确定** **。**
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
|
||||
@ -0,0 +1,12 @@
|
||||
删除资源池
|
||||
==========================
|
||||
|
||||
OceanBase 数据库支持通过 SQL 语句删除不再使用的资源池。
|
||||
|
||||
下述为删除资源池的语句:
|
||||
|
||||
```sql
|
||||
obclient> DROP RESOURCE POOL poolname;
|
||||
```
|
||||
|
||||
|
||||
@ -0,0 +1,8 @@
|
||||
租户管理概述
|
||||
===========================
|
||||
|
||||
OceanBase 数据库是支持多租户的,这里租户的概念类似于传统数据库的数据库实例。租户下可以建立数据库,在租户的数据库下可以建立表。
|
||||
|
||||
OceanBase 数据库目前仅支持 MySQL 租户。OceanBase 数据库支持租户隔离。每个租户可以被赋于一定的资源(比如 CPU、内存、IOPS 和磁盘空间)。OceanBase 集群初始内置了一个系统租户 sys,可以用来管理 OceanBase 集群。不同的租户可通过建立租户组的方式进行绑定。租户的资源是分配在资源池上的。通过资源配置和设定资源池可以实现对租户资源的控制。
|
||||
|
||||
租户支持租户级别的转储、租户级别的分区主切换和租户级别的扩容缩容。
|
||||
@ -0,0 +1,150 @@
|
||||
创建用户租户
|
||||
===========================
|
||||
|
||||
OceanBase 数据库面向多租户设计。 在一个大集群中,您可以创建很多租户,不同的部门使用不同的租户。租户和租户之间资源已经进行了隔离,保障了相互之间访问不受影响,类似于数据库中的实例。
|
||||
|
||||
背景
|
||||
-----------------------
|
||||
|
||||
MySQL 是一个单租户的模式 ,所有用户在一套资源池下进行使用,这可能会导致一种故障。当用户负载非常高时,应用将用尽数据库的所有资源,导致数据库管理员无法连接数据库,也无法执行一些高优先级的控制命令。例如无法执行 kill 命令杀死超时的查询,或者一些管理平台也无法连接到数据库等。
|
||||
|
||||
OceanBase 数据库默认会自动创建 sys 租户,sys 租户负责一部分 OceanBase 数据库的管理工作,并且能够访问系统元数据表,sys 自动预留了一定的资源。
|
||||
|
||||
创建租户
|
||||
-------------------------
|
||||
|
||||
1. 使用 `root` 账号登陆到 `sys` 租户中,使用 MySQL 或 OBClient 访问 OceanBase 数据库:
|
||||
|
||||
```unknow
|
||||
obclient -hxxxx -uroot@sys -P${port_num} -Doceanbase -A
|
||||
```
|
||||
|
||||
|
||||
|
||||
详细信息,参考 [OBClient 文档](https://github.com/oceanbase/obclient/blob/master/README.md)。
|
||||
|
||||
|
||||
2. 查询系统资源占用情况,例如:
|
||||
|
||||
```unknow
|
||||
mysql> SELECT svr_ip,svr_port, cpu_total, mem_total, disk_total, zone FROM __all_virtual_server_stat ;
|
||||
+--------------+----------+-----------+--------------+---------------+-------+
|
||||
| svr_ip | svr_port | cpu_total | mem_total | disk_total | zone |
|
||||
+--------------+----------+-----------+--------------+---------------+-------+
|
||||
| 172.31.122.2 | 33332 | 30 | 236223201280 | 1434105937920 | zone1 |
|
||||
| 172.31.122.3 | 33332 | 30 | 236223201280 | 1434105937920 | zone2 |
|
||||
| 172.31.122.1 | 33332 | 30 | 236223201280 | 1434105937920 | zone3 |
|
||||
+--------------+----------+-----------+--------------+---------------+-------+
|
||||
```
|
||||
|
||||
|
||||
|
||||
3. 查询系统资源分配:
|
||||
|
||||
```unknow
|
||||
mysql> SELECT sum(c.max_cpu), sum(c.max_memory) FROM __all_resource_pool as a, __all_unit_config AS c WHERE a.unit_config_id=c.unit_config_id;
|
||||
+----------------+-------------------+
|
||||
| sum(c.max_cpu) | sum(c.max_memory) |
|
||||
+----------------+-------------------+
|
||||
| 5 | 17179869184 |
|
||||
+----------------+-------------------+
|
||||
1 row in set (0.00 sec)
|
||||
```
|
||||
|
||||
|
||||
|
||||
4. 创建资源单元。
|
||||
|
||||
如果想把剩下的所有资源全部使用掉,CPU 和内存分别为步骤 2 和步骤 3 得到的值, max_cpu值设置为第二步得到的cpu_total 减去第三步得到的sum(c.max_cpu), 在本例中为25; max_memory和min_memory 设置为第二步的到的mem_total 值 减去 第三步的到的sum(c.max_memory), 在本例中为219043332096。
|
||||
|
||||
```unknow
|
||||
mysql> CREATE RESOURCE UNIT unit1
|
||||
max_cpu = 25,
|
||||
max_memory = 219043332096,
|
||||
min_memory = 219043332096,
|
||||
max_iops = 10000,
|
||||
min_iops = 1280,
|
||||
max_session_num = 3000,
|
||||
max_disk_size = 214748364800 -- 200 GB
|
||||
;
|
||||
```
|
||||
|
||||
|
||||
|
||||
5. 创建资源池。
|
||||
|
||||
```unknow
|
||||
mysql> CREATE RESOURCE POOL pool1
|
||||
UNIT = 'unit1',
|
||||
UNIT_NUM = 1,
|
||||
ZONE_LIST = ('zone1', 'zone2', 'zone3')
|
||||
;
|
||||
```
|
||||
|
||||
|
||||
1. 每个资源池在每个 OBServer 上只能有一个资源单元。如果 `unit_num` 大于1,每个 zone 内都必须有和 `unit_num` 对应数目的机器。
|
||||
|
||||
|
||||
|
||||
2. ZoneList 一般与 zone 个数保持一致。
|
||||
|
||||
|
||||
|
||||
3. 如果在某个 zone 内找不到足够剩余资源的机器来创建资源单元,资源池会创建失败。
|
||||
|
||||
```unknow
|
||||
mysql> DROP RESOURCE POOL pool1;
|
||||
```
|
||||
|
||||
|
||||
|
||||
详细信息,参考 [资源管理概述](../../../6.administrator-guide/3.basic-database-management/4.resource-management/1.resource-management-overview.md)。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
6. 创建租户。
|
||||
|
||||
```unknow
|
||||
mysql> CREATE TENANT IF NOT EXISTS test_tenant
|
||||
charset='utf8mb4',
|
||||
replica_num=3,
|
||||
zone_list=('zone1','zone2','zone3'),
|
||||
primary_zone='RANDOM',
|
||||
resource_pool_list=('pool1')
|
||||
;
|
||||
```
|
||||
|
||||
|
||||
|
||||
PrimaryZone:指定主副本分配到 Zone 内的优先级,逗号两侧优先级相同分号,左侧优先级高于右侧。比如 zone1\>zone2=zone3,如果使用 RANDOM,则 Partition 的 Leader 随机分布。
|
||||
|
||||
详细信息,参考 [租户管理概述](../../../6.administrator-guide/3.basic-database-management/5.tenants/1.tenant-management-overview-1.md)。
|
||||
|
||||
|
||||
7. 登录租户之前,运行以下命令修改参数:
|
||||
|
||||
```unknow
|
||||
mysql> ALTER TENANT test_tenant SET VARIABLES ob_tcp_invited_nodes='%';
|
||||
```
|
||||
|
||||
|
||||
|
||||
8. 使用新的租户登录系统。
|
||||
|
||||
```unknow
|
||||
obclient -hxxxx -P${port_num} -uroot@test_tenant -A -c
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
创建用户
|
||||
-------------------------
|
||||
|
||||
首次使用新租户连接 OceanBase 数据库时,您必须使用 `root` 用户。成功连接后,您可以创建新用户连接 OceanBase 数据库。详细信息,参考 [创建用户](../../../6.administrator-guide/7.user-rights-management/2.create-user-3.md) 文档。
|
||||
|
||||
@ -0,0 +1,264 @@
|
||||
新建租户
|
||||
=========================
|
||||
|
||||
您可以通过 SQL 语句或 OCP 来新建租户。
|
||||
|
||||
通过 SQL 语句新建
|
||||
--------------------------------
|
||||
|
||||
OceanBase 数据库仅支持 MySQL 类型的租户。只有用 root 用户连接到 sys 租户(`root@sys`)才能执行 `CREATE TENANT` 命令去创建租户。创建新租户后,可以指定创建租户的类型和白名单。
|
||||
|
||||
下述展示了创建租户命令的语法:
|
||||
|
||||
```sql
|
||||
CREATE TENANT [IF NOT EXISTS] tenantname
|
||||
[tenant_characteristic_list]
|
||||
[tenant_variables_list]
|
||||
|
||||
tenant_characteristic_list:
|
||||
tenant_characteristic [, tenant_characteristic...]
|
||||
|
||||
tenant_characteristic:
|
||||
COMMENT 'string'
|
||||
| {CHARACTER SET | CHARSET} [=] value
|
||||
| REPLICA_NUM [=] num
|
||||
| ZONE_LIST [=] (zone [, zone])
|
||||
| PRIMARY_ZONE [=] zone
|
||||
| RESOURCE_POOL_LIST [=] (poolname)
|
||||
| {READ ONLY | READ WRITE}
|
||||
|
||||
tenant_variables_list:
|
||||
SET sys_variables_list
|
||||
| SET VARIABLES sys_variables_list
|
||||
| VARIABLES sys_variables_list
|
||||
|
||||
sys_variables_list:
|
||||
sys_variables [, sys_variables...]
|
||||
|
||||
sys_variables:
|
||||
sys_variable_name = expr
|
||||
```
|
||||
|
||||
|
||||
|
||||
参数说明:
|
||||
|
||||
* 如果要创建的租户名已存在,并且没有指定 `IF NOT EXISTS`,则会出现错误。
|
||||
|
||||
|
||||
|
||||
* 租户名的合法性和变量名一致,最长 30 个字符,字符只能是大小写英文字母、数字和下划线,而且必须以字母或下划线开头,并且不能是 OceanBase 数据库的关键字。
|
||||
|
||||
|
||||
|
||||
* 在租户下可以指定资源池。
|
||||
|
||||
|
||||
|
||||
* `RESOURCE_POOL_LIST` 为创建租户时的必填项。
|
||||
|
||||
* `CREATE TENANT` 命令中的 `RESOURCE_POOL_LIST` 中,暂时仅支持一个资源池。
|
||||
|
||||
|
||||
|
||||
|
||||
**示例 1** :
|
||||
|
||||
下述语句展示了创建名为 `test_tenant` 的一个 3 副本的 MySQL 租户(创建新租户默认是 MySQL 租户)。
|
||||
|
||||
```sql
|
||||
obclient> CREATE TENANT IF NOT EXISTS test_tenant charset='utf8mb4', replica_num=3, zone_list=('zone1','zone2','zone3'), primary_zone='zone1;zone2,zone3', resource_pool_list=('pool1')
|
||||
```
|
||||
|
||||
|
||||
|
||||
**示例 2** :
|
||||
|
||||
下述语句展示了创建租户后,直接通过修改变量 `ob_tcp_innvited_nodes` 的值为 `%` 以便允许任何客户端 IP 连接该租户。如果不调整,默认租户的连接方式为只允许本机的 IP 连接数据库。
|
||||
|
||||
```sql
|
||||
obclient> CREATE TENANT IF NOT EXISTS test_tenant charset='utf8mb4', replica_num=3, zone_list=('zone1','zone2','zone3'), primary_zone='zone1;zone2,zone3', resource_pool_list=('pool1') SET ob_tcp_invited_nodes='%'
|
||||
```
|
||||
|
||||
|
||||
|
||||
示例说明如下:
|
||||
|
||||
* `primary_zone` 指该租户的表的分区 Leader 所在的 Zone ,例如,`primary_ zone =' zone1; zone2, zone3'` 表示该租户的表的分区 Leader 在 `zone1` 上, 这时通过分号来分隔。
|
||||
|
||||
|
||||
|
||||
* `zone2` 和 `zone3` 通过逗号分割,表示 `zone2` 和 `zone3` 是同一优先级,但是比 `zone1` 优先级低。
|
||||
|
||||
|
||||
|
||||
* `primary_zone` 设置时,其值可以为 `RANDOM`(必须大写),表示随机。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
普通租户的内存最小规格必须大于等于 5 GB,否则创建租户失败。如果希望建立租户进行非常简单的功能测试,可以修改参数 `alter system __min_full_resource_pool_memory` 的值为 `1073741824` 来允许以最小 1 GB 内存的规格创建租户。
|
||||
|
||||
通过 OCP 新建
|
||||
------------------------------
|
||||
|
||||
可以通过 OCP 创建新的租户。
|
||||
**说明**
|
||||
|
||||
1. 登录 OCP。
|
||||
|
||||
默认进入 **集群概览** 页面。
|
||||
|
||||
|
||||
2. 在 **集群概览** 页面的 **集群列表** 区域,选择待操作的集群并单击其集群名。
|
||||
|
||||
|
||||
|
||||
3. 在显示的页面的左侧导航栏上,单击 **租户管理** 。
|
||||
|
||||
|
||||
|
||||
4. 在页面右上角单击 **新建租户** 。
|
||||
|
||||

|
||||
|
||||
|
||||
5. 填写基础信息。
|
||||
|
||||
1. 集群默认为当前集群。
|
||||
|
||||
|
||||
|
||||
2. 输入租户名称。
|
||||
|
||||
租户名称格式为英文大小写字母、数字和下划线的组合,长度为 2\~64 字符。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
6. 填写 Zone 信息。
|
||||
|
||||
1. 为 z1、z2 和 z3 设置副本类型、Unit 规格和 Unit 数量。
|
||||
|
||||
集群选定后,页面会根据所选集群的 Zone 信息给出可配置的 Zone 列表;对于无需做副本分布的 Zone,可以通过最右侧的按钮删除该 Zone 条目。
|
||||
|
||||
其中:
|
||||
* 副本类型支持全功能型副本、只读型副本和日志型副本。
|
||||
|
||||
|
||||
|
||||
* OCP 内置了一套 Unit 规格;另外也可以在下拉列表的最下方单击 **新增规格** 按钮新增自定义规格。
|
||||
|
||||
|
||||
|
||||
* 指定该 Zone 下的 Unit 数量。
|
||||
|
||||
**注意**
|
||||
|
||||
|
||||
|
||||
Unit 数量不能超过该 Zone 下 Server个数。
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
2. 对 Zone 优先级进行排序。
|
||||
|
||||
同时选择多个 Zone 添加到右侧后,可设置为同一优先级。
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
7. 填写基本设置信息。
|
||||
|
||||
1. 设置管理员初始密码,支持随机生成。
|
||||
|
||||
* 对于 MySQL 模式,其管理员账户为 **root** 。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
2. 设置租户模式。
|
||||
|
||||
* 仅支持 MySQL 租户模式。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
3. 设置字符集与编码。
|
||||
|
||||
* 对于 MySQL 模式,可选字符集有:utf8mb4、binary、gbk、gb18030。缺省为 utf8mb4。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
4. (可选)设置备注信息。
|
||||
|
||||
|
||||
|
||||
5. 设置 IP 地址白名单。
|
||||
|
||||
* 此处可以指定该租户允许登录的客户端列表。如果不指定,默认配置为 **%** ,表示允许所有的客户端。自定义白名单列表时需要注意,OCP 机器地址以及所依赖的 OBProxy 地址必须在此名单中,否则 OCP 将无法管理此租户。
|
||||
|
||||
* 默认配置:所有 IP 都可访问。
|
||||
|
||||
|
||||
|
||||
* 自定义:设置 IP 白名单,白名单中的 IP 才能访问。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
* 白名单格式说明:
|
||||
|
||||
* IP地址,示例:10.10.10.10,10.10.10.11
|
||||
|
||||
|
||||
|
||||
* 子网/掩码,示例:10.10.10.0/24
|
||||
|
||||
|
||||
|
||||
* 模糊匹配,示例:10.10.10.% 或 10.10.10._
|
||||
|
||||
|
||||
|
||||
* 多种格式混合,示例:10.10.10.10,10.10.10.11,10.10.10.%,10.10.10._,10.10.10.0/24
|
||||
|
||||
特殊说明: **%** 表示所有客户端都可以连接。
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
8. 单击 **提交** 。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -0,0 +1,72 @@
|
||||
查看租户
|
||||
=========================
|
||||
|
||||
您可以通过 SQL 语句或 OCP 查看租户的信息。
|
||||
|
||||
通过 SQL 语句查看
|
||||
--------------------------------
|
||||
|
||||
在 OBClient 中登录集群的 sys 租户并执行以下语句,查看当前集群的租户信息。
|
||||
|
||||
```sql
|
||||
obclient> SELECT * FROM oceanbase.gv$tenant;
|
||||
```
|
||||
|
||||
|
||||
|
||||
普通租户还可以执行以下语句快速查看当前有哪些租户。
|
||||
|
||||
```sql
|
||||
obclient> SHOW TENANT;
|
||||
```
|
||||
|
||||
|
||||
|
||||
通过 OCP 查看
|
||||
------------------------------
|
||||
|
||||
**说明**
|
||||
|
||||
|
||||
|
||||
不同 OCP 版本的操作界面可能不同,本节以 OCP V2.5.0 版本为例提供操作指导,OCP 其他版本的操作请参考对应版本的《OCP 用户指南》文档。
|
||||
|
||||
您可以通过 OCP 查看指定租户的详细信息。
|
||||
|
||||
支持两种方法进行查看:
|
||||
|
||||
方法一:
|
||||
|
||||
1. 登录 OCP。
|
||||
|
||||
|
||||
|
||||
2. 在左侧导航栏中单击 **租户** **。**
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
方法二:
|
||||
|
||||
1. 登录 OCP。
|
||||
|
||||
|
||||
|
||||
2. 在左侧导航栏中单击 **集群** **。**
|
||||
|
||||
|
||||
|
||||
3. 在 **集群概览** 页面的 **集群列表** 区域中单击集群名,进入集群详情页。
|
||||
|
||||
|
||||
|
||||
4. 在左侧导航栏上,单击 **租户管理** ,查看租户的详细信息及监控数据。
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
|
||||
@ -0,0 +1,154 @@
|
||||
修改租户
|
||||
=========================
|
||||
|
||||
本节主要介绍如何修改租户的属性信息。
|
||||
|
||||
通过 SQL 语句修改租户
|
||||
----------------------------------
|
||||
|
||||
修改租户命令的语法如下:
|
||||
|
||||
```sql
|
||||
ALTER TENANT {tenant_name | ALL}
|
||||
[SET] [tenant_option_list] [opt_global_sys_vars_set]
|
||||
|
||||
tenant_option_list:
|
||||
tenant_option [, tenant_option ...]
|
||||
|
||||
tenant_option:
|
||||
COMMENT [=]'string'
|
||||
|{CHARACTER SET | CHARSET} [=] charsetname
|
||||
|COLLATE [=] collationname
|
||||
|REPLICA_NUM [=] num
|
||||
|ZONE_LIST [=] (zone [, zone...])
|
||||
|PRIMARY_ZONE [=] zone
|
||||
|RESOURCE_POOL_LIST [=](poolname [, poolname...])
|
||||
|DEFAULT TABLEGROUP [=] {NULL | tablegroupname}
|
||||
|{READ ONLY | READ WRITE}
|
||||
|LOGONLY_REPLICA_NUM [=] num
|
||||
|LOCALITY [=] 'locality description'
|
||||
|LOCK|UNLOCK;
|
||||
|
||||
opt_global_sys_vars_set:
|
||||
VARIABLES system_var_name = expr [,system_var_name = expr] ...
|
||||
```
|
||||
|
||||
|
||||
|
||||
锁定租户 `TENANT1` 的示例如下:
|
||||
|
||||
```sql
|
||||
obclient> ALTER TENANT TENANT1 LOCK;
|
||||
```
|
||||
|
||||
|
||||
|
||||
更多 `ALTER TENANT` 语句的信息请参见 [ALTER TENANT](../../../10.sql-reference/5.sql-statement/9.alter-tenant.md)。
|
||||
|
||||
通过 OCP 修改租户的白名单、密码和资源规格
|
||||
--------------------------------------------
|
||||
|
||||
通过 OCP 可以修改租户的白名单、密码、资源规格。同时租户的扩容和缩容也可以通过修改租户来实现。
|
||||
**说明**
|
||||
|
||||
|
||||
|
||||
不同 OCP 版本的操作界面可能不同,本节以 OCP V2.5.0 版本为例提供操作指导,OCP 其他版本的操作请参考对应版本的《OCP 用户指南》文档。
|
||||
|
||||
**扩容缩容说明**
|
||||
租户级别的扩容和缩容是通过修改租户的资源规格来实现的。 租户扩容常用于租户资源无法满足当前租户的需求,比如 CPU、内存资源紧张的情况。通过对租户的扩容可以整体动态的调整租户对集群资源的占用。
|
||||
**说明**
|
||||
|
||||
|
||||
|
||||
* 对租户进行扩容的情况需要保证整体资源占用不操作上限。如果集群和节点的 CPU、内存资源已经完全分配给所有的租户。
|
||||
|
||||
|
||||
|
||||
* 此时无法对任何租户进行扩容。需要进行对某些租户的缩容,释放资源后在对目标租户进行扩容。
|
||||
|
||||
|
||||
|
||||
* 如果所有租户不能缩容,并且资源非配已满,此时不能进行租户扩容,必须进行集群级别的扩容(添加节点)。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
**修改租户操作步骤** :
|
||||
|
||||
1. 登录 OCP。
|
||||
|
||||
|
||||
|
||||
2. 在左侧导航栏中单击 **租户** 。
|
||||
|
||||
|
||||
|
||||
3. 在 **租户列表** 中找到指定租户,并单击租户名称。
|
||||
|
||||
|
||||
|
||||
4. 进行以下操作:
|
||||
|
||||
* 在页面右上角展开隐藏菜单,并单击 **修改密码** ,在弹出的对话框中,输入 2 次新密码后,单击 **确定** 。
|
||||
|
||||
|
||||
|
||||
* 在 **白名单** 区域右上角单击 **修改** ,然后在弹出的对话框中,请根据页面说明和配置说明,重新设置白名单,白名单设置的字符数不超 128 个字符,完成后单击 **确定** 。
|
||||
|
||||

|
||||
|
||||
|
||||
* 在 **副本详情** 区域,选择需要修改资源规格的副本,在对应的 **操作** 列中,单击 **编辑** 后,修改副本的类型、Unit 规格以及 Unit 数量,单击 **确定** **。**
|
||||
|
||||

|
||||
**说明**
|
||||
|
||||
|
||||
|
||||
Unit 数量不能超过该 Zone 下 Server 的个数。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
通过 OCP 锁定租户
|
||||
--------------------------------
|
||||
|
||||
**说明**
|
||||
|
||||
|
||||
|
||||
不同 OCP 版本的操作界面可能不同,本节以 OCP V2.5.0 版本为例提供操作指导,OCP 其他版本的操作请参考对应版本的《OCP 用户指南》文档。
|
||||
|
||||
1. 登录 OCP。
|
||||
|
||||
默认进入 **集群概览** 页面。
|
||||
|
||||
|
||||
2. 在左侧导航栏中单击 **租户** 。
|
||||
|
||||
|
||||
|
||||
3. 在 **租户列表** 中找到待锁定的租户,在对应的 **操作** 列中单击 **锁定** **。**
|
||||
|
||||
**注意**
|
||||
|
||||
|
||||
|
||||
锁定租户操作会禁止新用户连接到该租户,请谨慎操作。
|
||||
|
||||

|
||||
|
||||
|
||||
4. 在弹出的确认框中,单击 **锁定** 。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -0,0 +1,82 @@
|
||||
删除租户
|
||||
=========================
|
||||
|
||||
您可以通过 SQL 语句或 OCP 删除租户。
|
||||
|
||||
删除租户后,租户下的数据库和表也同时被删除。但是租户使用的资源配置不会被删除。资源配置可以继续给其他租户使用。
|
||||
|
||||
删除租户命令的语法:
|
||||
|
||||
```sql
|
||||
DROP TENANT | FORCE
|
||||
```
|
||||
|
||||
|
||||
|
||||
或者
|
||||
|
||||
```sql
|
||||
DROP TENANT $tenant_name PURGE;
|
||||
```
|
||||
|
||||
|
||||
|
||||
其中:
|
||||
|
||||
* 对于`DROP TENANT`操作:
|
||||
|
||||
* 当租户开启回收站功能时,`DROP TENANT`操作表示删除的租户会进入回收站。对于回收站中的租户,后续您可以通过租户级回收站功能进一步删除或恢复该租户,租户级回收站相关操作请参见 [租户级回收站](../../../6.administrator-guide/8.high-data-availability/1.recycle-bin-management/3.tenant-level-recycle-bin.md)。
|
||||
|
||||
|
||||
|
||||
* 当租户关闭回收站功能时,`DROP TENANT`操作表示延迟删除租户,后台线程会进行 GC 动作,租户的信息仍然可以通过内部表查询。租户具体延迟删除的时间由配置项`schema_history_expire_time`控制,默认为 7 天,`schema_history_expire_time`配置项更多信息请参见 [schema_history_expire_time](../../../14.reference-guide-oracle-mode/3.system-configuration-items-1/167.schema_history_expire_time.md)。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
* `DROP TENANT PURGE`操作表示仅延迟删除租户,且无论回收站功能是否开启,删除的租户均不进入回收站。
|
||||
|
||||
|
||||
|
||||
* `FORCE`参数表示无论回收站功能是否开启,均可以立刻删除租户。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
示例语句如下所示:
|
||||
|
||||
* 延迟删除租户 t1,删除的租户可进入回收站
|
||||
|
||||
```sql
|
||||
obclient> DROP TENANT t1;
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<!-- -->
|
||||
|
||||
* 延迟删除租户 t1,删除的租户不进入回收站
|
||||
|
||||
```sql
|
||||
obclient> DROP TENANT t1 PURGE;
|
||||
```
|
||||
|
||||
|
||||
|
||||
* 立刻删除租户 t1
|
||||
|
||||
```sql
|
||||
obclient> DROP TENANT t1 FORCE;
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -0,0 +1,91 @@
|
||||
查看租户会话
|
||||
===========================
|
||||
|
||||
您可以通过 SQL 语句和 OCP 来查看租户会话。
|
||||
|
||||
通过 SQL 语句查看
|
||||
--------------------------------
|
||||
|
||||
执行以下命令,查看租户当前会话。
|
||||
|
||||
```sql
|
||||
obclient> SHOW PROCESSLIST;
|
||||
```
|
||||
|
||||
|
||||
|
||||
通过 OCP 查看会话
|
||||
--------------------------------
|
||||
|
||||
**说明**
|
||||
|
||||
|
||||
|
||||
不同 OCP 版本的操作界面可能不同,本节以 OCP V2.5.0 版本为例提供操作指导,OCP 其他版本的操作请参考对应版本的《OCP 用户指南》文档。
|
||||
|
||||
1. 登录 OCP。
|
||||
|
||||
|
||||
|
||||
2. 在左侧导航栏中单击 **租户** **。**
|
||||
|
||||
默认进入租户 **总览** 页面。
|
||||
|
||||
|
||||
3. 在左侧导航栏上,单击 **会话管理** 。
|
||||
|
||||
**租户会话** 页签展示了租户当前的所有会话信息。包括会话 ID、SQL、用户、来源、数据库名、命令、执行时间(S)、状态和 OBProxy。
|
||||
|
||||
|
||||
4. 可以在 **租户会话** 页签进行进一步的查看:
|
||||
|
||||
* 在用户、来源、数据库名三列右侧,单击放大镜按钮,输入搜索关键字,搜索会话。
|
||||
|
||||

|
||||
|
||||
|
||||
* 勾选会话列表右上角的 **仅查看活跃会话** 按钮,会话列表会按照会话状态进行过滤,仅展示状态为 **ACTIVE** 的会话。
|
||||
|
||||

|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
通过 OCP 查看会话统计
|
||||
----------------------------------
|
||||
|
||||
**说明**
|
||||
|
||||
|
||||
|
||||
不同 OCP 版本的操作界面可能不同,本节以 OCP V2.5.0 版本为例提供操作指导,OCP 其他版本的操作请参考对应版本的《OCP 用户指南》文档。
|
||||
|
||||
1. 登录 OCP。
|
||||
|
||||
|
||||
|
||||
2. 在左侧导航栏中单击 **租户** **。**
|
||||
|
||||
默认进入租户 **总览** 页面。
|
||||
|
||||
|
||||
3. 在左侧导航栏上,单击 **会话管理** 。
|
||||
|
||||
|
||||
|
||||
4. 单击 **会话统计** 页签,进入 **会话统计** 页签。
|
||||
|
||||
**会话统计** 页签中展示租户当前的所有会话的统计信息,包括会话总数、活跃会话数、活跃会话最长时间等。支持按照用户、访问来源和数据库来统计用户的活跃会话数和会话总数。
|
||||
**注意**
|
||||
|
||||
|
||||
|
||||
按访问来源统计功能仅支持 OceanBase 数据库 V2.2.30 及以上版本。
|
||||
|
||||
|
||||
|
||||
|
||||
@ -0,0 +1,20 @@
|
||||
终止租户会话
|
||||
===========================
|
||||
|
||||
OceanBase 数据库支持通过 `KILL` 语句终止租户会话。
|
||||
|
||||
执行以下命令,终止会话:
|
||||
|
||||
```sql
|
||||
obclient> KILL session_id;
|
||||
```
|
||||
|
||||
|
||||
|
||||
或者
|
||||
|
||||
```sql
|
||||
obclient> KILL CONNECTION session_id;
|
||||
```
|
||||
|
||||
|
||||
@ -0,0 +1,75 @@
|
||||
租户管理变量
|
||||
===========================
|
||||
|
||||
|
||||
|
||||
租户的变量分为 Global 级别和 Session 级别。Session 级别的变量继承自 Global 级别的变量。同时,Session 建立后可以设定 Session 级别的变量。Session 级别的变量在 Session 中覆盖 Global 级别的变量。
|
||||
|
||||
查询变量
|
||||
-------------
|
||||
|
||||
下述展示查询 Session/Global 级别变量语句的语法:
|
||||
|
||||
```sql
|
||||
SHOW [GLOBAL] VARIABLES [SHOW_VARIABLES_OPTS]
|
||||
SHOW_VARIABLES_OPTS:
|
||||
[LIKE 'pattern' | WHERE expr]
|
||||
```
|
||||
|
||||
|
||||
|
||||
示例:
|
||||
|
||||
```sql
|
||||
obclient> SHOW VARIABLES LIKE 'ob_query_timeout';
|
||||
|
||||
obclient> SHOW GLOBAL VARIABLES WHERE variable_name LIKE 'ob_query_timeout';
|
||||
```
|
||||
|
||||
|
||||
|
||||
sys 租户可以通过内部表 `__all_virtual_sys_variable` 查询其他所有普通租户的 Global 变量。
|
||||
|
||||
如果连接 sys 租户后再切换到普通租户,此时查询的 Session 级别变量仍然是 sys 租户的 Session 级别的变量。查询的 Global 级别的变量是切换后普通租户的 Global 级别变量。
|
||||
|
||||
设置变量
|
||||
-------------
|
||||
|
||||
设置 Session 级别的变量仅对当前 Session 有效,对其他 Session 无效。设置 Global 级别的变量对当前 Session 无效,需要重新登录建立新的 Session 才会生效。
|
||||
|
||||
下述展示设置 Session/Global 级别变量语句的语法:
|
||||
|
||||
```sql
|
||||
SET [GLOBAL] VARIABLE_NAME = 'VALUE'
|
||||
```
|
||||
|
||||
|
||||
|
||||
示例:
|
||||
|
||||
```sql
|
||||
obclient> SET ob_query_timeout = 20000000;
|
||||
|
||||
obclient> SET GLOBAL ob_query_timeout = 20000000;
|
||||
```
|
||||
|
||||
|
||||
|
||||
变量中类型为 `INT`,并且在 `SHOW VARIABLE` 命令中显示 `ON/OFF` 或者 `True/False` 的变量,可以通过如下任意方法设置值:
|
||||
|
||||
```sql
|
||||
SET @@foreign_key_checks = ON
|
||||
|
||||
SET @@foreign_key_checks = 1
|
||||
|
||||
SET @@foreign_key
|
||||
```
|
||||
|
||||
|
||||
|
||||
以上三种方式的 Session 级别变量的设置是等效的。
|
||||
|
||||
更多变量参考信息,请参见 [系统变量参考](../../../14.reference-guide-oracle-mode/2.system-variable-1/2.auto_increment_increment-2.md)。
|
||||
|
||||
|
||||
|
||||
@ -0,0 +1,35 @@
|
||||
内存管理概述
|
||||
===========================
|
||||
|
||||
|
||||
|
||||
OceanBase 数据库是一个支持多租户架构的准内存级的分布式数据库,这对大容量内存的管理和使用提出了很高的要求。OceanBase 数据库采取占据服务器的大部分内存并进行统一管理的方式来管理内存。当有新业务需要上线时为其创建一个新租户,其中内存是从租户可分配内存中划分资源,租户 CPU 和内存的大小取决于业务规模。当可分配的 CPU 和内存资源不足时,应水平扩展 OceanBase 集群,为不断扩展的业务规模提供可持续的服务能力。
|
||||
|
||||
本章节将分篇介绍内存管理相关的以下内容:
|
||||
|
||||
* [OceanBase 内存结构](../../../6.administrator-guide/3.basic-database-management/6.memory-management/2.memory-structure-of-oceanbase.md)
|
||||
|
||||
|
||||
|
||||
* [OceanBase 内存上限](../../../6.administrator-guide/3.basic-database-management/6.memory-management/3.maximum-memory-for-oceanbase-databases.md)
|
||||
|
||||
|
||||
|
||||
* [系统内部内存管理](../../../6.administrator-guide/3.basic-database-management/6.memory-management/4.system-internal-memory-management.md)
|
||||
|
||||
|
||||
|
||||
* [租户内部内存管理](../../../6.administrator-guide/3.basic-database-management/6.memory-management/5.memory-management-within-a-tenant.md)
|
||||
|
||||
|
||||
|
||||
* [执行计划缓存](../../../6.administrator-guide/3.basic-database-management/6.memory-management/6.execution-plan-cache-1.md)
|
||||
|
||||
|
||||
|
||||
* [常见内存问题](../../../6.administrator-guide/3.basic-database-management/6.memory-management/7.common-memory-problems.md)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -0,0 +1,10 @@
|
||||
OceanBase 内存结构
|
||||
===================================
|
||||
|
||||
|
||||
|
||||
OceanBase 数据库内存结构如下图所示:
|
||||
|
||||

|
||||
|
||||
从上图可以看到,OceanBase 数据库占用了服务器的大量内存 (OBServer Total Memory),然后一部分用于自身系统运行(Memory Reserved For OBServer),一部分用于划分给创建的租户(Allocatable Memory For OBServer)。每个租户等同于传统数据库的一个实例,不同租户的内存模块组成是一样的,其内存又分为装载增量数据的 MemStore(Tenant MemStore)以及 KVCache 缓存(Tenant Cache Memory)。
|
||||
@ -0,0 +1,37 @@
|
||||
OceanBase 数据库内存上限
|
||||
======================================
|
||||
|
||||
|
||||
|
||||
OceanBase 数据库提供两种方式以设置自身内存的上限:
|
||||
|
||||
* 按照计算机器总内存上限的百分比计算自身可以使用的总内存,由 `memory_limit_percentage `参数配置。
|
||||
|
||||
|
||||
|
||||
* 直接设置 OceanBase 数据库可用内存的上限,由`memory_limit` 参数配置。其中`memory_limit` 参数值为 0 时,使用百分比的配置方式,否则使用绝对值的配置方式。
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
下述表格示例了当在一台 100 GB 的机器上启动一个 OceanBase 数据库实例时,`memory_limit_percentage ` 和 `memory_limit` 参数的值是如何影响 OceanBase 数据库的内存上限的。
|
||||
|
||||
|
||||
| 示例 | **memory_limit_percentage** | **memory_limit** | **OceanBase 数据库内存上限** |
|
||||
|----------|-----------------------------|------------------|-----------------------|
|
||||
| **示例 1** | 80 | 0 | 80 GB |
|
||||
| **示例 2** | 80 | 90 GB | 90 GB |
|
||||
|
||||
|
||||
|
||||
示例 1 中由于 `memory_limit` 为 0,故以 `memory_limit_percentage` 为准,OceanBase 数据库内存上限为 100GB\*80%=80 GB。
|
||||
|
||||
示例2 中由于 `memory_limit` 为 90 GB,故以 `memory_limit` 为准,OceanBase 数据库内存上限为 90 GB。
|
||||
**注意**
|
||||
|
||||
|
||||
|
||||
目前主流的 OceanBase 数据库服务器一般内存为 384 GB 或 512 GB,384 GB 内存建议配置为使用机器内存的 80%,512 GB 内存建议配置为使用机器内存的 90%。
|
||||
|
||||
@ -0,0 +1,8 @@
|
||||
系统内部内存管理
|
||||
=============================
|
||||
|
||||
|
||||
|
||||
OceanBase 数据库支持多租户架构,但是 OceanBase 数据库内存上限中配置的内容并不能全部分配给租户使用,因为每一个 OBServer 上租户都会共享部分资源或功能。由于这些共享的资源或功能所使用的内存并不属于任何一个普通租户,故这类内存被归结为系统内部内存。系统内部可使用的内存上限可通过`system_memory` 参数来配置,该参数表示系统内部可使用 OceanBase 数据库内存的上限。
|
||||
|
||||
例如,假设 OceanBase 数据库内存上限为 80 GB,`system_memory` 的值为 20 GB,那么可用于租户分配的内存就是剩下的 60 GB。
|
||||
@ -0,0 +1,91 @@
|
||||
租户内部内存管理
|
||||
=============================
|
||||
|
||||
|
||||
|
||||
租户内存默认占到 OceanBase 数据库内存上限的 80%,OceanBase 数据库把租户内部的内存总体上分为两个部分:
|
||||
|
||||
* 不可动态伸缩的内存 MemStore
|
||||
|
||||
|
||||
|
||||
* 可动态伸缩的内存 KVCache
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
其中,不可动态伸缩的内存主要给保存数据库增量更新的 MemStore 使用,可动态伸缩的内存主要由 KVCache 进行管理。可动态伸缩的 KVCache 会尽量使用除去不可动态伸缩后租户的全部内存。
|
||||
|
||||
除此之外,还有很多内存组件,包括 Plan Cache(执行计划缓存)、SQL Arena(SQL 执行期内存)、选举动作等,都要占用一定量的内存。您可以通过查询 `__all_virtual_memory_info `来获取所有内存组件的使用情况。
|
||||
|
||||
不可动态伸缩的内存管理
|
||||
--------------------
|
||||
|
||||
目前与不可动态伸缩内存相关的配置只有 `memstore_limit_percentage` ,它表示租户的 MemStore 部分最多占租户总内存上限的百分比,默认值为租户 MinMemory 的 50%。租户的写入或者更新会增加 MemStore 的内存使用,当租户的 MemStore 部分内存到达上限以后,后续的写入或者更新操作将会被拒绝。OceanBase 数据库会根据 MemStore 的内存使用比例决定何时进行转储或者合并释放 MemStore 的内存,该比例由配置项 `freeze_trigger_percentage` 控制,表示当 MemStore 内存占用到达其上限的百分比后就进行冻结(转储和合并的前置动作),默认值为租户 MemStore 内存上限的 70%,即租户 MinMemory 的 35%。
|
||||
|
||||
可动态伸缩的内存管理
|
||||
-------------------
|
||||
|
||||
可动态伸缩的内存主要部分是 KVCache。OceanBase 数据库将绝大多数的 KV 格式的缓存统一在了 KVCache 中进行管理,KVCache 支持动态伸缩、不同 KV 的优先级控制以及智能的淘汰机制。
|
||||
|
||||
KVCache 一般不需要配置,特殊场景下可以通过参数控制各种 KV 的优先级,优先级高的 KV 类比优先级低的 KV 类更容易被保留在 Cache 中。
|
||||
|
||||
用于控制 KV 优先级的参数如下表所示。参数值越大表示优先级越高。
|
||||
|
||||
|
||||
| 参数 | 含义 |
|
||||
|----------------------------------|----------------------|
|
||||
| fuse_row_cache_priority | 融合行缓存在缓存系统中的优先级。 |
|
||||
| location_cache_priority | 位置缓存在系统缓存服务中的优先级。 |
|
||||
| clog_cache_priority | 事务日志占用缓存的优先级。 |
|
||||
| index_clog_cache_priority | 事务日志索引在缓存系统中的优先级。 |
|
||||
| user_tab_col_stat_cache_priority | 统计数据缓存在缓存系统中的优先级。 |
|
||||
| index_cache_priority | 索引在缓存系统中的优先级。 |
|
||||
| index_info_block_cache_priority | 块索引在缓存系统中的优先级。 |
|
||||
| user_block_cache_priority | 数据块缓存在缓存系统中的优先级。 |
|
||||
| user_row_cache_priority | 基线数据行缓存在缓存系统中的优先级。 |
|
||||
| bf_cache_priority | Bloom Filter 的缓存优先级。 |
|
||||
|
||||
|
||||
|
||||
KVCache 中子 Cache 的信息可以通过查询 `__all_virtual_kvcache_info` 参数获得。其中 sys 和普通租户的重要组成部分略有不同:
|
||||
|
||||
* sys 租户上的 Cache 种类如下:
|
||||
|
||||
|
||||
|
||||
| 类别 | 说明 |
|
||||
|-------------------------|-----------------------------------------------------------|
|
||||
| schema_cache | 存放用户的 Schema 信息,用于提供 SQL 及系统正常运行所依赖的数据库对象的元信息。 |
|
||||
| location_cache | 存放分区的 location 信息,通过查询它可以知道一个 Partition 分布在哪些 OBServer 上。 |
|
||||
| block_index_cache | 缓存微块的 Index,加速微块数据的访问。 |
|
||||
| user_block_cache | 缓存微块数据,由于微块可能通过压缩算法进行压缩,为了提升查询性能,缓存的是解压后的微块数据。 |
|
||||
| fuse_row_cache | 缓存行的快照点数据,用于提高点查询性能,并且可以避免因转储、合并导致的缓存失效问题。 |
|
||||
| index_clog_cache | 缓存 ilog 文件的内容,用于减小读取 ilog 文件的开销。 |
|
||||
| user_tab_col_stat_cache | 用户表列统计信息缓存,用于 SQL 计算代价。 |
|
||||
| user_table_stat_cache | 用户表统计信息缓存,用于 SQL 计算代价。 |
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<!-- -->
|
||||
|
||||
* 普通租户上的 Cache 种类如下:
|
||||
|
||||
|
||||
|
||||
| 类别 | 说明 |
|
||||
|-------------------|------------------------------------------------|
|
||||
| user_block_cache | 缓存微块数据,由于微块可能通过压缩算法进行压缩,为了提升查询性能,缓存的是解压后的微块数据。 |
|
||||
| block_index_cache | 缓存微块的 Index,加速微块数据的访问。 |
|
||||
| fuse_row_cache | 缓存行的快照点数据,用于提高点查询性能,并且可以避免因转储、合并导致的缓存失效问题。 |
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -0,0 +1,49 @@
|
||||
执行计划缓存
|
||||
===========================
|
||||
|
||||
|
||||
|
||||
执行 `EXPLAIN` 语句看到的执行计划是预估的,在 Plan Cache 中缓存的执行计划才是真实的。Plan Cache 可以避免硬解析 SQL 语句,当同样的 SQL 请求到 OceanBase 数据库时,会从 Cache 中获得语句的已分析版本以加速语句执行。
|
||||
|
||||
与 Plan Cache 相关的配置项
|
||||
----------------------------
|
||||
|
||||
|
||||
|
||||
| 配置项 | 说明 |
|
||||
|---------------------------|-------------------------------------|
|
||||
| plan_cache_evict_interval | 该配置项用于设置检查执行计划是否需要淘汰的间隔时间,默认值为 30s。 |
|
||||
|
||||
|
||||
|
||||
与 Plan Cache 相关的系统变量
|
||||
-----------------------------
|
||||
|
||||
|
||||
|
||||
| 系统变量 | 说明 |
|
||||
|-------------------------------------|----------------------------------------------------------------------------------------------------------------------------|
|
||||
| ob_plan_cache_percentage | 该系统变量用于设置计划缓存可使用内存占租户内存的百分比。计划缓存最多可使用内存(内存上限绝对值)= 租户内存上限 \* ob_plan_cache_percentage/100,默认值为 5。 |
|
||||
| ob_plan_cache_evict_high_percentage | 该系统变量用于设置触发计划缓存淘汰的内存大小在内存上限绝对值的百分比。触发计划缓存淘汰的内存大小(淘汰计划的高水位线) = 内存上限绝对值 \* ob_plan_cache_evict_high_percentage/100,默认值为 90。 |
|
||||
| ob_plan_cache_evict_low_percentage | 该系统变量设置停止淘汰计划的内存。停止淘汰计划的内存(淘汰计划的低水位线) =内存上限绝对值 \* ob_plan_cache_evict_low_percentage/100,默认值为 50。 |
|
||||
|
||||
|
||||
|
||||
举例来讲,假如一个租户内存大小为 10 G, `ob_plan_cache_percentage` 的值为 10, `ob_plan_cache_evict_high_percentage` 的值为 90, `ob_plan_cache_evict_low_percentage` 的值为 50。则:
|
||||
|
||||
* 计划缓存内存上限绝对值 = 10 G \* 10 / 100 = 1 G
|
||||
|
||||
|
||||
|
||||
* 淘汰计划的高水位线 = 1 G \* 90 / 100 = 0.9 G
|
||||
|
||||
|
||||
|
||||
* 淘汰计划的低水位线 = 1 G \* 50 / 100 = 0.5 G
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
当该租户在某个 OBServer 上的计划缓存使用超过 0.9 G 时,会触发淘汰,且优先淘汰最久未执行的计划。当淘汰到使用内存只有 0.5 G 时,则停止淘汰。如果淘汰速度没有新计划生成的速度快,则当计划缓存使用内存达到内存上限绝对值 1 G 时,将不再往计划缓存中添加新计划,直到淘汰后使用的内存小于 1 G 时才会再次添加新计划到计划缓存中。
|
||||
@ -0,0 +1,72 @@
|
||||
常见内存问题
|
||||
===========================
|
||||
|
||||
|
||||
|
||||
1. `ERROR 4030 (HY000): OB-4030:Over tenant memory limits`。
|
||||
|
||||
当您看到上述错误信息时,首先需判断是不是 MemStore 内存超限,当 MemStore 内存超限时,需要检查数据写入是否过量或未做限流。当遇到大量写入且数据转储跟不上写入速度的时候就会报这种错误。运行下述语句查看内存状态:
|
||||
|
||||
```sql
|
||||
obclient> SELECT /*+ READ_CONSISTENCY(WEAK),query_timeout(100000000) */ TENANT_ID,IP,
|
||||
round(ACTIVE/1024/1024/1024,2)ACTIVE_GB,
|
||||
round(TOTAL/1024/1024/1024,2) TOTAL_GB,
|
||||
round(FREEZE_TRIGGER/1024/1024/1024,2) FREEZE_TRIGGER_GB,
|
||||
round(TOTAL/FREEZE_TRIGGER*100,2) percent_trigger,
|
||||
round(MEM_LIMIT/1024/1024/1024,2) MEM_LIMIT_GB
|
||||
FROM gv$memstore
|
||||
WHERE tenant_id >1000 OR TENANT_ID=1
|
||||
ORDER BY tenant_id,TOTAL_GB DESC;
|
||||
```
|
||||
|
||||
|
||||
|
||||
该问题的紧急应对措施是增加租户内存。问题解决之后需要分析原因,如果是因为未做限流引起,需要加上相应措施,然后回滚之前加上的租户内存动作。如果确实因为业务规模增长导致租户内存不足以支撑业务时,需要根据转储的频度设置合理的租户内存大小。如果 MemStore 内存未超限,运行下述语句判断是哪个内存模块超限:
|
||||
|
||||
```sql
|
||||
obclient> SELECT tenant_id,svr_ip,sum(hold) module_sum
|
||||
FROM __all_virtual_memory_info
|
||||
WHERE tenant_id>1000 AND hold<>0 AND
|
||||
mod_name NOT IN ( 'OB_KVSTORE_CACHE','OB_MEMSTORE')
|
||||
GROUP BY tenant_id,svr_ip;
|
||||
```
|
||||
|
||||
|
||||
|
||||
内存模块超限的判断标准是: `module_sum` \> 租户 `min_memory` \> 租户 MemStore。模块内存超限,可能需要先调整单独模块的内存,例如,调整 `ob_sql_work_area_percentage` 的值,如果租户内存过小,也需要增加租户内存。
|
||||
|
||||
|
||||
2. PLANCACHE 命中率低于 90%。
|
||||
|
||||
如果是 OLTP 系统 PLANCACHE 命中率应不低于 90%,运行下述语句查看 PLANCACHE 命中率:
|
||||
|
||||
```sql
|
||||
obclient> SELECT hit_count,executions,(hit_count/executions) as hit_ratio
|
||||
FROM v$plan_cache_plan_stat
|
||||
where (hit_count/executions) < 0.9;
|
||||
|
||||
SELECT hit_count,executions,(hit_count/executions) AS hit_ratio
|
||||
FROM v$plan_cache_plan_stat
|
||||
WHERE (hit_count/executions) < 0.9 AND executions > 1000;
|
||||
```
|
||||
|
||||
|
||||
|
||||
寻找是否有相似语句,例如 `in` 或 `not in` 后面的参数个数随机,导致大量浪费;如果不是上述情况,可能业务量或会话激增导致内存不足,需要调整租户内存大小。
|
||||
|
||||
|
||||
3. 日志中有 `fail to alloc memory` 或 `allocate memory fail` 等错误信息。
|
||||
|
||||
日志中会包含 `tenant_id` (租户编号)及 `mod_id` (内存模块编号)信息,可以通过以下语句查询具体的内存模块信息:
|
||||
|
||||
```sql
|
||||
obclient> SELECT * FROM __all_virtual_memory_info WHERE mod_id=xxx AND tenant_id = xxx
|
||||
```
|
||||
|
||||
|
||||
|
||||
从第一个常见内存问题中可知,如果模块内存超限,可能需要先调整单独模块的内存。如果租户内存过小,还需要增加租户内存。
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user