修改 OpenNebula 虚拟机实例的内存大小
2012年05月25日 | 标签: kvm, opennebula, virsh | 作者:vpsee
OpenNebula 创建虚拟机(实例)以后将不能直接更改虚拟机的配置参数,如 CPU、内存等。如果创建虚拟机以后发现内存给的太大,想改小怎么办呢?如何给 OpenNebula 上的虚拟机修改内存呢?(注:OpenNebula 没有直接操作的命令,需要到节点上用 virsh setmem 动态修改。)让人不可思议的是,OpenNebula 推荐的方法是删除原有虚拟机以后重新创建一个配置合适的虚拟机,一些云计算平台认为虚拟机(计算资源)应该像自来水一样打开就用,不用就关闭。个人觉得云计算应该至少能随时改变计算资源(配置),而不是删除+创建。
比如下面这个 id 为28的虚拟机实例用了 2GB 内存,想修改到 1GB:
# onevm list ID USER GROUP NAME STAT CPU MEM HOSTNAME TIME ... 14 root oneadmin queue runn 3 1G cloud06 40 20:38:50 18 root oneadmin grid03 runn 144 24G cloud18 39 00:47:01 19 root oneadmin grid02 runn 143 32G cloud21 39 00:26:26 28 root oneadmin monitor runn 9 2G cloud03 05 22:04:14 ...
首先找到这个28号虚拟机实例所在的 OpenNebula 计算节点(node),从上面的 HOSTNAME 看出 monitor 运行在 cloud03 这个节点上,我们 ssh 到这个节点操作发现这台 OpenNebula ID 为28的虚拟机实例在这个节点上名字为 one-28:
# ssh root@cloud03 # virsh list Id Name State ---------------------------------- 39 one-20 running 42 one-25 running 45 one-28 running
可以动态修改 one-28 的内存参数为 1GB,但是这种办法重启后就会丢失配置重回到 2GB:
# virsh setmem one-28 1048576
所以最好关闭 one-28 后再修改 one-28 配置文件,改动 memory 部分为 1048576(1GB),修改完毕后启动虚拟机:
# virsh shutdown one-28 # virsh edit one-28 ...1048576 ... # virsh start one-28
修改完后 onevm list 会发现 one-28 内存大小依然是 2GB,没有变,这是因为这部分纪录在 OpenNebula 的数据库里,需要修改数据库,先 select 一下发现 OpenNebula 把 VM 的 XML 配置文件写在数据库里,这容易办,用 SQL 语句的 update 操作更新一下数据库:
# sqlite3 /var/lib/one/one.db sqlite> select * from vm_pool where oid='28'; 28|monitor|...2097152 ...|0|0|1337014904|3|3|1|0|0 sqlite> update vm_pool set body="...1048576 ..." where oid="28";
然后 onevm list 就会得到正确的、修改过内存的虚拟机实例了:
# onevm list ID USER GROUP NAME STAT CPU MEM HOSTNAME TIME ... 14 root oneadmin queue runn 3 1G cloud06 40 23:44:51 18 root oneadmin grid03 runn 144 24G cloud18 39 03:47:01 19 root oneadmin grid02 runn 143 32G cloud21 39 03:32:27 28 root oneadmin monitor runn 9 1024M cloud03 05 01:10:15 ...
这个很不人性化,openNebula 相对openstack cloudstack 还有很长的路要走啊。
你的博客是用wordpress做的么?配色方案很清爽,非常喜欢,不知能否共享。
呵呵,过来观摩学习一下~
请教下opennebula和openstack在应用上有什么区别,分别是负责什么功能的?他们是同一种应用的不同产品吗 谢谢
您好,xen虚拟环境下使用OpenNebula创建虚机,linux镜像根据官方说明,disk.0设备应该使用xvd开头的,但是使用xvd开头在节点上启动虚机,过一会就自动shutdown了,修改为hd开头就没有问题了。 为什么呢?
disk = [
‘tap:aio:/one_images/88/images/disk.0,hda,w’,
‘tap:aio:/one_images/88/images/disk.1,hdc:cdrom,r’,
]
@kevinbin
嗯,是同一种应用,不同的产品。
@david
有的系统(不同 linux 发行版)启动不能自动映射虚拟硬盘,还要看虚拟机里面 /etc/fstab 是如何挂载的,有的 /dev/xvda 有的 /dev/sda 等等。
想询问一下,opennebula的模版中cpu参数的设置,=1是使用完整cpu,0.5使用50%cpu么?那么对多核的cpu比如i5的也是遵循这个么?谢谢了
@lamefox
OpenNebula 里面 CPU 参数是 VCPU,是虚拟 CPU,1 是1个 VCPU.
那么是不是模板设置CPU=1,VCPU=1的话,那么虚拟机可以100%的使用主机的cpu,虚拟系统显示cpu的数量1个呢
而模板设置为CPU=0.5,就是虚拟机只能使用50%的主机cpu呢?
多谢!
@lamefox
不是。VCPU 和 CPU 之间从某个角度说没多大关系,1个 CPU 可以分成 n 个 VCPU 用,如果你服务器只有 1 个物理 CPU,完全可以造出 n 个虚拟机,而且每个虚拟机都有 n 个 CPU(不推荐,但是可以。)
额,我可能表达的不是很清楚,在模版的参数中关于cpu设置的有这么一句说明,
Percentage of CPU divided by 100 required for the Virtual Machine. Half a processor is written 0.5.
原文在http://opennebula.org/documentation:archives:rel3.0:template
这个的意思是不是说,虚拟机cpu的使用限制,完全使用主机的cpu就设置为1,只允许最多使用一半的cpu资源设置为0.5
@lamefox
要看 opennebula 是否针对不同的 hypervisor 实现了对应的调度,我看了一下在 kvm 下,opennebula 传过去的 CPU 参数不起作用;在 xen 下应该是起作用的,会配合 xm sched-credit 来限制和调度 CPU 资源。
opennebula 4.2 里面
使用virsh shutdown one-xx 关机后,
virsh list –all 就看不到这个实例了。
请问楼主这个是哪个版本的?
@tait
这篇文章是2012年5月写的,版本估计是 3.2 左右。