OceanBase创建租户

租户是集群之上的递进概念,OceanBase 数据库采用了多租户架构。

集群偏部署层面的物理概念,是 Zone 和节点的集合,租户则偏向于资源层面的逻辑概念,是在物理节点上划分的资源单元,可以指定其资源规格,包括 CPU、内存、日志盘空间、IOPS 等。

租户类似于传统数据库的数据库实例,租户通过资源池与资源关联,从而独占一定的资源配额,可以动态调整资源配额。在租户下可以创建 Database、表、用户等数据库对象。

OceanBase 数据库 V4.0 开始,有三种类型的租户:系统租户、用户租户以及每个用户租户对应的 Meta 租户。

用户租户可以被看作是一个数据库实例,它由系统租户根据业务需要所创建出来,用户租户:

  • 可以创建自己的用户
  • 可以创建数据库(database,仅 MySQL 兼容模式支持)、表(table)等所有客体对象
  • 有自己独立的系统表和系统视图
  • 有自己独立的系统变量
  • 数据库实例所具备的其他特性

创建用户租户需理解下面4张表的逻辑关系:

  • 资源规格:对应 DBA_OB_Unit_CONFIGS 表,定义了常见物理资源项的大小,包括 CPU、内存、磁盘空间、IOPS 等。创建资源池时指定其资源规格,从而根据定义创建资源单元
  • 资源单元Unit:对应 DBA_OB_UNITS 表,是资源调度的基本单位,具有节点、Zone、Region 等位置属性
  • 资源池:对应 DBA_OB_RESOURCE_POOLS 表,是资源分配的基本单位,创建资源池时会实际创建 Unit,如对应节点预留资源不够将会创建失败
  • 租户:对应 DBA_OB_TENANTS 表,创建租户需指定RESOURCE_POOL_LIST资源池,从而拥有指定资源池的 Unit

创建租户的依赖关系是:租户 -> 资源池 -> 资源规格,因此创建租户时需要反过来,先创建资源规格。

如上图,展示了一个由 6 个 Unit 组成的资源池 a_pool,该资源池具有如下重要属性:

  • ZONE_LIST:描述了该资源池中的 Unit 分布在哪些 Zone,图中为 ZONE_LIST='zone1,zone2,zone3'
  • Unit_NUM:描述了 ZONE_LIST 中每个 Zone 中的 Unit 个数,图中为 Unit_NUM=2
  • Unit_CONFIG_ID:描述了该资源池关联的资源规格,从而决定该资源池中每个 Unit 的物理资源大小,包括 CPU、内存、日志盘空间、IOPS 等。

通过 Unit 的概念,我们将 OceanBase 数据库的物理概念和逻辑概念进行了关联。每个租户有若干 Unit,分布于若干 Zone 的若干节点上。而每个节点上分布有若干个 Unit,这些 Unit 归属于不同租户。概括的讲:集群由节点组成,节点是 Unit 的容器。租户由 Unit 组成,Unit 是数据库对象的容器。

设置租户a 的 RESOURCE_POOL_LIST=('a_pool'),其部署图如下:

1.创建资源规格
复制代码
1.使用 root 用户登录到集群的 sys 租户。
obclient -h192.18.113.161 -P2883 -uroot@sys#cluster -p**** -A

2.USE oceanbase;

3.查看资源规格信息:SELECT * FROM oceanbase.DBA_OB_UNIT_CONFIGS;

4.创建一个名称为 S1_unit_config 的资源规格,其资源配置为 CPU 为 1 核,内存 5G,日志盘空间 20G:
 CREATE RESOURCE UNIT S1_unit_config MEMORY_SIZE = '5G', MAX_CPU = 1, MIN_CPU = 1, LOG_DISK_SIZE = '20G',  MAX_IOPS = 10000, MIN_IOPS = 10000, IOPS_WEIGHT=1;
 
5.查询 DBA_OB_UNIT_CONFIGS 视图,确认资源规格创建成功
SELECT * FROM oceanbase.DBA_OB_UNIT_CONFIGS WHERE NAME = 'S1_unit_config';

创建资源规格语法:CREATE RESOURCE UNIT unit_name MEMORY_SIZE [=] 'size_value', MAX_CPU [=] cpu_num, [LOG_DISK_SIZE [=] 'size_value',] [MAX_IOPS [=] iops_num,] [MIN_CPU [=] cpu_num,] [MIN_IOPS [=] iops_num];

