暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

创建租户时资源分配数含义

张鹏 2024-06-19
90

创建租户时资源分配数含义
1.min_cpu、 max_cpu 在租户分配资源的时候按max_cpu,但在计算剩余资源时按min_cpu,因此在分配资源时,会出现某个zone无法承载分配的资源,而实际资源是有的情况。因此在,创建resource pool的时候,min_cpu,max_cpu需要设置一致。

cd /home/admin/oceanbase && /home/admin/oceanbase/bin/observer -i ens33 -P 2882 -p 2881 -z zone1 -d /home/admin/oceanbase/store/obdemo -r ‘10.10.122.75:2882:2881’ -c 10001 -n obdemo -o “memory_limit=40G,cache_wash_threshold=1G,__min_full_resource_pool_memory=268435456,system_memory=8G,memory_chunk_cache_size=128M,cpu_count=32,net_thread_count=4,datafile_size=100G,stack_size=1536K,config_additional_dir=/obdata/1/obdemo/etc3;/obdata/log1/obdemo/etc2”

select cpu_capacity,cpu_max_assigned,cpu_total,cpu_assigned,svr_ip from __all_virtual_server_stat;

实际物理核是8 cpu
OB认为分配了32 cpu 2个cpu默认系统使用

CPU资源:包括两个配置,MIN_CPU和MAX_CPU,之所以会区分MIN和MAX规格,是为了支持CPU资源超卖,用户通过配置resource_hard_limit来配置CPU超卖百分比。他们的含义如下:
MIN_CPU:表示为租户分配的最小的CPU规格,observer上,所有租户的MIN_CPU的总和不能超过CPU总容量CPU_CAPACITY
MAX_CPU:表示为租户分配的最大的CPU规格,observer上,所有租户的MAX_CPU的总和不能超过CPU总容量的超卖值:CPU_CAPACITY * resource_hard_limit
所以resource_hard_limit是配合租户分配内存来看的,只能说负载足够高的话,最大cpu使用率相对于你的CPU_CAPACITY可以达到120%

CPU 和内存的超卖
如果一个 OBServer 上放置的所有 Unit 的 MAX_CPU 的值加起来超过这个 OBServer 的可用 CPU 总数,则表示该 OBServer 上的 CPU 是超卖的。
同理,如果所有 Unit 的 MAX_MEMORY 加起来超过该 OBServer 上可以分配的 Memory,则表示该 OBServer 上的 Memory 是超卖的。
OBServer 资源超卖的比例受配置项 resource_hard_limit 的控制,假设 resource_hard_limit=200,那就意味着可以超卖成 2 倍,即 16 个 CPU 可以超卖成 32 个,16G 的内存可以超卖成 32G。
超卖是通过牺牲稳定性来获取更高的资源利用率的方案,是否要开启超卖需要根据应用特性和应用的 SLA 要求仔细评估。例如,一个比较适合的场景就是业务的研发测试环境。

GV$OB_SERVERS V4.0

CPU_CAPACITY bigint(20) NO 节点 CPU 总容量
CPU_CAPACITY_MAX double NO 节点 CPU 总容量的超卖值。它由 resource_hard_limit 配置项控制: CPU_CAPACITY_MAX = CPU_CAPACITY * resource_hard_limit
CPU_ASSIGNED double NO OBServer 节点已经分配的 CPU 数量,它是 OBServer 节点上所有 Unit 的 MIN_CPU 规格总和。有如下约束:CPU_ASSIGNED <= CPU_CAPACITY
CPU_ASSIGNED_MAX double NO OBServer 节点已经分配的 CPU 上界值,它是 OBServer 节点上所有 Unit 的 MAX_CPU 规格总和。有如下约束:CPU_ASSIGNED_MAX <= CPU_CAPACITY_MAX
MEM_CAPACITY bigint(20) NO observer 进程可用的内存大小
MEM_ASSIGNED bigint(20) NO OBServer 节点已分配的内存大小,它是 OBServer 节点上所有 Unit 的 MEMORY_SIZE 规格总和。有如下约束:MEM_ASSIGNED <= MEM_CAPACITY

剩余min_cpu=cpu_capacity-cpu_assisgned
剩余max_cpu=cpu_capacity * resource_hard_limit - cpu_max_assigned

cpu_capacity* resource_hard_limit=cpu_total
#cpu_count 是observer启动时的配置值
cpu_count=cpu_capacity+cpu_reserved

