租户管理

定义

多租户简单来说是指一个单独的实例可以为多个组织服务,多租户为共用的数据如何以单一系统架构与服务提供多数客户端相同甚至可定制化的服务,并且仍然可以保障客户的数据隔离。一个支持多租户技术的系统需要在设计上对它的数据和配置进行虚拟分区,从而使系统的每个租户或称组织都能够使用一个单独的系统实例,并且每个租户都可以根据自己的需求对租用的系统实例进行个性化配置。

租户的作用

租户的特点:既可以实现多个租户之间共享系统实例,同时又可以实现租户的系统实例的个性化定制;可以保证系统共性的部分被共享,个性的部分被单独隔离。通过在多个租户之间的资源复用,运营管理维护资源,有效节省开发应用的成本。并且数据库升级的时候,只需要少量修改相应的配即可。

Hubble租户分类

Hubble数据库也提供了租户的功能,主要分为按照节点和按照目录的两种方式来分租户。

复制区域

ALTER语句用于重置或控制这些对象的复制区域。要查看有关现有复制区域的详细信息,您可以使用复制区域来控制特定数据的对应服务数量和位置,最终达到平衡集群的目的。

参数

  • range_name:要更改其复制区域配置的系统范围的名称。
  • database_name:要更改其复制区域配置的数据库的名称。
  • table_name:要更改其复制区域配置的表的名称。
  • partition_name:要更改其复制区域配置的分区的名称。
  • index_name:要更改其复制区域配置的索引的名称。

变量

  • range_min_bytes:区域中数据范围的最小大小(以字节为单位)。当一个范围小于这个大小时,hubble会将它与相邻的范围合并。
  • range_max_bytes:区域中数据范围的最大大小(以字节为单位)。当一个范围达到这个大小时,hubble会将它分成两个范围。
  • gc.ttlseconds:在垃圾收集之前将保留被覆盖值的秒数。如果值经常被覆盖,较小的值可以节省磁盘空间。
  • num_replicas:区域中的副本数。
  • constraints:影响副本位置的约束的数组。

示例

  • num_replicas的最小值是1。

  • constraints约束的总数不能超过num_replicas

  • 约束中出现的key=value或attr至少匹配一个node/store。

按目录分租户

一个集群中有不同的目录,我们可以按照不同的属性进行数据的归类,能够让数据通过文件配置的方式进入特定的目录,具体配置方式在集群目录位置节点的启动属性。

  • 节点启动属性的介绍
--attrs 举例:--attrs=ram:64gb、ssd、hhd
--store attrs 举例: --store=path=/data3/hubbledir/hubble,attrs=ssd   --store=path=/data3/hubbledir/hubble,attrs=hdd:7200rpm
  • 指定数据存储在store属性中
ALTER table kld.dept configure zone using constraints='[+ssd]',num_replicas = 3;

按节点分租户

索引层级

  • 查看索引节点配置
root@hubble01:35432/kld> show zone configuration for index emp_index;
     target     |              raw_config_sql
----------------+-------------------------------------------
  RANGE default | ALTER RANGE default CONFIGURE ZONE USING
                |     range_min_bytes = 134217728,
                |     range_max_bytes = 536870912,
                |     gc.ttlseconds = 90000,
                |     num_replicas = 3,
                |     constraints = '[]',
                |     lease_preferences = '[]'
(1 row)

Time: 33ms total (execution 33ms / network 0ms)
  • 更新索引的配置
root@hubble01:35432/kld> ALTER index emp_index configure zone using constraints='{"+node=3":1,"+node=4":1,"+node=5":1}',num_replicas = 3;
CONFIGURE ZONE 1

Time: 198ms total (execution 197ms / network 0ms)

configure zone为区域配置,constraints为约束条件,num_replicas为约束配置数量,以上述语句为例子,有3,4,5三个节点

  • 再次查看索引节点配置
root@hubble01:35432/kld> show zone configuration for index emp_index;
              target             |                      raw_config_sql
---------------------------------+------------------------------------------------------------
  INDEX kld.public.emp@emp_index | ALTER INDEX kld.public.emp@emp_index CONFIGURE ZONE USING
                                 |     range_min_bytes = 134217728,
                                 |     range_max_bytes = 536870912,
                                 |     gc.ttlseconds = 90000,
                                 |     num_replicas = 3,
                                 |     constraints = '{+node=3: 1, +node=4: 1, +node=5: 1}',
                                 |     lease_preferences = '[]'
(1 row)

Time: 26ms total (execution 25ms / network 0ms)

此时,我们可以看到索引的复制区域在3,4,5三个节点。

表层级

  • 查看表的区域节点
