分享

openstack资源统计实现

xioaxu790 发表于 2014-8-8 20:53:18 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 0 12287
问题导读
1、openstack的宿主机有哪些资源?
2、在openstack中,对虚拟机的管理分哪几层?





本文将介绍openstack版本中nova是如何统计宿主机可用资源的,以便debug和运维openstack。
在openstack中,对虚拟机的管理有两层:openstack自身和Hypervisor(libvirt)。由于不同的层次可能导致数据不统一,比如vm在libvirt中,但是不在openstack中,或者相反。这时的资源统计要如何处理?openstack的做法是两者都统计,但是真正列入考虑范围(写入数据库)的是openstack自身统计出的结果。接下来将详细介绍openstack是如何进行资源统计的。

openstack关注宿主机的如下资源:
vcpus
vcpus_used
memory_mb
memory_mb_used
local_gb
local_gb_used
cpu_info
disk_available_least
free_ram_mb
free_disk_gb

这些数据在periodic task中会定时更新到数据库中,默认是60s一次。接下来详细说明这些的数据是如何获取的


核心的代码在nova/virt/libvirt/driver.py:LibvirtDriver.get_available_resource()中,有兴趣的同学可以自己看代码,
这里只列出各个资源是如何统计的。
vcpus: 通过libvirt的nodeinfo直接获取
vcpus_used: 通过libvirt列出所有的vm,然后遍历叠加所有vm的vcpus
memory_mb: 通过libvirt nodeinfo直接获取
memory_mb_used: 计算/proc/meminfo中的信息,计算出可用的(MemFree + Buffers + cached),然后用上面的memory_mb - 可用,剩下的就是used
local_gb: 通过python的os.statvfg接口查看instance目录的大小
local_gb_used: 和local_gb一样
cpu_info: 从libvirt中获取
disk_available_least: 它和local_gb的区别是local_gb是镜像的实际大小,此项是计算了虚拟大小之后的剩余量。所以一定小于(local_gb - local_gb_used)。
free_ram_mb: memory_mb - memory_mb_used
free_disk_gb: local_gb - local_gb_used


但是,但是! 在nova不是简单的把这些数据放到数据库中,而是另外计算了一遍vcpus, memory和local_gb。
在第一次获取上面的基本数据之后,nova会从数据库中拿到所有理论上在此宿主机上的instance,然后基于instance重新计算这些资源使用情况。

1. 首先,重设vcpu, memory, local_gb的使用情况。
  1. vcpus_used = 0  
  2. memory_mb_used = CONF.reserved_host_memory_mb  
  3. local_gb_used = CONF.reserved_host_disk_mb / 1024  
  4. free_ram_mb = memory_mb - memory_mb_used  
  5. free_disk_gb = local_gb - local_gb_used
复制代码


2. 然后,找出所有没有删除的instance,
根据每一个instance的详细信息计算vcpus_used,local_gb_used, memory_mb_used,之后再算出free_ram_mb, free_disk_gb

所以在日志中,可以发现有两中汇报资源的格式:
格式1.
  1. 2013-07-29 17:03:25.486 DEBUG nova.compute.resource_tracker [-] Hypervisor: free ram (MB): 10253 from (pid=17247) _report_hypervisor_resource_view /opt/stack/nova/nova/compute/resource_tracker.py:331  
  2. 2013-07-29 17:03:25.487 DEBUG nova.compute.resource_tracker [-] Hypervisor: free disk (GB): 13 from (pid=17247) _report_hypervisor_resource_view /opt/stack/nova/nova/compute/resource_tracker.py:332  
  3. 2013-07-29 17:03:25.487 DEBUG nova.compute.resource_tracker [-] Hypervisor: free VCPUs: 4 from (pid=17247) _report_hypervisor_resource_view /opt/stack/nova/nova/compute/resource_tracker.py:337  
复制代码


格式2.
  1. 2013-07-29 17:03:25.556 AUDIT nova.compute.resource_tracker [-] Free ram (MB): 10482  
  2. 2013-07-29 17:03:25.557 AUDIT nova.compute.resource_tracker [-] Free disk (GB): 17  
  3. 2013-07-29 17:03:25.557 AUDIT nova.compute.resource_tracker [-] Free VCPUS: 2
复制代码


格式1中的数据就是直接从libvirt中的资源情况,格式2中的数据是openstack中的资源情况。








本文转自:http://blog.csdn.net/gtt116/article/details/9618403

没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条