管理虚拟机实例中预安装应用的持久数据的方法和装置的制作方法

文档序号:6434720阅读:152来源:国知局
专利名称:管理虚拟机实例中预安装应用的持久数据的方法和装置的制作方法
技术领域
本发明涉及计算机领域,具体涉及云计算领域,更具体涉及一种用于管理弹性虚拟机实例中的预安装应用的持久数据的方法和装置。
背景技术
诸如Amazon EC2(Elastic Cloud Computing)、 ISAAC(IBM Service AgilityAccelerator for Cloud)、RHEV(Red Hat Enterprise Virtulization)等基础设施即服务(IaaS)云服务,可以很快地且以高伸缩性供应弹性虚拟机实例。弹性虚拟机实例是响应于用户请求从一主虚拟机映像发起的。主虚拟机映像代表了计算和存储等硬件资源、操作系统平台和应用等的特定配置。从一个主虚拟机映像发起的所有弹性虚拟机实例共享主虚拟机映像的公共文件和数据,而虚拟机实例使用“写时才拷贝”(Copy-On-Write)技术只在本地存储很少量的修改数据,从而节省了维护成本,节约了磁盘数据等。此外,应用可以被预安装到主虚拟机映像中,并在主虚拟机映像中进行配置,这样可以避免每个用户在其发起的虚拟机实例中单独安装和配置应用,从而节省了大量时间和精力,降低了维护和存储成本,缩短了价值实现时间(time to value)。然而,在此类IaaS方案中,把所有的计算资源分为两个域计算域和存储域。计算域由计算节点组成,提供计算资源(主要有CPU、内存、网卡等),但其中的所有数据被认为是可以丢弃的。存储域由存储节点组成,提供存储资源,用来存储用户认为需要保留的数据。弹性虚拟机实例运行在计算节点上,它通过“写时才拷贝”技术存储在计算节点上的任何数据更改(例如,数据库中的新的企业资产数据,文件系统中产生的新的业务使用数据等)不是持久性的。如果实例所运行的硬件发生故障,或者实例被终止或被关闭,则这些新产生的数据将丢失。这是因为,弹性虚拟机实例运行在计算节点上的基于主虚拟机映像的本地临时映像上,该本地临时映像中的更改数据并没有持久存储在存储域中;而主虚拟机映像不允许回写,因为它是只读的且由很多用户所共享。这些在虚拟机实例发起后产生的更改的数据是用户的实际业务数据,因此应当被存储在云端用于每个用户的存储卷中。当前,云服务提供者也提供了持久存储解决方案,即上面所述的云环境中的存储域,以便用户存储其希望存储的任何数据。例如,Amazon提供了使用 Amazon EBS (Elastic Block Storage)的持久存储,ISAAC 提供了 Volume 解决方案。用户可以创建其希望的任何数量的存储卷,并将存储卷作为如未格式化硬盘那样的原始块存储设备附接(attach)到虚拟机实例,使用任何文件系统对其进行格式化,并将其挂载(mount)到某个文件目录或逻辑盘。当弹性虚拟机实例终止时,存储卷仍然存在于存储节点中,因此,可以将其重新附接到新发起的弹性虚拟机实例。然而,显然,这种持久存储解决方案只适合于弹性虚拟机实例被发起后且存储卷被创建、附接、格式化和挂载后新安装和配置的应用的数据的持久存储,因为在现有技术中显然只有当弹性虚拟机实例被发起,且存储卷被创建、附接、格式化和挂接之后,才能安装并配置应用以便将其运行过程中产生的数据持久存储到所述卷中。而对于已在主虚拟机映像中预安装和预配置的应用来说,无法将其运行过程中产生的数据持久存储到所述卷中。为了为在主虚拟机映像中预安装和预配置的软件应用提供用户数据的持久存储,目前云服务提供者提出了以下三种解决方案I)将全部软件应用安装和配置到一个或一组主虚拟机映像中;在发起虚拟机实例之后,为每一个虚拟机实例将数据库或文件系统备份解决方案配置为将数据备份到一个存储卷。该解决方案可以很好地实现共享预安装和预配置的软件应用,从而可以很快地发起具有配置应用的虚拟机实例,然而,如果一个虚拟机实例终止,则最后一次备份操作之后的数据将丢失。此外,这种解决方案需要额外地为每一个虚拟机实例管理一个备份解决方案,尽管始终存在着用于云服务提供者提供的整个存储的整体备份解决方案来确保数据安全性。2)发起仅带有操作系统的虚拟机实例;创建存储卷并将其附接到虚拟机实例;然后安装软件应用并将其配置为将持久数据直接存储到存储卷。这种解决方案目录实际上已由很多用户手工执行,并且可以很容易地使用IT技术将其自动化。然而,这种解决方案不能快速地提供具有安装的应用的虚拟机实例,因为安装应用需要耗费大量时间,特别是对于某些大型复杂软件应用而言。例如,完成IBM MaximoAsset Management v7. 5应用的安装需要大约10小时,而安装更复杂的解决方案甚至需要大约80小时。而且,应用安装无法在不同用户之间共享,每个用户都需要分别安装所需的应用。且对于同一个用户来说,如果虚拟机实例终止,则需要重新安装应用。3)某些云解决方案提供了持久虚拟机实例来解决该问题。也就是说,当需要发起虚拟机实例时,从主虚拟机映像复制一个新的映像(存储卷)在存储节点上,并在计算节点上远程连接到该映像,计算节点本地不再产生一个使用“写时才拷贝”技术的临时映像。这样,应用数据将存储在这个位于存储域中的存储卷中,这样当虚拟机关机或者主机关机时,应用数据仍是持久的。这种解决方案需要复制整个主虚拟机映像,这将需要很长时间。例如,当复制一个100G的主虚拟机映像时,需要大约半小时的时间。此外,由于存储卷中的映像从主虚拟机映像复制之后是独立于主虚拟机映像的,系统管理员需要额外的努力来维护该映像,执行操作系统补丁、应用补丁等工作。这样,例如如果有1000个实例,则系统管理员的工作量将增加1000倍。因此,本领域中需要一种能够克服上述缺点的用于管理计算云虚拟机实例中的预安装应用的持久数据的解决方案。

