

上一期简单部署了OB社区版集群,有一些计划不合理的地方,因此花了点时间重新捯饬了一下,新的数据库环境如下: 数据库名称:yhw_cluster

今年去尝试过一次OBCP,考的太细了,毕竟没有实地摸索过OceanBase,没有过,这一次就通过这套集群来摸索一下。
通过OBProxy访问集群:
obclient -h10.10.10.202 -P2883 -uroot@sys -p'OceanBase#!123' -Doceanbase -A


可用区是一个逻辑概念,每个可用区由若干个服务器一起来承载一个完整的数据副本。 在我部署的集群中,存在两个可用区:zone1和zone2,每个可用区分别有两台OBServer服务器。
SELECT SVR_IP, ZONE, TENANT_ID, UNIT_ID, MIN_CPU, MAX_CPU, ROUND(MEMORY_SIZE/1024/1024/1024,1) AS MEMORY_SIZE_GB,
MIN_IOPS, MAX_IOPS,IOPS_WEIGHT, ROUND(LOG_DISK_SIZE/1024/1024/1024,1) AS LOG_SIZE_GB,
ROUND(LOG_DISK_IN_USE/1024/1024/1024,1) AS LOG_USED_GB, ROUND(DATA_DISK_IN_USE/1024/1024/1024,1) AS DATA_USED_GB
FROM GV$OB_UNITS ;

OceanBase数据库采用了单集群多租户(tenant)设计,通过租户实现资源隔离,让每个数据库服务的实例不感知其他实例的存在,并通过权限控制确保租户数据的安全性,天然支持云数据库架构,支持公有云、私有云、混合云等多种部署形式。


OceanBase 数据库是多租户的数据库系统,一个集群内可包含多个相互独立的租户,每个租户提供独立的数据库服务。在 OceanBase 数据库中,使用资源配置(Unit Config)、资源池(Resource Pool)和资源单元(Unit)三个概念,对各租户的可用资源进行管理。

CREATERESOURCE UNIT [IFNOTEXISTS] unit_name
MEMORY_SIZE [=] 'size_value',
[MIN_CPU [=] cpu_num,]
MAX_CPU [=] cpu_num,
[MIN_IOPS [=] iops_num,]
[MAX_IOPS [=] iops_num,]
[IOPS_WEIGHT [=]iopsweight,]
[LOG_DISK_SIZE [=] 'size_value'];
必选参数
可选参数
CREATERESOURCE POOL pool_name
UNIT [=] unit_name,
UNIT_NUM [=] unit_num,
ZONE_LIST [=] ('zone_name' [, 'zone_name' ...]);
参数说明
CREATE TENANT { {[IFNOTEXISTS] tenant_name
[tenant_option] [set_sys_var]} };
tenant_option:
| LOCALITY = locality_description
| PRIMARY_ZONE= primary_zone_list
| RESOURCE_POOL_LIST [=] (pool_name [, pool_name...])
| {CHARACTER SET | CHARSET} [=] charset_name
| COLLATE [=] collation_name
set_sys_var:
SET var_name = var_value [,var_name =var_value...]
参数说明 tenant_option
set_sys_var:创建租户的同时设置租户级的全局变量。
obclient -h10.10.10.203 -P2881 -uroot@sys -p'OceanBase#!123' -Doceanbase -A

租户规格为unit最大CPU为1,内存2G。resource pool指定每个zone运行1个unit。主要zone为zone1。
CREATERESOURCE UNIT unit1 MAX_CPU 1,
MEMORY_SIZE '2G';
CREATERESOURCE POOL pool1 UNIT 'unit1',
UNIT_NUM 1,
ZONE_LIST ('zone1','zone2');
CREATE TENANT test01
PRIMARY_ZONE='zone1',
RESOURCE_POOL_LIST=('pool1');


租户规格为unit最大CPU为2,内存2G。resource pool指定每个zone运行2个unit。主要zone为zone2。
CREATERESOURCE UNIT unit2 MAX_CPU 2,
MEMORY_SIZE '2G';
CREATERESOURCE POOL pool2 UNIT 'unit2',
UNIT_NUM 2,
ZONE_LIST ('zone1','zone2');
CREATE TENANT test02
PRIMARY_ZONE='zone2',
RESOURCE_POOL_LIST=('pool2');


可以通过SQL查看租户资源分配情况与租户运行节点:
SELECT T1.ZONE, T1.SVR_IP, T1.UNIT_ID, T2.NAME AS RESOURCE_POOL_NAME, T3.TENANT_NAME, T1.STATUS, T2.REPLICA_TYPE, T1.MIN_CPU, T1.MAX_CPU, ROUND(T1.MEMORY_SIZE/1024/1024/1024,1) AS MEMORY_SIZE_GB, ROUND(T1.LOG_DISK_SIZE/1024/1024/1024,1) AS LOG_DISK_GB, T1.MAX_IOPS, T1.MIN_IOPS, T1.IOPS_WEIGHT FROM DBA_OB_UNITS T1, DBA_OB_RESOURCE_POOLS T2, DBA_OB_TENANTS T3 WHERE T1.RESOURCE_POOL_ID = T2.RESOURCE_POOL_ID AND T2.TENANT_ID = T3.TENANT_ID;

这里可以看到test01运行在10.10.10.204和10.10.10.206上;test02运行在10.10.10.203,10.10.10.204,10.10.10.205,10.10.10.206上。
在访问租户前需要在管理界面将白名单放开:

根据上一小节查出的内容可以到租户运行对应节点IP访问租户数据库:
obclient -h10.10.10.204 -P2881 -uroot@test01 -p'OceanBase#!123'
obclient -h10.10.10.203 -P2881 -uroot@test02 -p'OceanBase#!123'


也可以通过OBProxy访问租户数据库:
obclient -h10.10.10.202 -P2883 -uroot@test01 -p'OceanBase#!123'
obclient -h10.10.10.202 -P2883 -uroot@test02 -p'OceanBase#!123'

本期通过本地部署的OB,对OB的可用区与租户做了个简单了解与实操。 第一篇OB总结,有点乱,后面慢慢来。 老规矩,知道写了些啥。