使用XenServer的SDK实现虚拟机的按需关闭和按需启动
来源:互联网 发布:慕课网 java视频教材 编辑:程序博客网 时间:2024/04/30 18:06
【摘要】问题的提出:根据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 vmname=$(${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 thevmif [ "${state}" ="running" ]; then${XE}vm-shutdown uuid=${vmuuid}${XE}event-wait class=vm power-state=halted uuid=${vmuuid}wasrunning=1fi
需要说明的是,如果使用了HBA卡,那么,通过XenServer的SDK是无法访问HBA卡的相关信息的,只能通过HBA的工具软件获取相关信息。
- 使用XenServer的SDK实现虚拟机的按需关闭和按需启动
- 让XenServer 6.2 虚拟机开机自动启动的方法
- linux vmware虚拟机的命令启动关闭
- CSR1000V在XenServer的安装和简单使用
- Linux下VirtualBox虚拟机的命令行启动/关闭方法和开机自动启动
- Linux下VirtualBox虚拟机的命令行启动/关闭方法和开机自动启动
- Linux下VirtualBox虚拟机的命令行启动/关闭方法和开机自动启动
- 启动界面的实现(SDK)
- Oracle9i 的启动和关闭
- Oracle的启动和关闭
- 漫谈的启动和关闭
- Oracle9i 的启动和关闭
- oracle的启动和关闭
- iptables的启动和关闭
- oracle的启动和关闭
- oracle的启动和关闭
- oracle的启动和关闭
- Oracle的启动和关闭
- Python使用MySQLdb切换数据库
- 段错误bug的调试
- 背包问题代码
- JavaScript实现Java的List功能
- linux信号处理机制(详解)
- 使用XenServer的SDK实现虚拟机的按需关闭和按需启动
- 进程调度的概念
- linux学习之------Linux 文件时间
- 活学或用 index_stats
- 类的设计
- ubuntu下php访问mysql
- php const用法详解
- 今天来开始自己的代码编写之路
- 向oracle中插入date数据类型