使用XenServer的SDK实现虚拟机的按需关闭和按需启动

本文是原创,作者的微信公众号为:Moehoo猛虎


【摘要】问题的提出:根据XenServe服务器中虚拟机的性能情况,实时且自动地做出启动新虚拟机、关闭已启动虚拟机的动作。本文简要叙述了基本思路和方法,在具体进行开发时,需要参考《XenServer 软件开发工具包指南》,其中含有:如何编写与XenServer 主机交互的应用程序的精选代码示例。                                                                                

【目标简述】

根据XenServe服务器中虚拟机的性能情况,实时且自动地做出启动新虚拟机、关闭已启动虚拟机的动作。

 
甲、XenServer SDK环境的搭建

 (1)XenServer 6.0 SDK的下载网址

 http://community.citrix.com/display/xs/Download+SDKs

  注:下载时,找到如下部分:

 XenServer SDK VM
点击“Download  SDK”下载,这是一个完整的基于Linux的开发环境。

 (2)服务器配置建议

 Ⅰ)先在一台服务器上搭建开发环境,建议配置如下:

        CPU:酷睿i5以上(支持Intel VT 和AMD-V)

        内存:16GB

        硬盘:500GB×2

        网卡:4块千兆以太网卡

 Ⅱ)完成初步目标后,再搭建一台服务器,在XenServer的HA(高可用性)和Failover(故障转移)环境中进行进一步调整。

  

乙、基本思路

 (1)在XenServer上创建Daemon:XS_InfoGet

 XS-InfoGet用于:使用 HTTP 与 XenServer 交互以获取 XenServer性能统计信息并进行传递。

 XenServer的各项目统计信息(包括XenServer和各个虚拟机的相关数据)均存储在RRD(Round Robin Databases,循环数据库)中,可使用HTTP从XenServer中获取这些数据,然后将数据传递给后台的监控Daemon。

 具体说明可见附件的相关说明部分。

 参考资料一   Using XenServer RRDs:                                                                                            
                        http://community.citrix.com/display/xs/Using+XenServer+RRDs

参考资料二   Getting the Last RRD Datapoints:                                                                                            
                       http://community.citrix.com/display/xs/Getting+the+Last+RRD+Datapoints

参考资料三   一个完整的Python脚本:                                                                                            
                       http://community.citrix.com/display/xs/RRD+Example+Script

  (2)在XenServer上创建Daemon:XS_CoreDecision

     用C在XenServer上编写Daemon:XS_CoreDecision,运行在XenServer后台上,实时地接收来自XS_InfoGet的数据,并且,做出性能分析和相应动作:

        Ⅰ)一旦一些数据(如内存占用率)超过阈值,即将参数(比如,需要启动的虚拟机名称等)传递给相关函数,启动新的虚拟机;

        Ⅱ)一旦某些数据低于阈值,即将参数(比如,需要关闭的虚拟机名称等)传递给相关函数,关闭现有的某些虚拟机;

 

        比如,启动虚拟机:

static int start_vm(xen_session *session,xen_vm vm)
{
    printf("Startingnew Virtual Machine now...\n");
    xen_vm_start(session,vm, false, false);
   print_vm_power_state(session, vm);
    return 0;
}
        
        关闭虚拟机:

static int shut_vm(xen_session *session,xen_vm vm)
{
    printf("Shuttingdown Virtual Machine now...\n");
   xen_vm_hard_shutdown(session, vm,false,false);
   print_vm_power_state(session, vm);
    return 0;
}

        同样地,也可以执行克隆虚拟机、挂起虚拟机和恢复虚拟机等操作。

  

        Ⅲ)也可以由此Daemon(XS_CoreDecision)去启动一个bash脚本(先要将虚拟机的UUID传递给此脚本),用脚本去控制虚拟机的启动和关闭。

               比如,关闭一个虚拟机:

# Get name and state of the vm
name=$(${XE} vm-list uuid=${vmuuid}params=name-label --minimal)
state=$(${XE} vm-list uuid=${vmuuid}params=power-state --minimal)
wasrunning=0
 
# If the VM state is running, shutdown thevm
if [ "${state}" ="running" ]; then
${XE}vm-shutdown uuid=${vmuuid}
${XE}event-wait class=vm power-state=halted uuid=${vmuuid}
wasrunning=1
fi


需要说明的是,如果使用了HBA卡,那么,通过XenServer的SDK是无法访问HBA卡的相关信息的,只能通过HBA的工具软件获取相关信息。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值