分类: [CloudStack]

CloudStack DB表结构

CloudStack 有3个DB,分别为:cloud、cloud_usage、cloudbridge。 其中 cloudstack 表为CloudStack的主数据库,存放CloudStack 运行相关所有数据,其中共有265个表。 cloudstack 中的表分为以下几类: 实体(对应CS中的物理资源和虚拟资源)此类数据永不删除db,删除时只将表中removed项设置为当前时间戳; Details(属性),以key-value格式存储实体的属性信息; Ref(实体和实体之间的关系),随业务逻辑添加或删除; Op(操作记录等)完成即删除; View(Mysql视图),暴露给统计等业务使用,存放使用量或当前运行量等信息。 下 ......

CloudStack Host 状态机 (4)

书接上文:CloudStack Host 状态机 (3) 状态机初始状态为null或Creating,没有任何Event可以把状态修改回初始状态。 最终状态为Removed,此时该状态不接受任何Event。 异常状态为Alert,Error。 中间状态为Up,Down ,Connecting, Disconnected, Rebalancing。 null只能接受AgentConnected,Error只能接受AgentConnected。   [codesyntax lang=”java”] s_fsm.addTransition(null, Event.AgentConnected, Status.Connecting); s_fsm.addTransition(Status.Creating, Event.AgentConnected, Status.Connecting); [/c ......

CloudStack Host 状态机 (3)

书接上文:CloudStack Host 状态机 (2) 前两篇文章中,分别介绍了Host Status的定义和Event 的定义,状态机的定义为: fromStatus -> 接收Event -> nextStatus。 host接到update命令的时候,获取当前状态(fromStatus)和事件(Event),通过状态机(statusMachine)的定义,获取到下一个状态(nextStatus),并更新到DB 中。 接下来看代码中状态机的定义,还是Status.java 文件: [codesyntax lang=”java”] public enum Status { ...... public Status getNextStatus(Event e) throws NoTransitionException ......

CloudStack Host 状态机 (2)

书接上文:CloudStack Host 状态机 (1) Status.java 中,定义了触发 host 状态机改变的一系列Event,如下代码所示: [codesyntax lang=”java”] public enum Event { AgentConnected(false, "Agent connected"), PingTimeout(false, "Agent is behind on ping"), ShutdownRequested(false, "Shutdown requested by the agent"), AgentDisconnected(false, "Agent disconnected"), HostDown(false, "Host is found to be down by the investigator"), Ping(false ......

CloudStack Host 状态机 (1)

Cloudstack 对Host定义了一组状态机,对于Host所有状态的操作,定义了当前状态、事件、下一步状态。 Host 状态定义在 Status.java 中: [codesyntax lang=”java”] public enum Status { Creating(true, false, false), Connecting(true, false, false), Up(true, false, false), Down(true, true, true), Disconnected(true, true, true), Alert(true, true, true), Removed(true, false, true), Error(true, false, true), Rebalancing(true, false, true); pri ......

CloudStack 解析 XenServer RRD (2)

书接上文:CloudStack 解析 XenServer RRD (1) 了解了XenServer RRD格式之后,现在看一下CloudStack中是怎么解析RRD的。 在之前的文章CloudStack VM运行状态的监控-Hypervisor 中介绍过,在CitrixResourceBase.java中,GetVmStatsCommand的处理过程,是通过解析RRD来实现VM运行时状态抓取的。 首先,看一下RRD Data的获取: [codesyntax lang=”java”] protected Document getStatsRawXML(Connection conn, boolean host) { Date currentDate = new Date(); String urlStr = "http://" + _host.i ......

CloudStack 解析 XenServer RRD (1)

XenServer有一个RRD的database,用于存储XenServer实时状态信息,并进行归集。 RRD(Round Robin Database)使用固定的存储空间来存储数据,总有一个指针指向最新数据,历史数据则按规则进行合并。 用在监控场景中,则保持最近N份记录为精确值,之前的记录按照间隔时间进行归并保存,并损失精度。 例:系统监控以15s间隔向RRD中写入数据,在当前15分钟内数据为准确值,15分钟~1小时内,归并后时间间隔为1分钟,则无法查询历史精确值,只能得到一段时间内的平均值。1~24小时内时间间隔为10分钟,则看到的数据为二次归并后的10分钟维 ......

CloudStack Host运行状态监控 – Hyperviser

书接上文:CloudStack Host运行状态监控 – Management 继续分析Hyperviser端对于Host监控的实现。Hyperviser端接受到命令GetHostStatsCommand,会有相应逻辑对其进行处理,获取Host当前状态并返回。 XenServer CitrixResourceBase.java [codesyntax lang=”java”] protected GetHostStatsAnswer execute(GetHostStatsCommand cmd) { ...... HostStatsEntry hostStats = getHostStats(conn, cmd, cmd.getHostGuid(), cmd.getHostId()); return new GetHostStatsAnswer(cmd, host ......

CloudStack Host运行状态监控 – Management

CloudStack中,Host的实时状态监控和VM基本类似。 信息获取原理 Management-Server在启动的时候,会初始化1个线程,用于定期获取定期获取运行时数据。 对于3个主流Hyperviser:KVM、XenServer、VMware,分别调用Libvirt API、 XenServer RRD API和 VMware API来获取当前运行时状态。 定期获取状态之后,会上报到该线程,作为当前的使用量。 所以,CloudStack对于Host状态的监控,是当前时间瞬时数据。 代码解析 StatsCollector.java [codesyntax lang=”java”] public boolean start() { init(_configDao. ......

CloudStack VM运行状态的监控-Hypervisor

接上篇:CloudStack VM运行状态的监控-Management 本文继续讲解Hyperviser端的处理逻辑. XenServer XenServer的处理逻辑在CitrixResourceBase.java 中,该类封装了几乎全部的XenServer操作,主要调用XenServer  API 和 XenServer RRD API来完成。 [codesyntax lang=”java”] @Override public Answer executeRequest(Command cmd) { Class<? extends Command> clazz = cmd.getClass(); if (clazz == CreateCommand.class) { ...... } else if (clazz == GetVmStats ......
贴入百度统计、CNZZ、51啦、量子统计代码等等