OceanBase(4)OceanBase日常运维
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';
查看资源分配详情,输出结果中可以看到存在一个叫做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;
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;
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;
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:访问的数据库名,可以改为业务数据库。
发表评论
暂时没有评论,来抢沙发吧~