root@hubble01:35432/kld>  show zone configuration for table dept;
     target     |              raw_config_sql
----------------+-------------------------------------------
  RANGE default | ALTER RANGE default CONFIGURE ZONE USING
                |     range_min_bytes = 134217728,
                |     range_max_bytes = 536870912,
                |     gc.ttlseconds = 90000,
                |     num_replicas = 3,
                |     constraints = '[]',
                |     lease_preferences = '[]'
(1 row)

Time: 96ms total (execution 95ms / network 0ms)
  • 更新表的配置
root@hubble01:35432/kld> ALTER table dept configure zone using constraints='{"+node=3":1,"+node=4":1,"+node=5":1}',num_replicas = 3;
CONFIGURE ZONE 1

Time: 44ms total (execution 44ms / network 0ms)
  • 查看表的配置
root@hubble01:35432/kld> show zone configuration for table dept;
    target   |                      raw_config_sql
-------------+------------------------------------------------------------
  TABLE dept | ALTER TABLE dept CONFIGURE ZONE USING
             |     range_min_bytes = 134217728,
             |     range_max_bytes = 536870912,
             |     gc.ttlseconds = 90000,
             |     num_replicas = 3,
             |     constraints = '{+node=3: 1, +node=4: 1, +node=5: 1}',
             |     lease_preferences = '[]'
(1 row)

Time: 12ms total (execution 12ms / network 0ms)
  • 重置约束
root@hubble01:35432/kld> ALTER TABLE dept CONFIGURE ZONE USING DEFAULT;
CONFIGURE ZONE 1

Time: 138ms total (execution 138ms / network 0ms)

数据库层级

  • 查看数据库配置节点
root@hubble01:35432/test> show zone configuration for database kld;
     target     |              raw_config_sql
----------------+-------------------------------------------
  RANGE default | ALTER RANGE default CONFIGURE ZONE USING
                |     range_min_bytes = 134217728,
                |     range_max_bytes = 536870912,
                |     gc.ttlseconds = 90000,
                |     num_replicas = 3,
                |     constraints = '[]',
                |     lease_preferences = '[]'
(1 row)

Time: 5ms total (execution 5ms / network 0ms)
  • 更改数据库的配置
ALTER database kld configure zone using constraints='{"+node=3":1,"+node=4":1,"+node=5":1}',num_replicas = 3;
  • 查看更改后的配置
root@hubble01:35432/defaultdb> show zone configuration for database kld;
     target    |                      raw_config_sql
---------------+------------------------------------------------------------
  DATABASE kld | ALTER DATABASE kld CONFIGURE ZONE USING
               |     range_min_bytes = 134217728,
               |     range_max_bytes = 536870912,
               |     gc.ttlseconds = 90000,
               |     num_replicas = 3,
               |     constraints = '{+node=3: 1, +node=4: 1, +node=5: 1}',
               |     lease_preferences = '[]'
(1 row)

Time: 4ms total (execution 4ms / network 0ms)

RANGE层级

  • range更改与查看
root@hubble01:35432/kld> SHOW ZONE CONFIGURATION FROM RANGE default;
     target     |              raw_config_sql
----------------+-------------------------------------------
  RANGE default | ALTER RANGE default CONFIGURE ZONE USING
                |     range_min_bytes = 134217728,
                |     range_max_bytes = 536870912,
                |     gc.ttlseconds = 90000,
                |     num_replicas = 3,
                |     constraints = '[]',
                |     lease_preferences = '[]'
(1 row)

Time: 2ms total (execution 2ms / network 0ms)
root@hubble01:35432/kld> ALTER RANGE default CONFIGURE ZONE USING num_replicas = 5, gc.ttlseconds = 100000;
CONFIGURE ZONE 1

Time: 128ms total (execution 128ms / network 0ms)
root@hubble01:35432/kld> SHOW ZONE CONFIGURATION FROM RANGE default;
     target     |              raw_config_sql
----------------+-------------------------------------------
  RANGE default | ALTER RANGE default CONFIGURE ZONE USING
                |     range_min_bytes = 134217728,
                |     range_max_bytes = 536870912,
                |     gc.ttlseconds = 100000,
                |     num_replicas = 5,
                |     constraints = '[]',
                |     lease_preferences = '[]'
(1 row)

Time: 3ms total (execution 2ms / network 0ms)

gc.ttlsecond的值不建议低于600,太低可能会导致查询太慢;也不建议太高,超过90000可能引起服务器性能下降。

  • 说明

租户其实是各个服务中的一些可以访问的资源集合。这些资源集合可供多个用户使用,这也是为什么用户默认的总是绑定到某些租户上;用户通过租户访问计算管理资源,也就是说必须指定一个相应的租户才进行资源的使用。