OceanBase(2)OceanBase租户创建和管理

tanglu 98 2022-05-19

一、OceanBase租户概念

OceanBase集群搭建完成后通过创建租户的方式来为不同的业务提供服务(租户也可以称为数据库实例)。OceanBase集群能把所有节点的资源集中管理,然后从集群中分配出多个租户,每个租户可以限制其资源使用情况(如 CPU、内存和磁盘空间),资源可以在线动态调整,实现了弹性伸缩。目前 OceanBase 只实现了 CPU 和内存的资源隔离,空间、IOPS 和会话数不起作用。建议创建资源时根据实际情况设置这些参数,尤其是空间资源,不要超出机器磁盘实际可用空间过多,否则将影响后期负载均衡。


二、OceanBase资源占用

OceanBase在进程启动后默认会将系统大部分资源都申请占用(CPU、内存和磁盘)。占用的比例可以通过集群启动的参数进行设置,其中内存和磁盘空间会提前预分配,集群启动相关参数如下

· cpu_count:默认为操作系统 CPU数量 - 2,可自定义

· memory_limit:进程使用的最大内存,默认为8G,0为不限制,该参数与memory_limit_percentage二选一

· memory_limit_percentage:进程使用的最大内存百分比,默认为80,该参数和memory_limit 二选一

· datafile_size:数据文件(block_file)的初始化大小 ,默认为0表示不受限制

· datafile_disk_percentage:数据文件(block_file)初始化大小占数据目录(sstable)所在文件系统可用空间的百分比,默认为75

· clog_disk_usage_limit_percentage:clog文件所在文件系统空间使用率上限百分比,默认95,达到该值集群就会停止写入


三、OceanBase集群资源相关概念

· 资源单元规格:资源单元规格可以理解为一个实例的配置模板,通过 __all_unit_config视图可以查看单元规格

· 资源池:资源池中的资源都是从节点资源中分配而来,资源池一旦创建,集群的可用资源就会被占用。资源池在每个节点里的部分被称为资源单元,每个资源单元的大小通过创建时指定的资源单元规格大小确定。可以为每个zone分配独立资源池,也可以共用同一个资源单元规格

· 租户:租户就是实例,创建租户需关联到上面创建的资源池


四、OceanBase集群资源管理

1、查看集群可用资源

在创建租户时可以先查看资源确保资源充足

mysql -h 172.20.1.212 -u root -P 2881 -p -c -A
use oceanbase
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;


查看资源单元规格

mysql -h 172.20.1.212 -u root -P 2881 -p -c -A
use oceanbase
select * from __all_unit_config;


修改单元规格配置

alter resource unit sys_unit_config min_cpu=5,max_cpu=5,min_memory='1610612736B',max_memory='1610612736B';


ob_resource.png


查看资源分配详情,输出结果中可以看到存在一个叫做sys_pool的资源池,每个资源单元使用了名为sys_unit_config的规格

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;


ob_resource2.png


2、创建资源单元规格

CREATE RESOURCE UNIT unit_name 
MAX_CPU [=] cpu_num,                  #分配的最大CPU数
MAX_MEMORY [=] mem_size,              #分配的最大内存容量,单位为字节 B,最小值为1G
MAX_IOPS [=] iops_num,                #分配的最大 IOPS
MAX_DISK_SIZE [=] disk_size,          #分配的最大磁盘容量,单位为字节,最小值为 512M
MAX_SESSION_NUM [=] session_num,      #分配的最大 Session 数
[MIN_CPU [=] cpu_num,]                #分配的最小 CPU 数
[MIN_MEMORY [=] mem_size,]            #分配的最小内存容量,单位为字节 B,最小值为1G
[MIN_IOPS [=] iops_num] ;             #分配的最小 IOPS

#创建了2个单元规格
CREATE resource unit S1 max_cpu=4, min_cpu=4, max_memory='8G', min_memory='8G', max_iops=10000, min_iops=1000, max_session_num=1000000, max_disk_size='1024G';
CREATE resource unit S2 max_cpu=8, min_cpu=8, max_memory='16G', min_memory='16G', max_iops=20000, min_iops=2000, max_session_num=1000000, max_disk_size='1024G';
select * from __all_unit_config;


ob_resource3.png


3、创建资源池,创建完毕后查看集群资源情况可以看到zone的可用资源被减少了

CREATE RESOURCE POOL poolname            #资源池名称
UNIT [=] unitname,                       #资源规格名称,和上一步的需要关联
UNIT_NUM [=] unitnum,                    #要创建的单个Zone的Unit数,每个单元会自动在每个Zone中负载均衡,但同一个资源池的多个 Unit 不能分配到同一个 Server,即一个资源池包含的 Unit 个数不能超过单 Zone 内 Server 的个数。
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;

#查看集群资源情况
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;


ob_resource4.png


4、创建租户

create tenant obmysql resource_pool_list=('pool_1'), primary_zone='RANDOM',comment 'mysql tenant/instance', charset='utf8'  set ob_tcp_invited_nodes='%';
# resource_pool_list:资源池列表,创建租户时必填项 
# 创建租户时可以使用set命令指定租户的变量值

select * from gv$tenant;


5、连接租户

OceanBase 开源版的租户只兼容 MySQL,因此可以直接使用 MySQL 命令行客户端或者图形化工具进行连接

mysql -h172.20.1.212 -uroot@obmysql#obdemo -P2883 -p  #通过OBProxy连接的方式需要带集群名
mysql -h172.20.1.212 -uroot@obmysql -P2881 -p     #直连OBServer不需要带集群名,初始密码为空

#-u:提供租户的连接账户,格式有两种:用户名@租户名#集群名 或者 集群名:租户名:用户名 。MySQL 租户的管理员用户名默认是 root
#-P:提供 OceanBase 数据库连接端口,也就是 OBProxy 的监听端口,默认是 2883,可以自定义。
#-p:提供账户密码,为了安全可以不提供,改为在后面提示符下输入,密码文本不可见。
#-c:表示在 MySQL 运行环境中不要忽略注释。
#-A:表示在 MySQL 连接数据库时不自动获取统计信息。
#oceanbase:访问的数据库名,可以改为业务数据库。


版权声明
本站所有文章均为原创,转载请注明出处!小站维护不易,如果对您有所帮助,希望能点击一下站内广告,谢谢!
上一篇:【系统运维】文本处理工具awk命令使用教程
下一篇:OceanBase(3)OBProxy部署与使用
相关文章

 发表评论

暂时没有评论,来抢沙发吧~

微信二维码