操作方案
8C/16G 的 MetaDB 容器,超卖开 200(即设置 resource_hard_limit=200),安装的时候会从中自动扣掉 2C/3G 给操作系统使用,所以建出来以后有 12C/16G 可以给 sys 租户和普通租户使用。
即:
那么,这个 12C/16G 是如何计算出来的?
计算方法如下:
cpu_reserved=2:2 个 CPU 是留给 OS 和非 observer 的其它进程使用的。
memory_limit=13G:16G-3G,这 3G 是保留给操作系统使用的。
system_memory=5G
所以 __all_virtual_server_stat 表中的 cpu_total=(8C-2C)*2=12C。
所以 __all_virtual_server_stat 表中的 mem_total_in_GB=(13G-5G)*2=16G。
在部署 MetaDB 集群时,
自动创建的 sys 租户的规格:2C/2G~4C/2.4G。
ocp_meta 租户的规格:2C/3G。
如果 ocp_meta 只给 2G 的话,OCP 上就没法上传安装 OceanBase 的 oceanbase-xxx.rpm 软件包,所以至少得给 3G。
ocp_monitor 租户的规格:2C/2G。 实际测试单节点的小规格 MetaDB 时,按照上面的配置部署好 OCP 以后,就无法再创建一个 odc_meta 租户(比如 2C/2G)了,这是因为:
min_memory 上限不带超卖的,即:
所有租户的 max memory <= server memory limit * 超卖倍数
所有租户的 min memory <= server memory limit
这边的 server memory limit = memory_limit 参数值 - system_memory 参数值
min_cpu 的上限也不带超卖的,即:
所有租户的 max cpu <= server cpu limit * 超卖倍数
所有租户的 min cpu <= server cpu limit
这边的 server cpu limit = cpu_count 参数值 - cpu_reserved 参数值

相关查询语句

– 查询租户的资源池、资源单元配置名称、资源单元配置
SELECT c.tenant_id, e.tenant_name, concat(c.name, ': ', d.name) pool:conf,
concat(c.unit_count, ’ unit: ', d.min_cpu, ‘C/’, ROUND(d.min_memory/1024/1024/1024,0), “G”) unit_info
FROM __all_resource_pool c, __all_unit_config d, __all_tenant e
WHERE c.unit_config_id=d.unit_config_id AND c.tenant_id=e.tenant_id AND c.tenant_id>1000
ORDER BY c.tenant_id;

– 检查租户已使用的存储
SELECT e.tenant_name,a.svr_ip,round(sum(a.required_size)/1024/1024/1024,0) required_GB,sum(row_count) AS rows
FROM __all_virtual_meta_table a
INNER JOIN __all_virtual_table b ON a.table_id=b.table_id
INNER JOIN __all_virtual_database c ON b.database_id=c.database_id
INNER JOIN __all_tenant e ON b.tenant_id=e.tenant_id
GROUP BY a.tenant_id,a.svr_ip
ORDER BY a.tenant_id,a.svr_ip;

– 检查租户的 Partition 总数
SELECT zone,svr_ip,tenant_name,count(1) cnt
FROM __all_virtual_meta_table a , __all_tenant b
WHERE a.tenant_id=b.tenant_id
GROUP BY zone,svr_ip,tenant_name ORDER BY zone,svr_ip,tenant_name desc;

– 磁盘空间实时统计
SELECT /+READ_CONSISTENCY(WEAK), QUERY_TIMEOUT(100000000)/
b.zone,a.svr_ip,
round(total_size/1024/1024/1024, 2) total_G,
round((total_size - free_size) /1024/1024/1024, 2) used_G,
round(free_size/1024/1024/1024, 2) free_G,
concat(round((total_size - free_size) / total_size * 100, 2), ‘%’) used_percent
FROM __all_virtual_disk_stat a, __all_server b
WHERE a.svr_ip = b.svr_ip ORDER BY b.zone,svr_ip;

– 所有可用的 CPU 和 Memory 情况
SELECT b.zone,a.svr_ip, a.cpu_total, a.cpu_assigned, a.cpu_assigned_percent, a.mem_total/1024/1024/1024 AS mem_total,
a.mem_assigned/1024/1024/1024 AS mem_assigned, (a.mem_total-a.mem_assigned)/1024/1024/1024 AS mem_free, a.mem_assigned_percent
From __all_virtual_server_stat a,__all_server b WHERE a.svr_ip = b.svr_ip ORDER BY zone,cpu_assigned_percent desc;

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论