原文地址:http://www.cloudstack-china.org/2012/09/543.html

Secondary Storage VM 二级存储虚拟机简称ssvm, 作为系统虚机的一种,在cloudstack中扮演了很重要的角色,没有它很多功能都无法实现。

一、 什么是ssvm?
        简单来说ssvm主要用来管理二级存储,也就是对二级存储相关的操作都会通过它来完成,二级存储存放模板,ISO,快照,volume等信息, 也就是说对这些资源的管理都是通过SSVM进行的。每一个资源域可以有多个SSVM, 当SSVM被删除或停止,它会自动被重建并启动。
        1.创建ssvm
        当配置并enable zone之后,cloudstack会尝试使用系统虚机模板创建SSVM。针对不同的主机(xenserver, vmware, kvm),cloudstack提供了3种不同的系统模板,我们需要将模板安装到二级存储中,供cloudstack使用,安装步骤如下:
        a. 在你的管理服务器上挂载二级存储设备。此示例假定在二级存储服务器上路径是/nfs/share
        # mount -t nfs servername:/nfs/share /mnt/secondary
        b. 获得和解压系统VM模板。运行安装在管理服务器上的脚本/usr/lib64/cloud/agent/scripts/storage/secondary/cloud- install-sys-tmplt。对每一个用户将在所在资源域(Zone)内运行的hypervisor类型都执行此步骤。这样,系统将会有最大的灵活性来运行系统虚拟机。每次运行,在本地文件系统中需要大约10GB的剩余磁盘空间。
        具体运行的命令取决于hypervisor的类型,请在命令中替换SystemVM为实际存放模板的路径。
        对于vSphere:
/usr/lib64/cloud/agent/scripts/storage/secondary/cloud-install-sys-tmplt -m /mnt/secondary -f ../SystemVm/vmware/systemvm.ova -h vmware -F
        对于KVM:
/usr/lib64/cloud/agent/scripts/storage/secondary/cloud-install-sys-tmplt -m /mnt/secondary -f ../SystemVm/kvm/systemvm.qcow2.bz2 -h kvm -F
        对于XenServer:
/usr/lib64/cloud/agent/scripts/storage/secondary/cloud-install-sys-tmplt -m /mnt/secondary -f ../SystemVm/xenserver/systemvm.vhd.bz2 -h xenserver -F
        c. 脚本执行完毕,卸载二级存储设备。

        2.启动&配置ssvm
        使用系统虚机模板创建出来的VM,没有任何配置信息,也并不具备管理二级存储的功能,而这些功能都是通过ssvm启动的时候,通过command line的方式加入到ssvm中.可以通过命令cat /proc/cmdline查看到给SSVM的配置信息,包括网卡,nds,用户等相关信息。而这些信息都是在创建资源域的时候填写的。

        3. ssvm与cloudstack
        cloudstack 是通过ssh访问直接访问ssvm, 系统虚机模板中已经植入了一个ssh 的private key,此时cloudstack只需要通过自己的public key访问就可以了,端口为3922,这里xen与vmware的机制有些不同,由于默认vmware是禁止ssh登陆的,所以对于vmware来说,可以通过cloudstack的management server直接访问ssvm的public ip.在配置完ssvm后,cloudstack会让ssvm重新生成一对public key和private key,以后就使用新的key来访问ssvm。
        在ssvm中有一个java进程,专门负责与cloudstack的8250端口进行通讯,而这个java进程,以及相关shell脚本都是在通过创建完ssvm之后,由cloudstack注入进去的,如vmware,会有一个system.iso,这里面就存放着所有系统虚机需要的文件,在mount上二级存储之后,会将这个文件拷贝到ssvm中,在ssvm解压,并将相关文件存到指定路径下。

二、ssvm管理二级存储?
        ssvm管理二级存储其实也就是对存放在二级存储里面的资源进行管理,首先ssvm会将二级存储mount到本地,之后对二级存储的操作也就转换成对本地文件夹的操作。从功能上讲,ssvm负责管理snapshot, volume, iso, template, 下面将分别从上传,下载,查询,删除者4个角度说明对这些资源是如何管理的。

上传资源:
        当用户选择上传资源时,management server 会将url传递给ssvm, 这样ssvm就可以通过wget从指定的url中下载资源。

下载资源:
        当用户选择下载指定资源时候,management server 首先从数据库中查找该资源对应的路径,并将该路径传递给ssvm,ssvm 使用内置的apache server来提供资源上传服务。这样用户就可以通过ssvm下载所需要的资源了

查询资源:
        ssvm会定期向management server上传自己的状态信息

删除资源:
        由于二级存储已经挂载到ssvm中,这样它就可以直接将二级存储里面的内容删除

三、 如何验证ssvm?
        那如何验证ssvm并可以正常使用呢?在ssvm中有一个ssvm-check.sh,这个shell文件主要负责对ssvm的相关配置进行验证。验证内容包括: dns, mount的二级存储, 与management server的连接,相关java进程