创建资源规格时,MAX_CPU 和 MEMORY_SIZE 必选。

  • unit_name:资源规格名称。
  • MEMORY_SIZE:内存规格,其最小值由隐藏配置项 __min_full_resource_pool_memory 控制,默认为 5G,支持最小可以调整为 4G。OceanBase 数据库 V4.0 开始不支持内存超卖。
  • MAX_CPU:CPU 规格上限,MIN_CPU 是 CPU 规格下限,单位是核数。如果用户没有指定 MIN_CPU,默认等于 MAX_CPU 值。
  • MIN_CPU:最小的 CPU 规格,所有租户的 MIN_CPU 的总和不能超过该节点 CPU 总容量 CPU_CAPACITY
  • MAX_IOPSMIN_IOPS: 指定当前 Unit 可使用的 IOPS 资源的上限和下限,最小值均为 1024,并且要求 MAX_IOPS >= MIN_IOPS
  • LOG_DISK_SIZE:日志盘空间,OceanBase 数据库 V4.0 会按租户管理日志盘空间,系统为各个租户预留日志盘空间,实现按租户隔离。当用户没有指定时,LOG_DISK_SIZE 默认值是内存规格的 3 倍大小,最小为 2G。
  • OceanBase 数据库 V4.0 支持租户间 IOPS 隔离,通过 MAX_IOPSMIN_IOPSIOPS_WEIGHT 三个参数决定。IOPS 规格参数默认不需要指定,系统根据 CPU 规格自动计算。
2.创建资源池

创建资源规格后,可以在创建资源池时指定资源规格,从而使用相应大小的资源单元,并最终分配给相应的租户。

复制代码
1.查看已有资源池:SELECT * FROM oceanbase.DBA_OB_RESOURCE_POOLS;

2..创建名为mq_pool_01 的资源池,在zone1、zone2 里各创建1个 Unit,每个Unit的资源规格为S1_unit_config
CREATE RESOURCE POOL mq_pool_01  UNIT='S1_unit_config', UNIT_NUM=1, ZONE_LIST=('zone1','zone2'); 

3.查询资源池是否创建成功:SELECT * FROM DBA_OB_RESOURCE_POOLS WHERE NAME = 'mq_pool_01';

ocp_express,会创建一个ocp租户,且使用ocp_unit资源单元,该资源规格使用16G内存,准备把ocp租户删除了再创建。

语法:CREATE RESOURCE POOL poolname UNIT [=] unitname, UNIT_NUM [=] unitnum, ZONE_LIST [=] ('zone' [, 'zone' ...]);

参数说明:

  • UNIT:该资源池的资源规格,输入资源规格名称。
  • UNIT_NUM:该资源池在目标 Zone 的 Unit 个数,它的值要小于目标 Zone 的节点个数,且每个节点上最多只能分布同一个租户的一个 Unit。
  • ZONE_LIST:资源池的 Zone 分布。OceanBase 数据库会在 ZONE_LIST 描述的每个 Zone 里面创建 UNIT_NUM 个 Unit,每个 Unit 的资源规格为 UNIT 参数设置的值。
3.创建租户

OceanBase 数据库支持两种类型的租户,MySQL 兼容模式和 Oracle 兼容模式。创建租户时,需要指定租户的类型。租户创建后,租户类型无法修改(社区版只能是MySQL模式)

复制代码
1.查看所有的租户信息:SELECT * FROM oceanbase.DBA_OB_TENANTS;

2.创建一个名为 mq_t1 的租户(默认为 MySQL 模式租户),副本数为3,资源池指定为 mq_pool_01,Primary Zone 为 zone1,zone2,zone3,允许所有 IP 连接数据库。

CREATE TENANT IF NOT EXISTS mq_t1  PRIMARY_ZONE='zone1,zone2,zone3', RESOURCE_POOL_LIST=('mq_pool_01') set OB_TCP_INVITED_NODES='%';

3.查询确认租户创建成功:SELECT * FROM DBA_OB_TENANTS WHERE TENANT_NAME = 'mq_t1';

4.租户创建成功后,可以尝试登录 mq_t1 租户,默认管理员用户(MySQL 模式为 root,Oracle 模式为 sys)的密码为空,需要及时修改管理员用户的密码
 4.1.登录:obclient -h192.168.113.161 -P2883 -uroot@mq_t1#cluster  -A
 4.2.修改密码:ALTER USER root IDENTIFIED BY Admin123456@;
 4.3.修改密码成功后,重新登录租户:obclient -h192.168.113.161 -P2883 -uroot@mq_t1#cluster -p**** -A

