[TOC] # 创建用户租户 影响,类似于数据库中的实例。 ## 背景 MySQL 是一个单租户的模式 ,所有用户在一套资源池下进行使用,这可能会导致一种故障。当用户负载非常高时,应用将用尽数据库的所有资源,导致数据库管理员无法连接数据库,也无法执行一些高优先级的控制命令。例如无法执行 kill 命令杀死超时的查询,或者一些管理平台也无法连接到数据库等。 OceanBase 数据库默认会自动创建 sys 租户,sys 租户负责一部分 OceanBase 数据库的管理工作,并且能够访问系统元数据表,sys 自动预留了一定的资源。 ## 创建用户租户 1. 使用 root 账号登陆到 sys 租户中,使用 MySQL 或 OBClient 访问 OceanBase 数据库: ~~~ obclient -hxxxx -uroot@sys -P2883 -pxxxxx -Doceanbase ~~~ 详细信息,参考[OBClient 文档](https://github.com/oceanbase/obclient/blob/master/README.md)。 2. 查询系统资源占用情况,例如: ~~~ 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. 查询系统资源:分配情况: ~~~ 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 得到的值。 ~~~ 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 = 21474836480 -- 20GB ; ~~~ 5. 创建资源池。 ~~~ CREATE RESOURCE POOL pool1 UNIT = 'unit7', UNIT_NUM = 1, ZONE_LIST = ('zone1', 'zone2', 'zone3') ; ~~~ 1. 每个资源池在每个 OBServer 上只能有一个资源单元。如果`unit_num`大于1,每个 zone 内都必须有和`unit_num`对应数目的机器。 2. ZoneList 一般与 zone 个数保持一致。 3. 如果在某个 zone 内找不到足够剩余资源的机器来创建资源单元,资源池会创建失败。 ~~~ drop resource pool pool1; ~~~ 详细信息,参考[资源管理概述](https://open.oceanbase.com/docs/community/oceanbase-database/V3.1.0/resource-management-overview)。 6. 创建租户。 ~~~ 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') ; ~~~ PrimaryZone:指定主副本分配到 Zone 内的优先级,逗号两侧优先级相同。分号左侧优先级高于右侧。比如 zone1>zone2=zone3。 详细信息,参考[租户管理概述](https://open.oceanbase.com/docs/community/oceanbase-database/V3.1.0/tenant-management-overview-1)。 7. 登录租户之前,运行以下命令修改参数: ~~~ alter tenant test_tenant set variables ob_tcp_invited_nodes='%' ~~~