1 Star 0 Fork 0

OceanBase / tutorials-doc

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
3.3-2-how-to-create-and-connect-a-mysql-tenant.md 14.32 KB
一键复制 编辑 原始数据 按行查看 历史
obdev 提交于 2023-08-07 12:38 . PullRequest: 39 常用词扫描

3.2 如何创建和连接 MySQL 租户

创建租户分为以下三步:

  1. 创建资源单元规格:该步骤为可选步骤,如果有合适的规格可以跳过此步骤,直接进行复用。

  2. 创建资源池:可以每个 Zone 一个资源池,使用独立的资源单元规格,也可以所有 Zone 使用同一个资源单元规格,都在一个资源池下。

  3. 创建租户:创建租户时需关联到第 2 步中创建的资源池。

创建资源单元规格

创建资源单元规格后并不会立即分配资源。资源单元规格元数据在视图 __all_unit_config 里,建议创建之前先查看此视图,如果有合适的规格,可直接复用。

  • 语法

    资源单元规格创建语法如下:

    CREATE RESOURCE UNIT unit_name 
    MAX_CPU [=] cpu_num, 
    MAX_MEMORY [=] mem_size, 
    MAX_IOPS [=] iops_num, 
    MAX_DISK_SIZE [=] disk_size, 
    MAX_SESSION_NUM [=] session_num, 
    [MIN_CPU [=] cpu_num,]
    [MIN_MEMORY [=] mem_size,] 
    [MIN_IOPS [=] iops_num] ;

    参数解释:

    参数 描述
    MAX_CPU 指定 CPU 的最多数量。
    MAX_MEMORY 指定最大内存容量,取值范围为 [1073741824, +∞) 。单位为字节 B,最小值为 1G。
    MAX_IOPS 指定 IOPS 的最多数量,取值范围为 [128,+∞)。
    MAX_DISK_SIZE 指定最大硬盘容量,取值范围为[536870912,+∞]。单位为字节,最小值为 512M。
    MAX_SESSION_NUM 指定 Session 的最多数量,取值范围为 [64,+∞)。
    MIN_CPU 指定 CPU 的最少数量。
    MIN_MEMORY 指定最小内存容量。
    MIN_IOPS 指定 IOPS 的最少数量。
  • 示例:分别创建两个资源单元规格 S1、S2

    
    CREATE resource unit S1 max_cpu=3, min_cpu=3, max_memory='3G', min_memory='3G', max_iops=10000, min_iops=1000, max_session_num=1000000, max_disk_size='1024G';
    CREATE resource unit S2 max_cpu=4, min_cpu=4, max_memory='3G', min_memory='3G', max_iops=10000, min_iops=1000, max_session_num=1000000, max_disk_size='1024G';

    查看创建的资源单元规格:

    MySQL [oceanbase]> select * from __all_unit_config;
    +----------------------------+----------------------------+----------------+-----------------+---------+---------+------------+------------+----------+----------+---------------+---------------------+
    | gmt_create                 | gmt_modified               | unit_config_id | name            | max_cpu | min_cpu | max_memory | min_memory | max_iops | min_iops | max_disk_size | max_session_num     |
    +----------------------------+----------------------------+----------------+-----------------+---------+---------+------------+------------+----------+----------+---------------+---------------------+
    | 2021-09-12 14:49:43.422194 | 2021-09-13 14:02:08.782027 |              1 | sys_unit_config |       5 |       5 | 1610612736 | 1610612736 |    10000 |     5000 |   53687091200 | 9223372036854775807 |
    | 2021-09-14 11:10:51.296235 | 2021-09-14 11:10:51.296235 |           1002 | S1              |       3 |       3 | 3221225472 | 3221225472 |    10000 |     1000 | 1099511627776 |             1000000 |
    | 2021-09-14 11:13:46.773639 | 2021-09-14 11:13:46.773639 |           1004 | S2              |       4 |       4 | 3221225472 | 3221225472 |    10000 |     1000 | 1099511627776 |             1000000 |
    +----------------------------+----------------------------+----------------+-----------------+---------+---------+------------+------------+----------+----------+---------------+---------------------+
    3 rows in set (0.001 sec)

创建资源池

