OpenNebula 3.8 — 本地存储
在前些时间发布的一篇教程中,我们介绍了如何在Ubuntu 12.04 Server上安装和配置OpenNebula 3.8。在本教程中,我们将讲述如何在OpenNebula中如何将虚拟机的磁盘映像存储在计算节点上。在进入本教程之前,我们假定您已经学习过如下内容:
Ubuntu 12.04 Server安装配置OpenNebula 3.8
OpenNebula 3.8中文语言包
使用VirtualBox创建KVM磁盘镜像文件
VM性能的快速测试方法
在前面的教程中,我们使用了基于NFS的共享文件系统将同控制节点上的一个目录共享给所有的计算节点。在缺省的情况下,OpenNebula将虚拟机的磁盘映像存储在共享文件系统上。这种配置能够提供虚拟机在线迁移的功能,但是虚拟机的文件IO性能会比较差。为了获得较好的文件IO性能,我们可以将选择将虚拟机的磁盘映像存储在计算节点的本地磁盘上(但是这样做会失去虚拟机在线迁移的功能)。为了达到这个目的,我们需要修改两个数据仓库的属性,一个是名为system的数据仓库,另一个是存储虚拟机源磁盘映像的数据仓库。
在OpenNebula中,名为system的数据仓库的ID为0,存放的是处于运行状态的虚拟机的磁盘映像。在缺省的情况下,这个数据仓库使用的是tm_shared驱动来传输磁盘映像,我们需要将其修改为tm_ssh驱动。我们可以用如下命令修改其属性:
onedatastore update 0
可以看到该数据仓库的属性如下:
DS_MAD=”-”
SYSTEM=”YES”
TM_MAD=”shared”
将TM_MAD这一行修改为如下形式,存盘退出即可。
TM_MAD=”ssh”
除了名为system的数据仓库之外,我们还需要修改用来创建虚拟机的特定磁盘映像所在的数据仓库的属性。在前一个教程中,我们通过SunStone管理界面从应用市场中下载了一个名为ttylinux-kvm的磁盘映像。在缺省的情况下,这个名为ttylinux-kvm的磁盘映像被注册到名为default的数据仓库中,该数据仓库的ID为1。
我们可以用如下命令修改其属性:
onedatastore update 1
可以看到该数据仓库的属性如下:
DS_MAD=”fs”
TM_MAD=”shared”
将TM_MAD这一行修改为如下形式,存盘退出即可。
TM_MAD=”ssh”
经过这样的修改之后,当我们创建虚拟机时,OpenNebula就会通过SSH将虚拟机的磁盘映像从名为default的数据仓库拷贝到计算节点的$DATASTORE_LOCATION/0/$VM_ID目录下。需要注意的是,$DATASTORE_LOCATION的值是在管理节点的etc/oned.conf文件中设定的,$VM_ID的值是OpenNebula在创建虚拟机时动态顺序生成的。为了简单起见,建议初学者按照如下步骤操作:
在管理节点上,编辑etc/oned.conf文件,将$DATASTORE_LOCATION的值设定为/srv/cloud/one/datastores,例如:
#DATASTORE_LOCATION = /var/lib/one/datastores
DATASTORE_LOCATION = /srv/cloud/one/datastores
存盘之后,通过运行one stop和one start命令重新启动OpenNebula服务。
在计算节点上,确认已经创建了oneadmin用户(属于cloud群组)并且其HOME目录已经设置为本地磁盘上的/srv/cloud/one(在计算节点上不需要挂载NFS文件系统),然后创建与system数据仓库相对应的目录:
su -l oneadmin
mkdir -p ~/datastores/0
此外,还需要确认管理节点上的oneadmin用户能够以无密码的方式通过SSH登陆到计算节点。详细的配置方法可以参考上一个教程。经过如上配置之后,OpenNebula就会将运行状态的虚拟机磁盘映像存放在计算节点上的本地磁盘上。
[…] 12.04 Server安装配置OpenNebula 3.8 2012-12-24, VM性能的快速测试方法 2013-01-06, OpenNebula 3.8 — 本地存储 2013-01-07, OpenNebula 3.8 — 监控 2013-01-08, OpenNebula 3.8 — VLAN […]
你好,想請問我是用Opennebula 3.0和Ubuntu 12.04的版本搭建的
這樣要如何做到本地儲存呢?
目前我只開啟了oned.conf中的
TM_MAD = [
# name = “tm_ssh”,
# executable = “one_tm”,
# arguments = “tm_ssh/tm_ssh.conf” ]
想請問運算節點和管裡節點還需要做甚麼操作嗎?
请问下镜像可以分别存放到node节点吗?因为没有共享存储,若以后每次添加虚拟时都要拷贝一次镜像到node上,有没有办法镜像在node上安装时直接从node拷贝呢~ 非常感谢