语法:CREATE TENANT [IF NOT EXISTS] tenant_name

PRIMARY_ZONE [=] zone,

RESOURCE_POOL_LIST [=](poolname [, poolname...])

ENABLE_ARBITRATION_SERVICE = {true \| false}

{SET | SET VARIABLES | VARIABLES} system_var_name = expr [,system_var_name = expr] ...

参数说明:

  • IF NOT EXISTS:可选参数,如果要创建的租户名已存在,并且没有指定 IF NOT EXISTS,则会出现错误。

  • tenant_name:指定租户名称,最长 128 个字符,字符只能是大小写英文字母、数字和下划线,而且必须以字母或下划线开头。

  • PRIMARY_ZONE:指定租户的 Primary Zone,指定了租户提供读写服务的 Zone 的优先级。实际上是一个 Zone 的列表,列表中包含多个 Zone。当列表包含多个 Zone 时,使用分号(;)分隔的 Zone 具有从高到低的优先级,使用逗号(,)分隔的 Zone 具有相同优先级,表示流量打散在多个 Zone 上,这几个 Zone 同时提供服务。

    例如,primary_zone ='zone1;zone2,zone3' 表示该租户优先由 zone1 提供读写服务,zone1 比 zone2、zone3 的优先级高,zone2 和 zone3 是同一优先级。在指定 PRIMARY_ZONE 时,其值可以设置为 RANDOM(必须大写),表示随机选择最高优先级内的任意一个 Zone 作为 Primary Zone

  • RESOURCE_POOL_LIST:指定分配给租户的资源池列表,必填。如果有多个资源池,要求多个资源池的 UNIT_NUM 个数一致。

    租户的副本分布的 Zone List 继承于 RESOURCE_POOL_LISTZONE_LIST 属性,租户的副本个数继承于 RESOURCE_POOL_LISTZONE_LIST 属性的个数,租户在每个 Zone 的 Unit 个数继承于 RESOURCE_POOL_LISTUNIT_NUM 属性、租户的 Unit 的资源规格继承于 RESOURCE_POOL_LIST 的 Unit 属性。

  • ENABLE_ARBITRATION_SERVICE:指定租户是否开启仲裁服务,如果不显示指定,默认创建的租户其仲裁服务为关闭状态。如果创建租户的时候未开启仲裁服务,可以在创建租户后再开启仲裁服务,详细操作请参见 为租户开启仲裁服务。该内容仅适用于 OceanBase 数据库企业版。OceanBase 数据库社区版暂不支持仲裁服务功能。

  • system_var_name:指定系统变量或配置项。

    • OB_TCP_INVITED_NODES:用于指定租户连接的白名单,即允许哪些客户端 IP 连接该租户。示例中 % 表示所有客户端都可登录,如果不指定 OB_TCP_INVITED_NODES 的值,则默认租户的连接方式为只允许本机的 IP 登录该租户。白名单配置的详细介绍,参见 查看和设置白名单
    • OB_COMPATIBILITY_MODE:用于指定租户的兼容模式,可选择 MySQL 或 Oracle 兼容模式,并且只能在创建时指定。如果不指定 OB_COMPATIBILITY_MODE,则默认兼容模式为 MySQL 模式。
4.查看租户和资源信息
复制代码
1.查看所有资源规格信息
SELECT * FROM DBA_OB_UNIT_CONFIGS;

2.查看所有资源池信息
SELECT * FROM DBA_OB_RESOURCE_POOLS;

3.查看所有的租户信息,其LOCALITY字段为租户副本分布
SELECT * FROM DBA_OB_TENANTS;

4.关联查询租户资源配置信息
SELECT c.TENANT_ID, e.TENANT_NAME, concat(c.NAME, ': ', d.NAME) `pool:conf`,concat(c.UNIT_COUNT, ' unit: ', d.min_cpu, 'C/', ROUND(d.MEMORY_SIZE/1024/1024/1024,0), "G") unit_info FROM DBA_OB_RESOURCE_POOLS c, DBA_OB_UNIT_CONFIGS d, DBA_OB_TENANTS e  WHERE c.UNIT_CONFIG_ID=d.UNIT_CONFIG_ID AND c.TENANT_ID=e.TENANT_ID AND c.TENANT_ID>1000 ORDER BY c.TENANT_ID;