资源池中的资源是从节点资源中分配而来。资源池在每个节点里的部分被称为资源单元。每个资源单元的大小通过创建时指定的资源单元规格大小确定。

  • 语法

    创建资源池的语法如下:

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

    参数解释:

    参数 描述
    poolname 指定要创建的资源池的名称。
    UNIT = unitname 指定资源规格的名称。
    UNIT_NUM = unitnum 指定要创建的单个 Zone 下的 Unit 个数。每个单元会根据当前集群负载,自动在每个 Zone 中选择一个 Server 负载,但同一个资源池的多个 Unit 不能分配到同一个 Server,即一个资源池包含的 Unit 个数不能超过单 ZoneServer 的个数。
    ZONE_LIST = ('zone' [, 'zone' ...]) 指定要创建的资源池所属的 Zone。 如果不指定,就默认在所有 Zone 创建这个资源单元。
  • 示例

    本次示例中创建 2 个资源池,分别使用不同的资源单元规格。且其中一个资源池横跨两个 Zone。 这样操作主要是为了演示资源池创建时的灵活性。生产环境中,为了管理方便,可以一个资源池横跨三个 Zone,并且使用同一种资源单元规格。

    create resource pool pool_1 unit='S1' , unit_num=1, zone_list=('zone1' ,'zone2') ;
    create resource pool pool_2 unit='S2' , unit_num=1, zone_list=('zone3');
    • 查看资源池详情:

      select t1.name resource_pool_name, t2.`name` unit_config_name, t2.max_cpu, t2.min_cpu, t2.max_memory/1024/1024/1024 max_mem_gb, t2.min_memory/1024/1024/1024 min_mem_gb, t3.unit_id, t3.zone, concat(t3.svr_ip,':',t3.`svr_port`) observer,t4.tenant_id, t4.tenant_name
      from __all_resource_pool t1 join __all_unit_config t2 on (t1.unit_config_id=t2.unit_config_id)
          join __all_unit t3 on (t1.`resource_pool_id` = t3.`resource_pool_id`)
          left join __all_tenant t4 on (t1.tenant_id=t4.tenant_id)
      order by t1.`resource_pool_id`, t2.`unit_config_id`, t3.unit_id
      ;

      资源池详情如下:

      
      +--------------------+------------------+---------+---------+----------------+----------------+---------+-------+--------------------+-----------+-------------+
      | resource_pool_name | unit_config_name | max_cpu | min_cpu | max_mem_gb     | min_mem_gb     | unit_id | zone  | observer           | tenant_id | tenant_name |
      +--------------------+------------------+---------+---------+----------------+----------------+---------+-------+--------------------+-----------+-------------+
      | sys_pool           | sys_unit_config  |       5 |       5 | 1.500000000000 | 1.500000000000 |       1 | zone1 | 172.20.249.52:2882 |         1 | sys         |
      | sys_pool           | sys_unit_config  |       5 |       5 | 1.500000000000 | 1.500000000000 |       2 | zone2 | 172.20.249.49:2882 |         1 | sys         |
      | sys_pool           | sys_unit_config  |       5 |       5 | 1.500000000000 | 1.500000000000 |       3 | zone3 | 172.20.249.51:2882 |         1 | sys         |
      | pool_1             | S1               |       3 |       3 | 3.000000000000 | 3.000000000000 |    1006 | zone1 | 172.20.249.52:2882 |      NULL |    NULL   |
      | pool_1             | S1               |       3 |       3 | 3.000000000000 | 3.000000000000 |    1007 | zone2 | 172.20.249.49:2882 |      NULL |   NULL    |
      | pool_2             | S2               |       4 |       4 | 3.000000000000 | 3.000000000000 |    1008 | zone3 | 172.20.249.51:2882 |      NULL |    NULL   |
      +--------------------+------------------+---------+---------+----------------+----------------+---------+-------+--------------------+-----------+-------------+
      6 rows in set (0.037 sec)
    • 查看集群剩余可用资源:

      
      select a.zone,concat(a.svr_ip,':',a.svr_port) observer, cpu_total, cpu_assigned, (cpu_total-cpu_assigned) cpu_free, mem_total/1024/1024/1024 mem_total_gb, mem_assigned/1024/1024/1024 mem_assign_gb, (mem_total-mem_assigned)/1024/1024/1024 mem_free_gb 
      from __all_virtual_server_stat a join __all_server b on (a.svr_ip=b.svr_ip and a.svr_port=b.svr_port)
      order by a.zone, a.svr_ip
      ;

      剩余可用资源如下:

      
      +-------+--------------------+-----------+--------------+----------+----------------+----------------+----------------+
      | zone  | observer           | cpu_total | cpu_assigned | cpu_free | mem_total_gb   | mem_assign_gb  | mem_free_gb    |
      +-------+--------------------+-----------+--------------+----------+----------------+----------------+----------------+
      | zone1 | 172.20.249.52:2882 |        14 |            8 |        6 | 5.000000000000 | 4.500000000000 | 0.500000000000 |
      | zone2 | 172.20.249.49:2882 |        14 |            8 |        6 | 5.000000000000 | 4.500000000000 | 0.500000000000 |
      | zone3 | 172.20.249.51:2882 |        14 |            9 |        5 | 5.000000000000 | 4.500000000000 | 0.500000000000 |
      +-------+--------------------+-----------+--------------+----------+----------------+----------------+----------------+
      3 rows in set (0.026 sec)

    说明

    资源池创建出来后,集群的可用资源就减少了。但是这个资源池还没有关联到具体租户,所以无法被业务使用。

