151 lines
5.1 KiB
Markdown
151 lines
5.1 KiB
Markdown
创建用户租户
|
|
===========================
|
|
|
|
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) 文档。
|
|
|