5.查看租户的资源单元部署位置
SELECT a.TENANT_NAME,a.TENANT_ID,b.SVR_IP FROM DBA_OB_TENANTS a,GV$OB_UNITS b WHERE a.TENANT_ID=b.TENANT_ID;

6.查看节点的 Unit 信息
SELECT * FROM GV$OB_UNITS;

7.查看 OBServer 的信息
SELECT * FROM GV$OB_SERVERS;
5.查看和设置租户白名单

通过租户白名单功能可以设置允许哪些客户端访问当前租户,通过租户系统变量 ob_tcp_invited_nodes 的值来确定。系统支持以下多种租户白名单格式:

  • 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

    1.系统租户管理员和用户租户管理员都可登录数据库,去修改白名单
    obclient -h192.168.113.161 -P2883 -uroot@mq_t1#cluster -A

    2.查看租户白名单
    SHOW VARIABLES LIKE 'ob_tcp_invited_nodes';

    3.修改租户的白名单配置
    ALTER TENANT mq_t1 VARIABLES ob_tcp_invited_nodes = '192.168.113.%';

6.租户扩缩容

租户扩/缩容可以提升/降低计算能力和存储容量,OceanBase 数据库提供了提高/降低资源规格、增加/减少服务节点两种途径来实现扩缩容:

  • 提高单节点的服务能力:调大租户的资源规格(Unit Config),从而达到单节点的服务能力提升。

    详细信息,参见 通过调整资源规格实现租户扩缩容

  • 增加服务节点:通过增加 Unit Number 和增加 Primary Zone,从而增加服务节点,达到租户总服务能力的提升。这里的扩容操作可以抽象为:将 N 个服务单元扩容为 M 个服务单元,其中,M > N。

缩容是扩容的反操作,本质上是降低租户的服务能力,包括计算能力和存储容量。可以是调小资源规格,从而降低单节点的服务能力;也可以是通过减少服务节点,包括减少 Primary Zone 个数和减少 Unit Number,从而降低租户的总服务能力。

7.修改资源池属性

修改资源池属性,即是调整资源池配置的 UNITUNIT_NUMZONE_LIST 等参数信息,是实现租户扩容或缩容的另一种方式,如,调大 UNIT_NUM 可以增加每个 Zone 中节点数量达到扩容的目的。

复制代码
1.查看资源池
SELECT * FROM DBA_OB_RESOURCE_POOLS WHERE NAME = 'mq_pool_01';

2.资源池未被分配给租户,使用ALTER RESOURCE POOL语句
 2.1.修改资源池 mq_pool_01 的资源规格为 'S2_unit_config',资源单元个数为 3,ZONE_LIST 为 'zone1','zone2','zone3'。
 2.2.ALTER RESOURCE POOL mq_pool_01 UNIT='S2_unit_config';
 2.3.ALTER RESOURCE POOL mq_pool_01 UNIT_NUM=2;
 2.4.ALTER RESOURCE POOL mq_pool_01 ZONE_LIST=('zone1','zone2','zone3');

3.资源池已被分配给租户,使用ALTER RESOURCE TENANT语句
 3.1.修改资源池 mq_pool_01 的资源规格为 'S2_unit_config',资源单元个数为 3,ZONE_LIST 为 'zone1','zone2','zone3'。
 3.2.ALTER RESOURCE POOL mq_pool_01 UNIT='S2_unit_config';
 3.3.tips:ALTER RESOURCE TENANT mq_t1 UNIT_NUM=3;
 3.4.ALTER RESOURCE POOL mq_pool_01 ZONE_LIST=('zone1','zone2','zone3');

语法:ALTER RESOURCE POOL pool_name UNIT [=] unit_name, UNIT_NUM [=] unit_num, ZONE_LIST [=] ('zone' [, 'zone' ...]);

参数说明:

  • pool_name:资源池名称。
  • UNIT:该资源池的资源规格。
  • UNIT_NUM:资源单元个数。增加 Unit 数量时,UNIT_NUM 的值不能大于每个 Zone 内 OBServer 的个数。
  • ZONE_LIST:资源池的 Zone 分布。
8.修改租户属性

修改租户的副本数、Zone 列表、主 Zone 以及系统变量值等