发明内容
根据本发明的一个方面,提供了一种用于管理弹性虚拟机实例中的预安装应用的持久数据的方法,包括响应于将应用预安装到主虚拟机映像中,获得应用的功能模块的持久数据点,所述持久数据点包括用于存储所述功能模块的持久数据的文件目录;响应于从所述主虚拟机映像发起弹性虚拟机实例,创建存储卷,将所述存储卷附接到所述弹性虚拟机实例,并根据所述持久数据点将所述存储卷挂载到所述文件目录。根据本发明的另一个方面,提供了一种用于管理弹性虚拟机实例中的预安装应用的持久数据的装置,包括持久数据点获得模块,其被配置为响应于将应用预安装到主虚拟机映像中,获得应用的功能模块的持久数据点,所述持久数据点包括用于存储所述功能模块的持久数据的文件目录;存储卷管理器,其被配置为响应于从所述主虚拟机映像发起弹性虚拟机实例,创建存储卷,将所述存储卷附接到所述弹性虚拟机实例,并根据所述持久数据点将所述存储卷挂载到所述文件目录。本发明的优点在于1.弹性虚拟机实例运行过程中产生的用户数据被直接写入到存储卷,这样,当弹性虚拟机实例终止或发生故障时,用户数据不会丢失。而且,不需要为每个弹性虚拟机实例维护一个特定的数据备份解决方案。存储卷的备份是由云环境内的整体存储备份解决方案负责的。2.应用是预安装和配置在主虚拟机映像中的,因此各弹性虚拟机实例用户可共享同一个安装,而不需要耗时的安装过程。且每个用户具有其专用的存储卷来存储自己的数据。3.仍然属于弹性虚拟机解决方案,不需要复制整个主虚拟机映像来存储用户的持久数据。系统管理员只需要维护主虚拟机映像,从而节约了总的拥有和维护成本。


