创建租户
OceanBase 数据库是原生分布式数据库,在同一个数据库中可以同时运行多个数据库实例,第一步往往需要创建一个租户(数据库实例),然后像使用传统单机数据库那样使用数据库实例。本文介绍如何创建租户。
创建租户的流程
OceanBase 数据库仅支持创建用户租户,系统租户由集群创建时自动创建。创建用户租户是一系列操作的组合,首先创建资源规格,然后基于该资源规格创建资源池,最后创建租户并指定其资源池。所以创建租户的顺序为:资源规格 -> 资源池 -> 租户。
- 创建资源规格:创建资源规格仅仅是规格定义,不实际分配资源,可以通过
DBA_OB_UNIT_CONFIGS视图查看所有资源规格。资源规格可以复用,可以建议根据业务场景抽象若干不同规格,例如小规格、中规格、大规格等,从而降低运维复杂度。但在租户资源不足需要应急扩容时,不能直接调整原规格,需要新建资源规格,或者直接更换更大一级的资源规格。 - 创建资源池:创建资源池时会实际创建 Unit,按照规格定义分配资源,如对应节点预留资源不够将会创建失败,通过
GV$OB_SERVERS视图可以查看所有节点资源分配信息。如果创建成功可以通过DBA_OB_RESOURCE_POOLS视图和DBA_OB_UNITS视图查看资源池及其对应 Unit。资源池不能复用,成功创建租户后指定资源池将会分配给租户。 - 创建租户:创建租户时通过指定
RESOURCE_POOL_LIST将资源池分配给租户,可以通过DBA_OB_TENANTS视图查看所有租户。可以每个 Zone 一个资源池,使用独立的资源规格。也可以所有 Zone 使用同一个资源池,从而所有 Zone 使用同一个资源规格。除了资源池列表,还有兼容模式、Primary Zone、Locality、连接白名单等其他重要属性和系统变量,其中资源池列表为创建租户时的必填项。新建租户 Root 用户密码为空,使用前请先设置密码。
资源规划
创建租户前需要做好资源规划,创建租户后再调整可能会非常麻烦。做好资源规划的前提是深入理解业务场景,从而更多的参与到业务数据库架构设计中去。
资源规划有如下注意事项:
-
每个节点需要预留一定的资源,备用于租户容量不足需要紧急扩容的情况。
-
对于大量写入的业务,需要设置较大的内存和日志盘规格。对于大量消耗 CPU 资源的业务,需要错落分布于不同节点,以避免节点负载不均衡,甚至造成热点节点并影响业务。
-
集群配置项
resource_hard_limit定义了 CPU 资源的超卖百分比,又被称为“超卖配置项”,OceanBase 数据库仅支持 CPU 超卖,不支持其他资源的超卖。CPU 超卖适用于同一集群中不同租户间峰值错峰的场景,从而提高整体资源使用率。如果租户间峰值同时出现,开启 CPU 超卖可能导致租户之间 CPU 资源的互相抢占,互相影响。 -
Unit 的资源规格不能超过单节点的总可分配资源,对于单 Unit 租户(资源池的
UNIT_NUM=1)如果出现容量瓶颈,除了更换更大规格的服务器,还可以将租户水平扩展为多 Unit,从而利用多节点的资源。多 Unit 租户需要认真设计业务数据在 Unit 间的分布,以避免分布式事务对性能的损耗。如果预计业务量会突破单机容量上限,需要提前做好数据分片的设计,数据分片需要尽量避免分布式事务。从传统数据库迁移到 OceanBase 数据库的业务,为了迁移的平滑性往往采用对等架构,即采用单 Unit 租户的设计方案,以保证业务访问数据库时依然仅需要访问单节点。当随着业务量增加达到单机容量上限后,可以扩展为多 Unit 租户,按照业务场景将业务数据拆分为多组。每组业务数据放置于一个 Unit 内,保证每个业务的数据库访问不跨机,从而在零性能损耗的情况下实现水平扩容。这也是 OceanBase 数据库相比于传统数据库的架构优势之一,易用的水平扩展性,可以轻松突破单机容量上限。
注意事项
OceanBase 数据库支持两种类型的租户,MySQL 兼容模式和 Oracle 兼容模式。创建租户时,您需要指定租户的类型。租户创建后,租户类型无法修改,因此创建租户前请规划好您的租户类型。
步骤一:创建资源规格
资源规格是对 CPU、内存、磁盘空间、IOPS 等资源项进行的定义。
说明
基于 OceanBase 数据库 3.x 版本的大量实践经验,OceanBase 数据库 V4.0 的资源管理功能有很大改进:
• 支持 Unit 级别管理 CPU、内存、日志盘空间、IOPS 等资源项,不支持 Unit 级别管理数据盘空间和 Session 个数等资源项。为了兼容 3.x 版本的运维工具和测试用例,CREATE RESOURCE UNIT 语句依然可以指定 MAX_DISK_SIZE 和 MAX_SESSION_NUM,但是不会生效,也不会报错。
• 支持 CPU 超卖,通过超卖配置项 resource_hard_limit 控制。GV$OB_SERVERS 视图中的 CPU_CAPACITY 和 CPU_CAPACITY_MAX 字段分别表示节点 CPU 总容量和节点 CPU 总容量的超卖值,且 CPU_CAPACITY_MAX = CPU_CAPACITY * resource_hard_limit。
• 不再支持内存超卖,引入内存超卖可能会导致租户工作不稳定。
• 支持租户间日志盘空间隔离,系统为每个租户预留日志盘空间,避免 V3.x 版本某个租户大量写入导致日志盘写爆从而影响其他租户的问题。
• 支持租户间 IOPS 隔离,引入三个 IOPS 规格参数:MIN_IOPS、MAX_IOPS、IOPS_WEIGHT,IOPS 规格参数默认不需要指定,系统根据 CPU 规格自动计算。如果一个节点上所有 Unit 的 MIN_IOPS 之和超过了磁盘 IOPS 上限,则会根据 IOPS_WEIGHT 权重来分配 IOPS 资源。
• Meta 租户没有独立的 Unit,系统创建租户时默认为 Meta 租户预留资源,各项资源从用户租户资源中扣除。Meta 各项资源采用默认配置,不支持用户指定。
• 创建资源规格时 CPU 规格 和内存规格是必选项,其他参数可以自动计算,其中日志盘空间按照内存规格自动计算,IOPS 规格按照 CPU 规格自动计算。
操作步骤
-
使用
root用户登录到集群的sys租户。obclient -h172.30.xx.xx -P2883 -uroot@sys#cluster -p**** -A -
进入
oceanbase数据库。USE oceanbase; -
通过
DBA_OB_UNIT_CONFIGS视图,获取已有的资源规格信息。obclient [oceanbase]> SELECT * FROM oceanbase.DBA_OB_UNIT_CONFIGS; +----------------+-------------------------------+----------------------------+----------------------------+---------+---------+-------------+---------------+----------+----------+-------------+ | UNIT_CONFIG_ID | NAME | CREATE_TIME | MODIFY_TIME | MAX_CPU | MIN_CPU | MEMORY_SIZE | LOG_DISK_SIZE | MAX_IOPS | MIN_IOPS | IOPS_WEIGHT | +----------------+-------------------------------+----------------------------+----------------------------+---------+---------+-------------+---------------+----------+----------+-------------+ | 1 | sys_unit_config | 2022-12-20 17:50:17.035504 | 2022-12-20 17:50:17.035504 | 1 | 1 | 14495514624 | 14495514624 | 10000 | 10000 | 1 | | 1001 | config_mysql001_zone1_S1_okz | 2022-12-20 18:04:31.547715 | 2022-12-20 18:04:31.547715 | 1.5 | 1.5 | 6442450944 | 19327352832 | 15000 | 15000 | 1 | | 1002 | config_mysql001_zone2_S1_pme | 2022-12-20 18:04:31.561335 | 2022-12-20 18:04:31.561335 | 1.5 | 1.5 | 6442450944 | 19327352832 | 15000 | 15000 | 1 | | 1003 | config_mysql001_zone3_S1_jsu | 2022-12-20 18:04:31.564510 | 2022-12-20 18:04:31.564510 | 1.5 | 1.5 | 6442450944 | 19327352832 | 15000 | 15000 | 1 | | 1013 | config_oracle001_zone3_S1_exu | 2022-12-26 18:28:37.969047 | 2022-12-26 18:28:37.969047 | 1.5 | 1.5 | 6442450944 | 19327352832 | 15000 | 15000 | 1 | | 1014 | config_oracle001_zone2_S1_hli | 2022-12-26 18:28:37.972194 | 2022-12-26 18:28:37.972194 | 1.5 | 1.5 | 6442450944 | 19327352832 | 15000 | 15000 | 1 | | 1015 | config_oracle001_zone1_S1_owy | 2022-12-26 18:28:37.976446 | 2022-12-26 18:28:37.976446 | 1.5 | 1.5 | 6442450944 | 19327352832 | 15000 | 15000 | 1 | +----------------+-------------------------------+----------------------------+----------------------------+---------+---------+-------------+---------------+----------+----------+-------------+ 7 rows in setDBA_OB_UNIT_CONFIGS视图的详细说明,参见 DBA_OB_UNIT_CONFIGS。 -
通过
CREATE RESOURCE UNIT语句,创建资源规格。语法如下:
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:内存规格,最小为 1G。OceanBase 数据库 V4.0 开始不支持内存超卖。 -
MAX_CPU:CPU 规格上限,MIN_CPU是 CPU 规格下限,单位是核数。如果用户没有指定MIN_CPU,默认等于MAX_CPU值。 -
MIN_CPU:最小的 CPU 规格,所有租户的MIN_CPU的总和不能超过该节点 CPU 总容量CPU_CAPACITY。 -
MAX_IOPS和MIN_IOPS:MAX_IOPS和MIN_IOPS参数的最小值为 1024,并且要求MAX_IOPS >= MIN_IOPS。如果不指定,默认系统将根据 CPU 的规格自动计算。系统自动计算 IOPS 参数值的规则如下:
- 如果
MIN_IOPS和MAX_IOPS均未指定,则根据MIN_CPU规格自动计算,1 个 Core 对应 1 万 IOPS 的值,即MAX_IOPS = MIN_IOPS = MIN_CPU * 10000。此时:- 如果未指定
IOPS_WEIGHT的值,则IOPS_WEIGHT = MIN_CPU。 - 如果指定了
IOPS_WEIGHT的值,则以指定的值为准。
- 如果未指定
- 如果仅指定了
MAX_IOPS的值,则MIN_IOPS取MAX_IOPS的值;同样,如果仅指定了MIN_IOPS的值,则MAX_IOPS取MIN_IOPS的值。此时:- 如果
IOPS_WEIGHT的值未指定,则默认为0。
- 如果
- 如果
-
LOG_DISK_SIZE:日志盘空间,OceanBase 数据库 V4.0 会按租户管理日志盘空间,系统为各个租户预留日志盘空间,实现按租户隔离。当用户没有指定时,LOG_DISK_SIZE默认值是内存规格的 3 倍大小,最小为 2G。 -
OceanBase 数据库 V4.0 支持租户间 IOPS 隔离,通过
MAX_IOPS、MIN_IOPS、IOPS_WEIGHT三个参数决定。IOPS 规格参数默认不需要指定,系统根据 CPU 规格自动计算。
CREATE RESOURCE UNIT语句的详细说明,参见 CREATE RESOURCE UNIT。示例:
创建一个名称为
S1_unit_config的资源规格,其资源配置为 CPU 为 1 核,内存 2G,日志盘空间 6G。obclient [oceanbase]> CREATE RESOURCE UNIT S1_unit_config MEMORY_SIZE = '2G', MAX_CPU = 1, MIN_CPU = 1, LOG_DISK_SIZE = '6G', MAX_IOPS = 10000, MIN_IOPS = 10000, IOPS_WEIGHT=1; -
-
查询
DBA_OB_UNIT_CONFIGS视图,确认资源规格创建成功。obclient [oceanbase]> SELECT * FROM oceanbase.DBA_OB_UNIT_CONFIGS WHERE NAME = 'S1_unit_config'; +----------------+----------------+----------------------------+----------------------------+---------+---------+-------------+---------------+----------+----------+-------------+ | UNIT_CONFIG_ID | NAME | CREATE_TIME | MODIFY_TIME | MAX_CPU | MIN_CPU | MEMORY_SIZE | LOG_DISK_SIZE | MAX_IOPS | MIN_IOPS | IOPS_WEIGHT | +----------------+----------------+----------------------------+----------------------------+---------+---------+-------------+---------------+----------+----------+-------------+ | 1020 | S1_unit_config | 2023-01-10 22:31:38.805862 | 2023-01-10 22:31:38.805862 | 1 | 1 | 2147483648 | 6442450944 | 10000 | 10000 | 1 | +----------------+----------------+----------------------------+----------------------------+---------+---------+-------------+---------------+----------+----------+-------------+ 1 row in set
步骤二:创建资源池
创建资源规格后,可以在创建资源池时指定资源规格,从而使用相应大小的资源单元,并最终分配给相应的租户。
前提条件
- 确认集群是否有足够的可用资源来创建资源池。详细操作,参见 查看租户和资源信息。
- 创建资源池时需要指定其资源规格。在执行创建资源池操作前,请确认是否有可用的资源规格。有关创建资源规格的详细操作,参见 创建资源规格。
操作步骤
-
使用 root 用户登录到集群的 sys 租户。
obclient -h172.30.xx.xx -P2883 -uroot@sys#cluster -p**** -A -
进入
oceanbase数据库。obclient [(none)]> USE oceanbase; -
通过
DBA_OB_RESOURCE_POOLS视图,获取资源池的配置信息。obclient [oceanbase]> SELECT * FROM oceanbase.DBA_OB_RESOURCE_POOLS; +------------------+--------------------------+-----------+----------------------------+----------------------------+------------+----------------+-------------------+--------------+ | RESOURCE_POOL_ID | NAME | TENANT_ID | CREATE_TIME | MODIFY_TIME | UNIT_COUNT | UNIT_CONFIG_ID | ZONE_LIST | REPLICA_TYPE | +------------------+--------------------------+-----------+----------------------------+----------------------------+------------+----------------+-------------------+--------------+ | 1 | sys_pool | 1 | 2022-12-20 17:50:17.038641 | 2022-12-20 17:50:17.045453 | 1 | 1 | zone1;zone2;zone3 | FULL | | 1001 | pool_mysql001_zone3_jsu | 1002 | 2022-12-20 18:04:31.607227 | 2022-12-20 18:04:31.692836 | 1 | 1003 | zone3 | FULL | | 1002 | pool_mysql001_zone1_okz | 1002 | 2022-12-20 18:04:31.617087 | 2022-12-20 18:04:31.691827 | 1 | 1001 | zone1 | FULL | | 1003 | pool_mysql001_zone2_pme | 1002 | 2022-12-20 18:04:31.621327 | 2022-12-20 18:04:31.692836 | 1 | 1002 | zone2 | FULL | | 1013 | pool_oracle001_zone3_exu | 1010 | 2022-12-26 18:28:37.979539 | 2022-12-26 18:28:38.059505 | 1 | 1013 | zone3 | FULL | | 1014 | pool_oracle001_zone1_owy | 1010 | 2022-12-26 18:28:37.988964 | 2022-12-26 18:28:38.058440 | 1 | 1015 | zone1 | FULL | | 1015 | pool_oracle001_zone2_hli | 1010 | 2022-12-26 18:28:37.994241 | 2022-12-26 18:28:38.059505 | 1 | 1014 | zone2 | FULL | +------------------+--------------------------+-----------+----------------------------+----------------------------+------------+----------------+-------------------+--------------+ 7 rows in setDBA_OB_RESOURCE_POOLS视图的详细说明,参见 DBA_OB_RESOURCE_POOLS。 -
通过
CREATE RESOURCE POOL语句,创建资源池。语法如下:
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参数设置的值。
CREATE RESOURCE POOL语句的详细说明,参见 CREATE RESOURCE POOL。示例:
创建一个名为
mq_pool_01的资源池,在 zone1、zone2 里各创建 1 个 Unit,每个 Unit 的资源规格为S1_unit_config。obclient [oceanbase]> CREATE RESOURCE POOL mq_pool_01 UNIT='S1_unit_config', UNIT_NUM=1, ZONE_LIST=('zone1','zone2'); -
查询
DBA_OB_RESOURCE_POOLS视图,确认资源池创建成功。obclient [oceanbase]> SELECT * FROM DBA_OB_RESOURCE_POOLS WHERE NAME = 'mq_pool_01'; +------------------+------------+-----------+----------------------------+----------------------------+------------+----------------+-------------+--------------+ | RESOURCE_POOL_ID | NAME | TENANT_ID | CREATE_TIME | MODIFY_TIME | UNIT_COUNT | UNIT_CONFIG_ID | ZONE_LIST | REPLICA_TYPE | +------------------+------------+-----------+----------------------------+----------------------------+------------+----------------+-------------+--------------+ | 1024 | mq_pool_01 | NULL | 2023-01-10 22:37:08.212366 | 2023-01-10 22:37:08.212366 | 1 | 1020 | zone1;zone2 | FULL | +------------------+------------+-----------+----------------------------+----------------------------+------------+----------------+-------------+--------------+ 1 row in set
步骤三:创建租户
资源池创建后,您可以根据业务需要,将资源池分配给租户。
前提条件
确保已有可用的资源池。有关创建资源池和资源单元的详细操作,参见 创建资源池。
注意事项
OceanBase 数据库支持两种类型的租户,MySQL 兼容模式和 Oracle 兼容模式。创建租户时,您需要指定租户的类型。租户创建后,租户类型无法修改,因此创建租户前请规划好您的租户类型。
操作步骤
-
使用 root 用户登录到集群的 sys 租户。
obclient -h172.30.xx.xx -P2883 -uroot@sys#cluster -p**** -A -
进入
oceanbase数据库。USE oceanbase; -
通过
DBA_OB_TENANTS视图,查看所有的租户信息。obclient [oceanbase]> SELECT * FROM oceanbase.DBA_OB_TENANTS; +-----------+-------------+-------------+----------------------------+----------------------------+--------------+---------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+ | 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 | 1684395321137516636 | 1684395321137516636 | 1684395321052204807 | 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 | 1684395321137558760 | 1684395321137558760 | 1684395320951813345 | 4611686018427387903 | NOARCHIVELOG | DISABLED | +-----------+-------------+-------------+----------------------------+----------------------------+--------------+---------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+ 5 rows in setDBA_OB_TENANTS视图的详细说明,请参见 DBA_OB_TENANTS。 -
通过
CREATE TENANT语句,创建租户。语法如下:
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。V4.0 版本修改 Primary Zone 功能并不完善,并不能实现租户下已有表和分区的读写服务能力的扩缩容。建议用户创建租户时一次性配置好租户的 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_LIST的ZONE_LIST属性,租户的副本个数继承于RESOURCE_POOL_LIST的ZONE_LIST属性的个数,租户在每个 Zone 的 Unit 个数继承于RESOURCE_POOL_LIST的UNIT_NUM属性、租户的 Unit 的资源规格继承于RESOURCE_POOL_LIST的 Unit 属性。注意
属于同一个租户的多个资源池,对应的ZONE_LIST彼此不允许有交集。 -
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 模式。
CREATE TENANT语句的详细说明,参见 CREATE TENANT。示例:
-
创建一个名为
mq_t1的租户(默认为 MySQL 模式租户),副本数为 3,资源池指定为mq_pool_01,Primary Zone 为 zone1,允许所有 IP 连接数据库。租户的副本分布的 Zone List 继承于
resource_pool_list的zone_list属性,租户的副本个数继承于resource_pool_list的zone_list属性的个数,租户在每个 Zone 的 Unit 个数继承于resource_pool_list的unit_num属性、租户的 Unit 的资源规格继承于resource_pool_list的unit属性。obclient [oceanbase]> CREATE TENANT IF NOT EXISTS mq_t1 PRIMARY_ZONE='zone1', RESOURCE_POOL_LIST=('mq_pool_01') set OB_TCP_INVITED_NODES='%'; -
创建一个名为
oracle_tenant1的 Oracle 兼容模式租户,需要显式指定ob_compatibility_mode='oracle'。obclient [oceanbase]>CREATE TENANT IF NOT EXISTS oracle_tenant1 PRIMARY_ZONE='zone1', RESOURCE_POOL_LIST=('mq_pool_01') SET OB_TCP_INVITED_NODES='%', ob_compatibility_mode='oracle';
-
-
查询
DBA_OB_TENANTS视图,确认租户创建成功。obclient [oceanbase]> SELECT * FROM DBA_OB_TENANTS WHERE TENANT_NAME = 'mq_t1'; +-----------+-------------+-------------+----------------------------+----------------------------+--------------+------------------------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+ | 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 | +-----------+-------------+-------------+----------------------------+----------------------------+--------------+------------------------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+ | 1006 | mq_t1 | USER | 2023-05-18 15:48:57.447657 | 2023-05-18 15:49:12.857944 | zone1;zone2 | FULL{1}@zone1, FULL{1}@zone2 | NULL | MYSQL | NORMAL | NO | NO | PRIMARY | NORMAL | 0 | 1684396167132057328 | 1684396167132057328 | 1684396167051160964 | 4611686018427387903 | NOARCHIVELOG | DISABLED | +-----------+-------------+-------------+----------------------------+----------------------------+--------------+------------------------------+-------------------+--------------------+--------+---------------+--------+-------------+-------------------+------------------+---------------------+---------------------+---------------------+---------------------+--------------+----------------------------+ 1 row in set -
租户创建成功后,可以尝试登录租户进行使用。
默认管理员用户(MySQL 模式为 root,Oracle 模式为 sys)的密码为空,您需要及时修改管理员用户的密码。
-
MySQL 兼容模式
-
登录
mq_t1租户的 root 用户。obclient -h172.30.xx.xx -P2883 -uroot@mq_t1#cluster -A -
执行以下语句修改 root 用户的密码。
obclient [(none)]> ALTER USER root IDENTIFIED BY '****'; Query OK, 0 rows affected
-
-
Oracle 兼容模式
-
登录
moracle_tenant1租户的 sys 用户。obclient -h172.30.xx.xx -P2883 -usys@oracle_tenant1#cluster -A -
执行以下语句修改 sys 用户的密码。
obclient [SYS]> ALTER USER sys IDENTIFIED BY '****'; Query OK, 0 rows affected
-
-
-
管理员用户密码修改成功后,重新登录租户。
-
MySQL 兼容模式
obclient -h172.30.xx.xx -P2883 -uroot@mq_t1#cluster -p**** -A -
Oracle 兼容模式
obclient -h172.30.xx.xx -P2883 -usys@oracle_tenant1#cluster -p**** -A
-
后续操作
租户创建成功后,您可以使用管理员用户登录并连接数据库,更多连接数据库的方法和详细操作请参见 连接数据库概述(MySQL 模式) 和 连接数据库概述(Oracle 模式)。如果您需要使用普通用户登录,则需要为租户创建新的普通用户并授权,创建用户并授权的相关操作请参见 用户和权限。