创建租户

租户就是实例,创建租户需要关联到某个资源池。

  • 语法

    创建租户的语法如下:

    CREATE TENANT [IF NOT EXISTS] tenant_name 
        [tenant_characteristic_list] [opt_set_sys_var];
    
    tenant_characteristic_list: 
      tenant_characteristic [, tenant_characteristic...]
    
    tenant_characteristic: 
          COMMENT 'string'  
        | {CHARACTER SET | CHARSET} [=] charsetname 
        | COLLATE [=]  collationname
        | REPLICA_NUM [=] num 
        | ZONE_LIST [=] (zone [, zone...]) 
        | PRIMARY_ZONE [=] zone  
        | DEFAULT TABLEGROUP [=] {NULL | tablegroup}
        | RESOURCE_POOL_LIST [=](poolname [, poolname...])
        | LOGONLY_REPLICA_NUM [=] num
        | LOCALITY [=] 'locality description'
    
    opt_set_sys_var:
      {SET | SET VARIABLES | VARIABLES} system_var_name = expr [,system_var_name = expr] ...

    参数解释:

    参数 描述
    tenant_name 指定租户名。最长 64 个字节,只能由大小写英文字母、数字和下划线组成,而且必须以字母或下划线开头,并且不能是 OceanBase 数据库的关键字。
    IF NOT EXISTS 如果要创建的租户名已存在,并且没有指定 IF NOT EXISTS,则会报错。
    RESOURCE_POOL_LIST 资源池列表,为创建租户时的必填项 。
    DEFAULT TABLEGROUP 设置租户默认表分组信息,NULL 表示取消默认表分组。如果不指定,默认为 NULL。
    COMMENT 修改注释。
    CHARACTER SET CHARSET
    COLLATE 指定校对规则。
    REPLICA_NUM 指定副本数。
    ZONE_LIST 指定要修改的 Zone 列表。
    PRIMARY_ZONE 指定 Primary Zone。
    LOGONLY_REPLICA_NUM 指定日志副本数。
    LOCALITY 描述副本在 Zone 间的分布情况,如:F@z1,F@z2,F@z3,R@z4 表示 z1、z2、z3 为全功能副本,z4 为只读副本。
    system_var_name 指定租户系统变量值。其中 ob_compatibility_mode 用于指定租户的兼容模式(可选 mysqloracle 。社区版只支持 mysql ),只能在创建时指定。如果不指定 ob_compatibility_mode,默认兼容模式为 mysql
  • 示例

    创建租户时可以通过 set 命令指定租户变量(参数)值。

    create tenant obmysql resource_pool_list=('pool_1','pool_2'), primary_zone='RANDOM',comment 'mysql tenant/instance', charset='utf8'  set ob_tcp_invited_nodes='%' ;

    查看创建结果:

    MySQL [oceanbase]> select * from gv$tenant;
    +-----------+-------------+-------------------+-------------------+----------------+-----------------------+-----------+---------------------------------------------+
    | tenant_id | tenant_name | zone_list         | primary_zone      | collation_type | info                  | read_only | locality                                    |
    +-----------+-------------+-------------------+-------------------+----------------+-----------------------+-----------+---------------------------------------------+
    |         1 | sys         | zone1;zone2;zone3 | zone1;zone2,zone3 |              0 | system tenant         |         0 | FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3 |
    |      1001 | obmysql     | zone1;zone2;zone3 | RANDOM            |              0 | mysql tenant/instance |         0 | FULL{1}@zone1, FULL{1}@zone2, FULL{1}@zone3 |
    +-----------+-------------+-------------------+-------------------+----------------+-----------------------+-----------+---------------------------------------------+
    2 rows in set (0.005 sec)
1
https://gitee.com/oceanbase/tutorials-doc.git
git@gitee.com:oceanbase/tutorials-doc.git
oceanbase
tutorials-doc
tutorials-doc
V1.0.0

搜索帮助