所附权利要求中阐述了被认为是本发明的特点的创造性特征。但是,通过参照附图阅读下面对说明性实施例的详细说明可更好地理解发明本身以及其优选使用模式、目标、特征以及优点,在附图中图1表示根据本发明一实施例的云计算节点;图2表示根据本发明一实施例的云计算环境;图3表示根据本发明一实施例的抽象模型层;图4示出了本发明可在其中实现的云管理系统;图5具体示出了根据本发明的实施例的准备主虚拟机映像的流程;图6具体示出了根据本发明的实施例的发起弹性虚拟机实例的流程;图7具体示出了根据本发明的实施例的恢复弹性虚拟机实例的流程;图8具体示出了根据本发明的实施例的启用功能模块的流程;图9示出了根据本发明的实施例的用于管理弹性虚拟机实例中的预安装应用的持久数据的方法;以及图10示出了根据本发明的实施例的用于管理弹性虚拟机实例中的预安装应用的持久数据的装置。
具体实施例方式云计算首先应当明白,尽管本公开包括关于云计算的详细描述,本公开所记载的技术方案的实现却不限于云计算环境。本发明的实施例能够结合现在已知的或以后开发的任何其它类型的计算环境而实现。云计算是一种服务交付模型,用于对共享的可配置计算资源池进行方便、按需的网络访问。可配置计算资源例如是网络、网络带宽、服务器、处理、内存、存储、应用、虚拟机和服务,是以最小的管理成本或者最少的与服务提供者的交互就能快速提供和释放的资源。这种云模型可以包括至少五个特征,至少三个服务模型和至少四个部署模型。特征如下按需自助式服务云消费者能单方面自动地按需提供计算能力,诸如服务器时间和网络存储,而无需与服务提供者进行人工交互。广泛的网络接入云计算能力可在网络上获取,并且是通过标准机制获取的,标准机制促进通过不同种类瘦客户机平台或厚客户机平台(例如移动电话、膝上型电脑、个人数字助理PDA)对云的使用。资源池将提供者的计算资源归入资源池,通过多租户(munt1-tenant)模式服务于多重消费者,不同的实体资源和虚拟资源按照需要被动态地分配和再分配。因为消费者一般不控制甚至不知道所提供的资源的确切位置,但是可能在较高的抽象程度上指定位置(例如国家、州或数据中心),所以有一种位置独立感。迅速的弹性能迅速和有弹性地(有时是自动地)提供计算资源,以实现快速地扩展并且能快速地释放。对于消费者来说,可用的计算资源常常显得是无限的,在任何时候都能获取任何数量的计算资源。可测量的服务云系统通过利用适于服务(例如存储、处理、带宽和活动用户帐号)类型的某种抽象程度的计量能力,自动地控制和优化资源效用。可以监测、控制和报告资源使用情况,为服务提供者和消费者双方提供透明度。服务模型如下软件即服务(SaaS):给予消费者使用提供者在云基础架构上运行的应用的能力。应用是可通过诸如网络浏览器的瘦客户机接口从各种客户机设备访问的(例如基于网络的电子邮件)。可能除了是有限的特定于用户的应用配置设置外,消费者既不管理也不控制底层的云基础架构,包括网络、服务器、操作系统、存储、乃至单个应用能力。平台即服务(PaaS):向消费者提供的能力是在云基础架构上部署消费者创建的或获得的应用,这些应用是用提供者所支持的程序设计语言和工具创建的。消费者不管理或控制基础的云基础架构,包括网络、服务器、操作系统或存储,但是对所部署的应用具有控制权,对托管环境配置的应用也可能有控制权。基础架构即服务(IaaS):给予消费者提供处理、存储、网络和消费者能在其中部署和运行任意软件的基础计算资源的能力,其中软件可包括操作系统和应用程序。消费者既不管理也不控制底层的云基础架构,但是对操作系统、存储和所部署的应用具有控制权,对选择的网络部件(例如主机防火墙)也可能拥有有限的控制权。部署模型如下私有云云基础架构是单独为某个组织运行的。云基础架构可以由该组织管理,也可以由第三方管理,可以存在于组织内,也可以存在于组织外。共同体云云基础架构被若干个组织共享,支持有共同利害关系(例如使命、安全要求、政策和合规考虑)的特定共同体。共同体云可以由共同体内的多个组织或第三方管理,可以存在于组织内,也可以存在于组织外。公共云云基础架构向公众或大型产业群提供,并由出售云服务的组织拥有。
混合云云基础架构是两个或更多的云(私有云、共同体云或公共云)的合成,这些云依然是独特的实体,但是通过使数据和应用能够移植的标准化技术或私有技术(例如用于云之间的负载平衡的云突发流量分担技术)绑定在一起。云计算环境是面向服务的,特点集中在无状态性、低耦合性、模块性和语意的互操作性。云计算的核心是包含互连节点网络的基础结构。现在参考图1,图中显示了一个云计算节点的例子。云计算节点10仅仅是合适的云计算节点的一个示例,而并不意味着对本发明的实施例的功能和使用的范围的任何限制。总之,云计算节点10能够被实现和/或执行以上所述的任何功能。在云计算节点10中有一个计算机系统/服务器12,其可与众多其它通用或专用计算系统环境或配置一起操作。适于与计算机系统/服务器12 —起使用的众所周知的计算系统、环境和/或配置的例子包括但不限于个人计算机系统、服务器计算机系统、瘦客户机、厚客户机、手持或膝上设备、基于微处理器的系统、机顶盒、可编程消费电子产品、网络个人电脑、小型计算机系统、大型计算机系统和包括上述任何系统的分布式云计算技术环境,等
坐寸ο计算机系统/服务器12可以在由计算机系统执行的计算机系统可执行指令(诸如程序模块)的一般语境下描述。通常,程序模块可以包括例程、程序、目标程序、组件、逻辑、数据结构等等,它们执行特定的任务或者实现特定的抽象数据类型。计算机系统/服务器12可以在分布式云计算环境中实施,分布式云计算环境中,任务是由通过通信网络链接的远程处理设备执行的。在分布式云计算环境中,程序模块可以位于包括存储设备的本地或远程计算系统存储介质上。如图1所示,云计算节点10中的计算机系统/服务器12是以通用计算设备的形式表现的。计算机系统/服务器12的部件可以包括但不限于一个或者多个处理器或者处理单元16,系统存储器28,连接不同系统部件(包括系统存储器28和处理单元16)的总线18。总线18表示几种类型的总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任何总线结构的局域总线。举例(但不限于这些示例)来说,这些体系结构包括工业标准体系结构(ISA)总线,微通道体系结构(MAC)总线,增强型ISA总线、视频电子标准协会(VESA)局域总线以及外围部件互连(PCI)总线。计算机系统/服务器12典型地包括多种计算机系统可读介质。这些介质可以为可被计算机系统/服务器12访问的任何可获得的介质,包括易失性和非易失性介质,可移动的和不可移动的介质。系统存储器28可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(RAM) 30和/或高速缓存存储器32。计算机系统/服务器12可以进一步包括其它可以移动的/不可移动的,易失性/非易失性计算机系统存储介质。仅作为举例,存储系统34可以被提供用于读出和写入不可移动的、非易失性磁介质(未示出,通常称为“硬盘驱动器”)。尽管图中未示出,可以提供用于对可移动的非易失性磁盘(录入“软盘”)读写的磁盘驱动器,以及对可移动的非易失性光盘——诸如CD-ROM,DVD-ROM或者其它光介质——读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线18相连。如以下将进一步表示和描述的那样,存储器28可以包括至少一个程序产品,该程序产品有一组(例如至少一个)程序模块,这些程序模块被配置以执行本发明各实施例的功能。有一组(至少一个)程序模块42的程序/实用工具40,可以被存储在存储器28中,这样的程序模块42例如(但不限于)操作系统、一个或者多个应用程序、其它程序模块以及程序数据。操作系统、一个或者多个应用程序、其它程序模块、程序数据中的每一个或它们的某种组合中可能包括网络环境的实现。程序模块42通常执行这里描述的本发明的实施例中的功能和/或方法。计算机系统/服务器12也可以与一个或多个外部设备14—诸如键盘、指向设备、显示器24等等——通信,与一个或者多个使用户能与计算机系统/服务器12交互的设备通信,和/或与使计算机系统/服务器12能与一个或多个其它计算设备通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口 22进行。并且,计算机系统/服务器12还可以通过网络适配器20与一个或者多个网络一诸如局域网(LAN),广域网(WAN)和/或公共网络(例如因特网)一通信。如图所示,网络适配器20通过总线18与计算机系统/服务器12的其它模块通信。应当明白,尽管图中未示出,其它硬件和/或软件模块可以与计算机系统/服务器12 —起使用。例子包括但不限于微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统,等等。现在参考图2,该图描述了示例性的云计算环境50。如图所示,云计算环境50包括云计算消费者使用的本地计算设备可以与其相通信的一个或者多个云计算节点10,本地计算设备诸如个人数字辅助设备(PDA)或者是移动电话54A,台式电脑54B,笔记本电脑54C,和/或汽车计算机系统54N。节点10之间可以相互通信。可以在在一个或者多个网络一
诸如如上所述的私有云、共同体云、公共云或混合云或者它们的组合-中,将节点10进行
物理或者虚拟分组(图中未示出)。这允许云计算环境50提供云消费者无需在本地计算设备上维护资源就能请求的基础架构即服务、平台即服务和/或软件即服务。应当明白,图2示出的各类计算设备54A-N仅仅是示意性的,计算节点10以及云计算环境50可以与任何类型的网络上的和/或网络可寻址的连接上的任何类型的计算设备(例如使用网络浏览器)通信。现在参考图3,该图示出了云计算环境50(图2)提供的一组功能抽象层。首先应当明白,图3所示的部件、层以及功能都仅仅是示意性的,本发明的实施例不限于此。如图所示,提供了下列层和对应功能硬件和软件层60包括硬件和软件部件。硬件部件的例子包括主机——例如IBM zSeries 系统;基于Rise(精简指令集计算机)体系结构的服务器一例如iBMpSeries 系统;iBMxSeries 系统;iBMBladeCenter 系统;存储设备;网络和网
络部件。软件部件的例子包括网络应用服务器软件一例如IBM WebSphere 应用服
务器软件;数据库软件-例如IBMDB2 数据库软件。(IBM, zSeries, pSeries,xSeries,
BladeCenter, WebSphere以及DB2是国际商业机器公司在全世界各地注册的商标)。虚拟层62提供一个抽象层,该层可以提供下列虚拟实体的例子虚拟服务器、虚拟存储、虚拟网络(包括虚拟私有网络)、虚拟应用和操作系统,以及虚拟客户端。
在一个示例中,管理层64可以提供下述功能资源供应功能提供用于在云计算环境中执行任务的计算资源和其它资源的动态获取;计量和定价功能在云计算环境内资源被使用时进行成本跟踪,并为这些资源的消费提供帐单和发票。在一个例子中,这些资源可以包括应用软件许可。安全功能为云消费者和任务提供身份认证,为数据和其它资源提供保护。用户门户为消费者和系统管理员提供对云计算环境的访问。服务水平管理功能提供云计算资源的分配和管理,以满足必需的服务水平。服务水平协议(SLA)计划和履行功能为根据SLA的预测了未来需求的云计算资源提供预先安排和供应。工作负载层66提供了云计算环境可能实现的功能的示例。在该层中,可提供的工作负载或功能的示例包括地图绘制与导航;软件开发及生命周期管理;虚拟教室的教学他提供;数据分析处理;交易处理;以及移动桌面等等。图4示出了本发明可在其中实现的云管理系统101。该云管理系统101可以是图3中所示的管理层64的一个实现。在本发明的一些实施例中,该云管理系统101是现有的云管理系统,例如Amazon EC2、ISAAC、RHEV解决方案等。在本发明的另一些实施例中,该云管理系统101是如图所示通过向现有的云管理系统中添加了本发明的用于管理弹性虚拟机实例中的预安装应用的持久数据的装置109而获得的云管理系统。如图所示,云管理系统101中包括一个或多个主虚拟机映像104,以及与单个主虚拟机映像对应的一个或多个弹性虚拟机实例105。每个主虚拟机映像104代表了特定数量、特性和性能的计算和存储等硬件资源、操作系统平台以及应用等IT资源的一种特定配置。基于一个主虚拟机映像104,可以发起任意多个虚拟机实例105,其中每个虚拟机实例105将具有与主虚拟机映像相同的硬件、操作系统和应用配置。因此,用户可以通过在向云管理系统101发出服务请求时指定特定的主虚拟机映像104来生成相应的虚拟机实例105,从而获得具有特定硬件和软件配置的IT基础设施。如图所示,在本发明的实施例中,在主虚拟机映像104中预安装和配置有一个或多个应用106,每个应用具有一个或多个持久数据点107。相应地,在由主虚拟机映像发起的每一个弹性虚拟机实例中也将包括相同的一个或多个应用106’,且每个应用106’包括相同的一个或多个数据点107’。如图中弹性虚拟机实例105、应用106’和数据点107’方块的虚线所意在表明的,弹性虚拟机实例105及其应用106’并不具有独立于主虚拟机映像104及其应用106的单独的文件系统,相反,同一个主虚拟机映像104的所有弹性虚拟机实例105及其应用106’实际上共享着该主虚拟机映像104及其应用106的相同的文件系统;然而,通过云管理系统101中的“写时才拷贝”技术(未示出),在每个用户看起来,其单独占有其虚拟机实例中的整个文件系统。应用的持久数据点代表了应用中的功能模块的持久数据的存储位置,即持久数据所要存储的文件目录。在本申请中,功能模块是指应用中的功能相对独立的部分。一个应用可具有一个或多个功能模块。功能模块可能具有(也可能不具有)需要存储的持久数据,这种持久数据是在应用的运行过程中产生的,或是在应用的安装过程中初始产生的。一个功能模块的持久数据通常存储在一个单独的存储位置。当然,一个功能模块的持久数据也有可能存储在多个存储位置,或者,多个功能模块的持久数据也有可能存储在同一个存储位置。因此,一个应用通常可具有一个或多个持久数据点,每个持久数据点代表应用中的功能模块的持久数据的一个存储位置。不同应用基于其设计而具有不同的持久数据点。通常,应用的持久数据点所代表的存储位置是在应用的设计和开发过程中默认的,并可以在应用安装过程中由用户进行配置。在应用运行过程中产生的不需要持久保存的非持久数据,则可以没有相应的持久数据点。如图所示,根据本发明的实施例,在云管理系统101中,还包括本发明的用于管理弹性虚拟机实例中的预安装应用的持久数据的装置109 (将在下文中描述),且该装置109可以在图3中所示的管理层64中的资源供应功能中实现。在本发明的其他实施例中,本发明的用于管理弹性虚拟机实例中的预安装应用的持久数据的装置109也可以位于云管理系统101之外。如图所示,根据本发明的实施例,对于每个弹性虚拟机实例105,本发明的装置109可根据其包含的每个应用106’的每个持久数据点107’创建一个存储卷108,将所述存储卷108附接到该弹性虚拟机实例105,并挂载到该持久数据点107’。所述存储卷108可以为可由云管理系统101提供或管理的任何计算机可读写的非易失性物理存储介质或其部分。本发明的解决方案根据本发明的实施例,本发明的解决方案包括以下方面(—)在将一应用安装到主虚拟机映像之前,使用元数据定义该应用的与功能模块关联的每个持久数据点。( 二)在将应用安装到主虚拟机映像时,将应用的每个持久数据点元数据实例化。(三)安装初始数据(如果有的话)的备份和清除。(四)从主虚拟机映像发起弹性虚拟机实例之后,且在启动其中的应用之前,为每一个启用的持久数据点创建存储卷,将该存储卷附接到该弹性虚拟机实例,对该存储卷进行格式化,将该存储卷挂载持久数据点中定义的文件目录,并恢复所备份的安装初始数据(如果有的话)。(五)当弹性虚拟机实例发生故障或终止时,从主虚拟机映像发起另一个虚拟机实例,并将相关存储卷重新附接到该另一个虚拟机实例,并重新挂载到相应数据点中定义的文件目录。(六)如果在虚拟机发起之后,应用的某个已安装但被禁止的功能模块被启用,则根据相关持久数据点中定义的参数创建、附接、格式化和挂载存储卷。下面详细描述根据本发明的实施例的本发明的解决方案的各个方面。第(一)方面在将一应用安装到主虚拟机映像之前,使用元数据定义该应用的与功能模块关联的每个持久数据点,所定义的每个持久数据点可包括以下各项相应功能模块名称或标识、存储位置、保留的存储空间大小及文件系统格式、是否包含初始数据、以及初始数据备份/恢复方法等信息。其中,相应功能模块名称或标识是指该数据点所关联的应用中的功能模块的名称或标识;存储位置是指该功能模块的持久数据将存储的文件目录;保留的存储空间大小是指将用于存储该功能模块的持久数据的存储卷的大小;文件系统格式是指该存储卷的文件系统格式;是否包含初始数据是指在安装应用的过程中是否将在所述存储位置中存储该功能模块的初始数据;初始数据备份/恢复方法是指在存储了所述初始数据的情况下,用于备份该初始数据以及用于恢复该初始数据的方法。使用元数据定义持久数据点,亦即获得持久数据点的元数据定义,可意味着所述各项或其中的一些项并不包括具体的值,而只有项的名称。具体地,在使用元数据定义的数据点中,可以只有相应功能模块名称或标识项才有具体的值,而存储位置、保留的存储空间大小、文件系统格式、是否包含初始数据、以及初始数据备份/恢复方法这些项并没有具体的值,而只有项的名称。应用中的每个持久数据点的元数据定义是可以从应用的设计和开发阶段获得的,或者可以通过查阅有关应用的功能和结构的文档而获得。可以将所获得的应用的持久数据点的元数据定义与应用相关联地存储,例如存储在云管理系统101可访问的任何位置。在本发明的其他实施例中,应用中的持久数据点的元数据定义可以包含更多或更少的内容,例如,也可以仅包含所述存储位置,等等。在本发明另一些实施例中,也可以不去获得应用的持久数据点的元数据定义,而是可以在将应用安装到主虚拟机映像的过程中直接获得应用的持久数据点,或用于存储其持久数据的文件目录。第(二)方面在将应用安装到主虚拟机映像时,将应用的每个持久数据点元数据实例化。也就是说,在将应用安装到主虚拟机映像的过程中,将这些持久数据点元数据定义中的各项的值填充到各项中。可以根据用户在安装过程中的配置,将存储位置、保留的存储空间大小、文件系统格式、是否包含初始数据以及初始数据备份/恢复方法这些项的具体值填充到持久数据点中,从而将持久数据点元数据实例化。在将应用的各持久数据点元数据实例化后,可将应用的已实例化的各持久数据点存储起来,例如存储到用于该主虚拟机映像的一持久数据点目录中。用于该主虚拟机映像的持久数据点目录中可包含该主虚拟机映像中预安装的所有应用的所有实例化的持久数据点。该持久数据点目录可与该主虚拟机映像相关联地存储在本发明的装置109可访问的任何位置。此外,可为每一个持久数据点设置一个启用标志。启用标志用于表示是否启用了该持久数据点对应的功能模块,且可根据安装过程中或之后用户的配置进行设置。如上所述,在本发明的另一些实施例中,也可以不去获得应用的持久数据点的元数据定义,因而不需要将应用的持久数据点元数据实例化,而是在将应用预安装到主虚拟机映像的过程中,由用户在安装过程之中和/或之后配置或指定应用的持久数据的存储位置、为持久数据保留的存储空间大小、文件系统格式、是否包含初始数据、初始数据备份/恢复方法、是否启用了相应功能模块等,并将这些配置或指定存储在用于该主虚拟机映像的持久数据点目录或其他数据结构中。第(三)方面在为弹性计算云准备主虚拟机映像时,如果在主虚拟机映像的持久数据点目录中定义的一持久数据点中指示包含初始数据(即是否包含初始数据项的值为真,不管启用标志的值为真或为假),即在应用的安装过程中该持久数据点的存储位置存储了相应功能模块的初始数据,则使用该持久数据点中定义的初始数据备份方法将该存储位置中的初始数据进行备份,然后从该存储位置清除初始数据(以便空的文件目录将来可用于挂载存储卷)。上述操作可针对主虚拟机映像的持久数据点目录中每一个持久数据点执行。在本发明的另一些实施例中,持久数据点中可以不包含是否包含初始数据项,而是可以任何其他方式(例如,在与应用关联的持久数据点和持久数据点目录之外的任何其他数据结构中)指示在应用的安装过程中是否存储了初始数据;此外,持久数据点中也可以不包含初始数据备份/恢复方法,而是对于一个应用的所有数据点(或者对于一个主虚拟机映像的所有应用的所有数据点,或者对于云管理系统中的所有主虚拟机映像的所有应用的所有数据点)使用相同的初始数据备份/恢复方法。当然,在本发明的一些实施例中,如果能确定在将任何应用预安装到主虚拟机映像时都不会存储初始数据,则不需要对初始数据进行备份、清除以及恢复,也不需要在持久数据点中指定或以其他方式指定是否包含初始数据以及初始数据备份/恢复方法。图5具体示出了根据本发明的实施例的准备主虚拟机映像的流程。如图所示,在开始准备主虚拟机映像之后,在步骤201,从主虚拟机映像的持久数据点目录读取一个数据点。在步骤202,判断该数据点中是否指示存在初始数据。如果该判断为否,则执行步骤205。如果该判断为是,则执行步骤203。在步骤203,使用该数据点中定义的备份命令备份在安装应用过程中存储到该数据点中定义的存储位置的初始数据。在步骤204,从所述存储位置清除所述初始数据。在步骤205,判断在主虚拟机映像的持久数据点目录中是否还有更多的持久数据点。如果步骤205的判断为是,则返回步骤201,从持久数据点目录中读取下一个持久数据点,并针对该下一个持久数据点再次执行步骤202-205。如果步骤205的判断为否,则执行步骤206。在步骤206,执行云解决方案所要求的用于准备主虚拟机映像的其他任务(由于这些任务与本发明无关,故不在此赘述)。这样,就完成了主虚拟机映像的准备。第(四)方面在从主虚拟机映像发起一个弹性虚拟机实例之后,且在启动其中的应用之前,可由根据本发明的装置109读取主虚拟机映像的持久数据点目录,并为其中的每一个启用标志的值为真的持久数据点执行以下操作I)创建具有该持久数据点中定义的保留的存储空间大小的存储卷;2)将该存储卷附接到该弹性虚拟机实例;3)使用该持久数据点中定义的文件系统格式对该存储卷进行格式化;4)将该存储卷挂载到该持久数据点中定义的存储位置即文件目录;5)如果该持久数据点中的是否包含初始数据项的值为真,则使用该持久数据点中定义的初始数据恢复方法恢复所备份的初始数据。以上过程可以在发起弹性虚拟机实例后,且在启动任何应用之前,针对其中的全部应用的全部持久数据点进行。也可以在发起弹性虚拟机实例后,且在启动任何单个应用之前,针对该单个应用的全部持久数据点进行。如本领域中所知的,在现有的云管理系统101中通常提供了用于创建、格式化、附接和挂载存储卷的工具或功能,因此,本发明的装置109可通过这些工具或功能实现存储卷的创建、格式化、附接和挂载。在本发明的其他一些实施例中,在从主虚拟机映像发起一个弹性虚拟机实例后,可从主虚拟机映像的持久数据点目录创建与该弹性虚拟机实例关联的持久数据点目录副本,并可将该持久数据点目录副本与该虚拟机实例的标识相关联地存储起来,例如存储在云管理系统101中的一非易失性存储器中。这样,本发明的装置109将不是读取主虚拟机映像的持久数据点目录,而是读取该弹性虚拟机实例的持久数据点目录副本,并为其中的每一个启用标志为真的持久数据点执行上述操作I)-5)。在本发明的其他一些实施例中,也可以考虑由云管理系统101或本发明的装置109预先创建和格式化具有不同大小和格式的存储卷,这样,就不再需要在此时创建和格式化存储卷,而只需要根据持久数据点中定义的保留的存储空间大小和文件系统格式选择适当的存储卷,并将所选择的存储卷附接到弹性虚拟机实例并挂载到持久数据点中定义的文件目录。此外,还可以考虑本发明的装置109将对所有的数据点使用相同大小和/或格式的存储卷,这样,就不再需要在数据点中定义保留的存储空间大小和文件系统格式了,本发明的装置109将直接使用预先创建的(或在发起弹性虚拟机实例后创建的)相同大小和/或格式的存储卷进行附接和挂载。此外,本发明的装置109还可将该弹性虚拟机实例的该持久数据点与该存储卷之间的映射关系存储起来,例如,存储在云管理系统101中可由本发明的装置109访问的一非易失性存储器中的一映射关系表中,以便将来使用,例如,如下所述,在该弹性虚拟机实例终止或发生故障后重新发起弹性虚拟机实例时使用。本发明的装置109可在该映射关系表中相关联地存储弹性虚拟机实例的ID、持久数据点的名称或ID、以及存储卷的ID。图6具体示出了根据本发明的实施例的发起弹性虚拟机实例的流程。如图所示,在发出发起弹性虚拟机实例的命令后,在步骤301,使用弹性计算云API从主虚拟机映像发起一个弹性虚拟机实例。如何使用弹性计算云API从主映射像发起一个弹性虚拟机实例,这在本领域中是公知的,故在此不再赘述。在步骤302,从用于弹性虚拟机的持久数据点目录读取一个持久数据点。所述用于弹性虚拟机实例的持久数据点目录或者是主虚拟机映像的持久数据点目录(在由主虚拟机映像发起的所有弹性虚拟机实例共享主虚拟机映像的持久数据点目录的情况下),或者是该弹性虚拟机实例的持久数据点目录副本(在为每个弹性虚拟机实例生成一个持久数据点目录副本的情况下)。在步骤303,判断该持久数据点是否被启用,即其启用标志的值是否为真。如果该判断为否,则执行步骤307。如果该判断为是,则执行步骤304。在步骤304,执行以下操作1)创建具有持久数据点中定义的保留的存储空间大小的存储卷;2)将存储卷附接到虚拟机实例;3)使用持久数据点中定义的文件系统格式格式化存储卷;4)将存储卷挂载到数据点中定义的存储位置即文件目录。在步骤305,判断持久数据点中是否指示存在初始数据。如果该判断为否,则执行步骤307。如果该判断为是,则执行步骤306。在步骤306,使用持久数据点中定义的(或以其他方式指定的)恢复命令恢复初始数据。
在步骤307,判断弹性虚拟机的持久数据点目录中是否存在更多的持久数据点。如果该判断为是,则返回步骤302,从虚拟机的持久数据点目录中读取下一个持久数据点,并针对该下一个持久数据点再次执行步骤303-307。如果该判断为否,则执行步骤308。在步骤308,存储虚拟机实例的持久数据点与存储卷之间的映射关系。例如,可将所述映射关系存储在云管理系统101中的一个非易失存储器中的映射关系表中,以便将来使用。在步骤309,在虚拟机实例中准备和启动应用(包括修改应用配置以适应新的网络环境,启动应用等)。由于该步骤与本发明无关,故不在此详述。这样,应用就在虚拟机实例中运行起来。第(五)方面在虚拟机实例中的应用的运行过程中,云管理系统101将把应用的功能模块所产生的用户持久数据写入相应的文件目录(如在对应于该功能模块的持久数据点中所指定的),从而直接写入到所挂载的存储卷中。当虚拟机实例发生故障或终止时,存储卷中的数据将仍然存在。此后,可以从主虚拟机映像发起另一个虚拟机实例,并根据以上所述为发生故障或终止的虚拟机实例存储的其持久数据点与存储卷之间的映射关系,确定该发生故障或终止的虚拟机实例的所有存储卷,将所有存储卷(包含其存储的用户持久数据)分别重新附接到该另一个虚拟机实例,并分别重新挂载到相应数据点中定义的文件目录,从而实现虚拟机实例的恢复。图7具体示出了根据本发明的实施例的恢复虚拟机实例的流程。如图所示,在使用已终止的先前弹性虚拟机实例的ID发出恢复弹性虚拟机实例的命令之后,在步骤401,使用弹性计算云API从主虚拟机映像发起一个新的弹性虚拟机实例。此外,如上所述,在本发明的一实施例中,可在从主虚拟机映像发起弹性虚拟机实例时,从主虚拟机映像的持久数据点目录生成一个用于该弹性虚拟机实例的持久数据点目录副本。在步骤402,从用于该新的弹性虚拟机实例的持久数据点目录(主虚拟机实例的持久数据点目录,或者该新的弹性虚拟机实例的持久数据点目录副本)读取一个持久数据点。在步骤403,判断对于先前弹性虚拟机实例,是否存在一个存储卷映射到该持久数据点,并且该持久数据点对于先前弹性虚拟机实例是否是启用的。在本发明的一个实施例中,可通过查询在上述步骤308中存储在映射关系表中的各弹性虚拟机实例的持久数据点与存储卷之间的映射关系,来判断对于先前弹性虚拟机实例是否存在一个存储卷映射到该持久数据点。在本发明的一实施例中,可通过查询所存储的先前弹性虚拟机实例的持久数据点目录副本中的该持久数据点的启用标志值(或其他数据结构中的该持久数据点或相应的功能模块是否启用的标志),来判断该持久数据点对于先前虚拟机实例是否是启用的。如果步骤403的判断为否,则执行步骤405。如果步骤403的判断为是,则执行步骤 404。在步骤404,将在步骤403中判断存在的存储卷附接到所发起的新的弹性虚拟机实例,并将该存储卷挂载到在该持久数据点中所定义的文件目录。在步骤405,判断用于新的弹性虚拟机实例的持久数据点目录中是否还存在其他持久数据点。如果该判断为是,则返回步骤402,从用于新的弹性虚拟机实例的持久数据点目录读取下一个持久数据点,并针对该下一个持久数据点,重新执行步骤403-405。如果该判断为否,则执行步骤406。在步骤406,为该新的虚拟机实例存储该持久数据点与该存储卷之间的映射关系,并存储持久数据点相应的启用标志值。例如,将该映射关系更新到前述映射关系表,以替换先前虚拟机实例的该持久数据点与该存储卷之间的映射关系,并且将相应的启用标志值存储在该新的虚拟机实例的持久数据点目录副本或其他数据结构中。在步骤407,在该新的弹性虚拟机实例中准备和启动的应用(修改应用配置以适应新的网络环境,启动应用等)。由于该步骤的内容与本发明无关,故不在此赘述。这样,应用就在新的虚拟机实例中运行起来。第(六)方面如果在虚拟机发起之后,根据拓扑需求或客户需求或任何其他需求,应用的某个已安装但被禁止的功能模块被启用,则根据持久数据点目录中的相关持久数据点中定义的参数创建、附接、格式化和挂载存储卷。本发明的装置109将为该虚拟机实例维护与该功能模块相关的持久数据点的启用标志的值为真。该启用标志值将覆盖主虚拟机映像的持久数据点目录中的持久数据点的默认的启用标志值。在本发明的一些实施例中,为该虚拟机实例生成和维护了持久数据点目录副本,这样,可以直接将该持久数据点目录副本中的与该功能相关的持久数据点的启用标志的值设置为真。在本发明的另一些实施例中,可以在为该虚拟机实例维护的其他数据结构中记录该功能模块已启用。图8具体示出了根据本发明的实施例的启用功能模块的流程。如图所示,开始启用弹性虚拟机实例中的一个应用的一个功能模块之后,在步骤501,在用于该弹性虚拟机实例的持久数据点目录中搜索用于该功能模块的持久数据点,从而获得包含用于该功能模块的所有持久数据点(一个功能模块可能有多个持久数据存储位置,因此可能有多个持久数据点)的一搜索列表。接着,在步骤502,从搜索列表中读取一个持久数据点。接着,在步骤503,判断该持久数据点是否已被启用(多个功能模块可能共享同一个存储位置,因而共享同一个持久数据点,因此,在该功能模块未启用时,其持久数据点有可能因共享该持久数据点的其他功能模块的启用而已被启用)。如果该判断为是,则执行步骤508。如果该判断为否,则执行步骤504。如果为该弹性虚拟机实例生成和维护持久数据点目录副本或其他数据结构,则可以在该持久数据点副本或其他数据结构中记录每个数据点是否被启用。这样,可通过查询该虚拟机实例的持久数据点目录副本或其他数据结构来判断所述持久数据点是否已被启用。接着,在步骤504,判断是否存在现有的存储卷映射到该持久数据点(如果该功能模块曾经启用和运行,但因虚拟机实例终止或其他原因被终止,则会存在现有的存储卷映射到该持久数据点;此外,如果共享该持久数据点的其他功能模块曾经运行,但已被终止,则也会存在现有的存储卷映射到该持久数据点)。可通过查询以上步骤308中所存储的映射关系表来判断是否存在现有的存储卷映射到该持久数据点。如果该判断为是,则执行步骤505。如果该判断为否,则执行步骤506。在步骤505,将现有的存储卷附接到该弹性虚拟机实例,如果尚未附接的话(如果该功能模块或共享该持久数据点的其他功能模块曾经运行,但已被终止,而该虚拟机实例未被终止,则现有的存储卷会已经附接到该虚拟机实例)。然后,执行步骤507。在步骤506,使用该持久数据点中定义的保留的存储空间大小创建一存储卷;将该存储卷附接到该弹性虚拟机实例;并使用该持久数据点中定义的文件系统格式格式化该存储卷。然后,执行步骤507。在步骤507,将该存储卷挂载到该持久数据点中定义的存储位置即文件目录,如果尚未挂载的话(如果该功能模块或共享该持久数据点的其他功能模块曾经运行,但已被终止,而该弹性虚拟机实例未被终止,则现有的存储卷会已挂载到该文件目录)。此外,在该弹性虚拟机实例的持久数据点目录副本中将该持久数据点的启用标志设置为真,或在为该虚拟机实例维护的其他数据结构中记录该功能已启用。接着,在步骤508,判断在所述搜索列表中是否还有其他持久数据点。如果该判断为是,则返回步骤502,针对下一个持久数据点,执行步骤502-508。如果该判断为否,则执行步骤509。在步骤509,启用该应用中的该功能模块,并在需要时重启应用以得到启用的功倉泛。这样,应用就带着新启用的功能运行起来。在本发明的一些实施例中,可以不包括上述在虚拟机发起之后,响应于应用的某个已安装但被禁止的功能模块被启用,根据持久数据点目录中的相关持久数据点中定义的参数创建、附接、格式化和挂载存储卷的过程。本发明既适用于简单的应用,例如企业资产管理服务云,其中一个虚拟机包含了所有组件;也适用于复杂的解决方案。本发明的解决方案的示例性说明下面以企业资产管理服务云应用为例详细描述根据本发明的特定实施例的解决方案的步骤(一)在将一应用安装到主虚拟机映像之前,使用元数据定义该应用的与功能模块关联的每个持久数据点。下面示出了该企业资产管理服务云应用的各持久数据点元数据定义<PersistentDataPoints application="Maximo SaaS">
<PersistentDataPoint name=" Maximo Instance Database"hasInitialData=,’true,’ enablement= "true">
<FunctionComponent>Base Service</FunctionComponent>
<Location>%MaximoInstanceDBLocation%</Location>
<ReservedSize>%ReservedSizeForMaximoInstanceDB%</Reser
vedSize>
<FileSystemFormat> %F ileSystemF o rmat %</F ileSystemF o rmat
权利要求
1.一种用于管理弹性虚拟机实例中的预安装应用的持久数据的方法,包括 响应于将应用预安装到主虚拟机映像中,获得应用的功能模块的持久数据点,所述持久数据点包括用于存储所述功能模块的持久数据的文件目录; 响应于从所述主虚拟机映像发起弹性虚拟机实例,创建存储卷,将所述存储卷附接到所述弹性虚拟机实例,并根据所述持久数据点将所述存储卷挂载到所述文件目录。
2.根据权利要求1的方法,还包括 如果在将应用预安装到主虚拟机映像后,所述文件目录中包含应用的初始数据,则备份所述初始数据,并清空所述文件目录;以及 在将所述存储卷挂载到所述文件目录后,将所备份的初始数据恢复到所述文件目录。
3.根据权利要求1的方法,还包括 记录所述持久数据点与所述存储卷之间的映射关系; 当所述弹性虚拟机实例终止后,响应于从所述主虚拟机映像发起另一个弹性虚拟机实例,执行以下操作 将所述存储卷附接到所述另一个弹性虚拟机实例;以及 根据所记录的所述持久数据点与所述存储卷之间的映射关系,将所述存储卷挂载到所述文件目录。
4.根据权利要求1的方法,其中,所述持久数据点还包括保留的存储空间大小和文件系统格式,且其中所述创建存储卷包括 创建大小为所述保留的存储空间大小的存储卷;以及 将所述存储卷格式化为所述文件系统格式。
5.根据权利要求2的方法,其中,所述持久数据点还包括 用于备份所述初始数据的命令;以及 用于恢复所述初始数据的命令。
6.根据权利要求1的方法,其中,所述持久数据点还包括启用标志,用于表示是否启用了应用的相应功能模块,且所述创建、附接和挂载存储卷是响应于判断所述启用标志的值为真执行的。
7.根据权利要求6的方法,还包括 在发起所述弹性虚拟机实例之后,响应于启用应用中已被禁止的功能模块,根据该功能模块的持久数据点创建存储卷,将该存储卷附接到所述弹性虚拟机实例,并将所述存储卷挂载到该持久数据点包括的文件目录。
8.根据权利要求1的方法,还包括 获得应用的功能模块的持久数据点的元数据定义;以及 响应于将应用预安装到主虚拟机映像中,根据用户的配置将应用的功能模块的持久数据点的元数据定义实例化,从而获得所述应用的功能模块的持久数据点。
9.根据权利要求1的方法,其中,该方法是在云管理系统中实现的。
10.一种用于管理弹性虚拟机实例中的预安装应用的持久数据的装置,包括 持久数据点获得模块,其被配置为响应于将应用预安装到主虚拟机映像中,获得应用的功能模块的持久数据点,所述持久数据点包括用于存储所述功能模块的持久数据的文件目录;存储卷管理器,其被配置为响应于从所述主虚拟机映像发起弹性虚拟机实例,创建存储卷,将所述存储卷附接到所述弹性虚拟机实例,并根据所述持久数据点将所述存储卷挂载到所述文件目录。
11.根据权利要求10的装置,还包括初始数据备份/恢复管理器,其被配置为 如果在将应用预安装到主虚拟机映像后,所述文件目录中包含应用的初始数据,则备份所述初始数据,并清空所述文件目录;以及 在将所述存储卷挂载到所述文件目录后,将所备份的初始数据恢复到所述文件目录。
12.根据权利要求10的装置,还包括映射关系记录器,其被配置为记录所述持久数据点与所述存储卷之间的映射关系,且其中, 所述存储卷管理器还被配置为 当所述弹性虚拟机实例终止后,从所述主虚拟机映像发起另一个弹性虚拟机实例; 将所述存储卷附接到所述另一个弹性虚拟机实例;以及 根据所记录的所述持久数据点与所述存储卷之间的映射关系,将所述存储卷挂载到所述文件目录。
13.根据权利要求10的装置,其中,所述持久数据点还包括保留的存储空间大小和文件系统格式,且其中所述存储卷管理器创建存储卷包括 创建大小为所述保留的存储空间大小的存储卷;以及 将所述存储卷格式化为所述文件系统格式。
14.根据权利要求11的装置,其中,所述持久数据点还包括 用于备份所述初始数据的命令;以及 用于恢复所述初始数据的命令。
15.根据权利要求10的装置,其中,所述持久数据点还包括启用标志,用于表示是否启用了应用的相应功能模块,且所述存储卷管理器创建、附接和挂载存储卷是响应于判断所述启用标志的值为真执行的。
16.根据权利要求15的装置,其中,所述存储卷管理器进一步被配置为 在发起所述弹性虚拟机实例之后,响应于启用应用中已被禁止的功能模块,根据该功能模块的持久数据点创建存储卷,将该存储卷附接到所述弹性虚拟机实例,并将所述存储卷挂载到该持久数据点包括的文件目录。
17.根据权利要求10的装置,还包括 持久数据点元数据定义获得模块,其被配置为获得应用的功能模块的持久数据点的元数据定义;且其中, 所述持久数据点获得模块进一步被配置为 响应于将应用预安装到主虚拟机映像中,根据用户的配置,将应用的功能模块的持久数据点的元数据定义实例化,从而获得所述应用的功能模块的持久数据点。
18.根据权利要求1的装置,其中,该装置是在云管理系统中实现的。
全文摘要
公开了一种用于管理弹性虚拟机实例中的预安装应用的持久数据的方法和装置,该方法包括响应于将应用预安装到主虚拟机映像中,获得应用的功能模块的持久数据点,所述持久数据点包括用于存储所述功能模块的持久数据的文件目录;响应于从所述主虚拟机映像发起弹性虚拟机实例,创建存储卷,将所述存储卷附接到所述弹性虚拟机实例,并根据所述持久数据点将所述存储卷挂载到所述文件目录。
文档编号G06F12/16GK103034453SQ20111029949
公开日2013年4月10日 申请日期2011年9月30日 优先权日2011年9月30日
发明者张霞, 史晓斌, 刘昕鹏, 黄允松 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1