一、 先导知识:
资源隔离是保证用户间相互不受影响的重要手段。数据库的资源隔离主要有以下方式:
l 服务器隔离
l 数据库隔离:sqlserver、oceanbase、oracle 12c、informix、TDSQL
l Schema隔离:oracle(before 12c)、mysql、DB2
OceanBase的资源隔离
在OceanBase集群中,每当有业务需要使用数据库时,在该集群上为其创建一个租户。通过租户实现资源隔离,采用“单实例多租户”的管理模式。每个用户在OceanBase上都有对应的租户信息,一个租户相当于MYSQL上的一个实例,根据用户的需求,用户对应的租户绑定指定规格的资源,包括CPU核数、内存、存储空间等。
OceanBase上有系统租户和用户租户都有root权限账号
l 系统租户存放OceanBase数据库管理的各种内部元数据信息
l 用户租户下存放用户的各种数据和数据库元信息
二、 如何创建租户
创建租户流程步骤:
CREATE RESOURCE UNIT unitname
MAX_CPU [=] cpunum,
MAX_MEMORY [=] memsize,
MAX_IOPS [=] iopsnum,
MAX_DISK_SIZE [=] disksize,
MAX_SESSION_NUM [=] sessionnum,
[MIN_CPU [=] cpunum,]
[MIN_MEMORY [=] memsize,]
[MIN_IOPS [=] iopsnum] ;
创建资源单元配置时, MAX_CPU、MAX_MEMORY、MAX_IOPS、MAX_DISK_SIZE、MAX_SESSION_NUM必须指定。MIN_CPU、 MIN_MEMORY、MIN_IOPS可选,默认值和MAX_CPU、MAX_MEMORY、 MAX_IOPS 保持一致。
参数
取值范围
单位
备注
MAX_MEMORY
[1073741824, +∞)
字节
最小值为1G,写成带单位的形式,如‘1G’,‘100M’等
MAX_IOPS
[128,+∞)
MAX_DISK_SIZE
[536870912,+∞]
字节
最小值为512M,写成带单位的形式,如‘1G’,‘100M’等
MAX_SESSION_NUM
[64,+∞)
CREATE RESOURCE POOL poolname
UNIT [=] unitname,
UNIT_NUM [=] unitnum,
ZONE_LIST [=] ('zone' [, 'zone' …]);
资源池中包含 N 个资源单元,同时必须指定所属的 ZONE LIST(集群)。若需要包含N个资源单元,需多次使用create添加相应的资源池。在用户手册中,资源池是存在修改的命令的方式,但经过真实测试,在1.X的版本中无法对资源池进行修改。若需要修改,那是一个比较繁琐的流程。
CREATE TENANT [IF NOT EXISTS] tenantname
[tenant_characteristic_list]
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 [=] zonelist
|DEFAULT TABLEGROUP [=] {NULL | tablegroup}
|RESOURCE_POOL_LIST [=](poolname [, poolname…])
|LOCALITY [=] locality;
如果要创建的租户名已存在,并且没有指定 IF NOT EXISTS,则会出现错误租户名的合法性和变量名一致,最长 64 个字节,只能有大小写英文字母,数字和下划线,而且必须以字母或下划线开头,并且不能是 OceanBase 的关键字。只有用 root 用户连接到系统租户才能执行 CREATE TENANT 去创建租户。
三、 小结:
OceanBase是阿里在Paas数据库云上的解决方案。它的优点在于可以根据租户的资源使用情况,进行调配(可看下图),但生产系统上严禁出现超卖的情况。若发生超卖的情况,在某一个副本故障时其他两个副本有可能无法接管业务。系统租户用户无法查询到其他租户的信息,这方面的安全性比oracle12c做得更好,个人觉得更适合在公有云上大展手脚。
代表一个租户
手机扫一扫
移动阅读更方便
你可能感兴趣的文章