租户属性修改的常见场景:

  • 修改租户的 Primary Zone:Primary Zone 描述了 Leader 副本的偏好位置,而 Leader 副本承载了业务的强一致读写流量,即 Primary Zone 决定了 OceanBase 数据库的流量分布。通过修改 Primary Zone 属性可以切换业务流量,或者是从一个机房切换到另一个机房,或者是从一个城市切换到另一个城市,适用于容灾场景、扩缩容等场景。

  • 修改租户的 Locality:Locality 描述了数据的多个副本的类型及分布策略。通过修改 Locality 属性可以调整租户的部署架构,适用于机房搬迁、调整容灾级别等场景。

    1.登录系统租户
    obclient -h172.30.xx.xx -P2883 -uroot@sys#cluster -p**** -A

    2.进入 oceanbase 数据库:USE oceanbase;

    3.查看租户的配置信息:SELECT * FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_NAME = 'mq_t1';

    4.通过 ALTER TENANT 语句,修改租户属性

    5.修改租户 mq_t1 的 Primary Zone 为 "zone1,zone2",Locality 为 "F@sa128_obv4_1,F@sa128_obv4_2,F@sa128_obv4_3"
    5.1.ALTER TENANT mq_t1 PRIMARY_ZONE='zone1,zone2';
    5.2.ALTER TENANT mq_t1 LOCALITY="F@zone1,F@zone2,F@zone3";

语法:ALTER TENANT {tenant_name | all } [SET] [tenant_option_list] [opt_global_sys_vars_set]

参数说明:

  • {tenant_name | all }:指定待修改的租户,all 表示所有租户。
  • PRIMARY_ZONE:指定租户的 Primary Zone。
  • RESOURCE_POOL_LIST:指定资源池列表。每次仅支持添加或删除一个资源池。
  • LOCALITY:描述副本在 Zone 间的分布情况,如:F@zone1,F@zone2,F@zone3 表示 zone1zone2zone3 为全功能副本。该参数增加 Zone 配置时需要租户资源池的 ZONE_LIST 包含该 Zone。
9.删除租户和恢复租户

OceanBase 数据库支持通过 DROP TENANT 语句删除租户,删除租户后,租户下的数据库和表也同时被删除。但是租户使用的资源池不会被删除。资源池可以继续给其他租户使用。

  • 当系统租户开启回收站功能时,DROP TENANT 操作表示删除的租户会进入回收站。对于回收站中的租户,后续系统租户可以通过租户级回收站功能进一步删除或恢复该租户,回收站相关操作参见 回收站概述

  • 当系统租户关闭回收站功能时,DROP TENANT 操作会直接删除租户,租户下的数据库和表也同时被删除。

    1.查看租户
    SELECT * FROM DBA_OB_TENANTS WHERE TENANT_NAME = 'mq_t1';

    2.查看当前系统租户中的回收站对象,OceanBase默认开启回收站功能
    SHOW RECYCLEBIN;

    3.删除租户: DROP TENANT mq_t1;

    4.恢复回收站中的租户:FLASHBACK TENANT mq_t1 TO BEFORE DROP;

根据业务情况创建的租户就可以给使用方了,如果要扩容、调整部署分布可以根据上面的文档进行

相关推荐
OceanBase数据库官方博客1 天前
主流关系型数据库系统缺陷实证研究——OceanBase 校企联合研究
数据库·oceanbase·分布式数据库
OceanBase数据库官方博客1 天前
客户案例|美的以OceanBase为基构建云中立数字化基座破局多云孤岛
数据库·oceanbase·分布式数据库
OceanBase数据库官方博客1 天前
基于分层协作多智能体的数据库参数调优——OceanBase 校企研究
数据库·oceanbase·分布式数据库
OceanBase数据库2 天前
滔搏基于OceanBase实现 15TB到0.9TB“无痛切换”与“系统瘦身”
oceanbase·分布式数据库
OceanBase数据库3 天前
基于分层协作多智能体的数据库参数调优——OceanBase 校企研究
oceanbase·分布式数据库
OceanBase数据库3 天前
美的以OceanBase为基构建云中立数字化基座破局多云孤岛
oceanbase·分布式数据库
OceanBase数据库5 天前
印尼头部私营征信机构基于OceanBase实现核心数据库现代化升级
oceanbase·分布式数据库
OceanBase数据库官方博客5 天前
深度解读 OceanBase 多模一体化能力
数据库·ai·oceanbase·分布式数据库
赵渝强老师9 天前
【赵渝强老师】国产金仓数据库的数据库对象
数据库·postgresql·oracle·oceanbase·国产数据库
OceanBase数据库官方博客10 天前
OceanBase 一体机实现极简运维 10:1数据压缩降成本
oceanbase·分布式数据库