虚拟系统模式将复杂应用程序和平台的部署完全自动化,并充分利用最佳实践的优势,因此虚拟系统模式开发中最重要的技术角色是应用程序部署者的角色。
应用程序部署者是以下内容的主题专家:
- 确定应用程序的先决条件(包括硬件和软件)。
- 从高可用性、可扩展性、故障转移和容错的角度了解解决方案架构。
- 应用针对应用程序部署的最佳实践,并了解安装和配置的瓶颈。
- 安装应用程序的所有组件。
- 为应用程序的安装编写脚本(使用 shell、Jython 和 DDL 脚本)。
- 管理作为先决条件的中间件和软件产品。
- 在应用程序上运行基本的功能测试。
理想的情况下,应用程序部署者在安装、部署和配置方面有着丰富的经验,可以识别关键手动任务的,将这些构建到模式行业最佳实践中。例如,如果大多数客户或用户在 WebSphere® 中运行一个特定的 Java™ 虚拟机 (JVM) 堆大小,那么这个设置鐠葞建到模式中。
因此,让我们来看看有关规划和设计虚拟系统模式的过程的一些建议;我们会尽量对每一点都提供有用的解释。我们将讨论的主题包括:
- 虚拟系统模式 (VSP) 设计中的关键概念,如弹性、拓扑、编排(orchestration)和安全性。
- 部署虚拟系统模式时的一些重要技术方面:
- 识别运行时并将其映射到模式组件。
- 将本机组件纳入模式。
- 重用现有的资产,如脚本和工具。
- 调整虚拟磁盘的大小。
- 有三种方式可以扩展 IBM PureApplication System 中提供的基础镜像目录的功能:利用脚本包,内置扩展/捕获工具,以及镜像构建和组成工具 (Image Construction and Composition Tool, ICON)。
- 在模式的开发和测试的迭代方法中的最佳实践。
在设计和开发虚拟系统模式时,会涉及这些概念:
- 弹性
- 拓扑
- 编排 (Orchestration)
- 安全性
让我们更详细地讨论每一点。
在云环境中的弹性涉及通过动态分配资源实现应用程序的自动水平和垂直缩放。在一个虚拟系统模式中,可以使用 IBM PureApplication System 中的 Intelligent Management Pack (IMP) 特性,使 WebSphere Application Server 环境变得有弹性。
根据服务水平协议或通过策略描述的性能指标,IMP 特性可以在虚拟系统模式中按需要增大或缩小 WebSphere Application Server 单元。我们举个例子来说明 IMP 如何实现水平缩放,当它在 WebSphere Application Server 单元中检测到一个可能耗尽当前 CPU 容量的工作负载峰值时,它会自动配置一个新的 WAS 节点,以满足工作负载的需求。此外,IMP 有足够的灵活性,可以在配置时实现垂直缩放。为了满足响应时间的 SLA 以防止性能降级,IMP 可以在 WebSphere 集群中触发启动新的 JVM。
如果您的应用程序要求弹性,那么请考虑在IBM PureApplication System 中使用增强了 IMP 的 WebSphere Application Server 环境。
图 1. 在 VSP 中选择支持 IMP 的 WebSphere 镜像
如果已在当前环境中应用了现有的拓扑最佳实践,这些也都将与虚拟系统模式相关。
例如,如果您使用安装了 8 个 JVM 和内存中 (in-memory) 会话复制的一个集群 WebSphere Application Server 作为用于生产的最佳实践,那么该实践同样适用于生产方面的虚拟系统模式。
对于开发测试方面的虚拟系统模式,您可以选择单一服务器配置,并在 JVM 上选择较小的堆大小。
作为虚拟系统模式设计的一部分,创建拓扑的关系图很有帮助,可以在关系图中列出每个产品(以及每个产品的虚拟机数量),并反映每个虚拟机之间的关系;例如,如果 WebSphere Application Server 需要连接到 MQ 服务器,那么这种通信应反映在拓扑关系图上。
拓扑被确定为虚拟系统模式后,下一个逻辑步骤是列出在每个虚拟机中所需的操作,以安排该系统的启动。并且应确定每个操作的顺序。
例如,如果您的应用程序的安装流程要求启动数据库,并在适当的地方使用某种模式运行它,那么在应用程序安装进程开始前先安排数据库的安装是有意义的。
为了支持这种编排,虚拟系统模式允许设计者指定启动虚拟机的顺序,以及在这些虚拟机中执行自动化脚本的顺序。
在一个扩展版本的拓扑关系图中列出这些编排任务(包括它们的顺序)是有帮助的,因为这将成为虚拟系统模式开发人员的蓝图。
在设计虚拟系统模式时,LDAP 支持是其中一个要考虑的与安全相关的主题。通常,应用程序单独使用专用的 LDAP 服务器;大多数应用程序将连接到现有的 LDAP 服务器(如企业 LDAP 目录)获得受保护资源的授权访问。在这种情况下,虚拟系统模式中不包含 LDAP 服务器组件。
从 WebSphere Application Server 的角度来看,可以通过脚本包捕获虚拟系统模式中现有 LDAP 服务器的连接,该脚本包提取 LDAP服务器信息(主机、用户/密码等)作为输入参数。该脚本包将通过 Jython 脚本在 WebSphere Application Server 中自动化 LDAP 连接的配置,从而减轻虚拟系统模式用户进行手工配置的工作。
如果应用程序需要一个专用的 LDAP 服务器,那么可以使用在 IBM PureApplication System 中的 Web application Virtual Application Pattern 先启动一个新的 Tivoli® Directory Server 实例,然后在虚拟系统模式中的 WebSphere 实例可以连接到新启动的 Tivoli Directory Server 的 LDAP 服务器,在通过新的 Tivoli Directory Server 配置 WebSphere Application Server 时,可以使用虚拟系统模式中的脚本包。
图 6. 将 VSP 中的一个 WAS 实例连接到由虚拟应用程序模式启动的 TDS 服务器
在某些组织中,重要的主题知识可能分散在多个角色中,可能需要更广泛的技术专家参与,如:
- 应用程序架构师:如果在虚拟系统模式创建中要执行一个产品版本迁移,就需要这个角色。例如,如果通过迁移到一个虚拟系统模式将应用程序服务器的版本从一个级别升级到另一个级别,那么应用程序架构师可能也需要对潜在的代码迁移提供输入。
- 应用程序测试人员:如果应用程序需要复杂功能和/或性能测试,而这些测试对应用程序部署人员而言是未知的,那么在虚拟系统模式中部署该应用程序后,测试人员可能需要参与验证应用程序的正常运行。
- 销售工程师和产品经理:对客户在安装、配置、生命周期管理和缩放方面的难题具有深入洞察力的员工,可以向虚拟系统模式设计提供有价值的输入。例如,产品经理可能会注意到,一个虚拟系统模式可能将为期 10 天的安装/配置周期缩短为 20 分钟,从而改善产品上市时间或实现价值的时间。销售工程师可能指出,如果虚拟系统模式可以在几分钟(而不是几小时/几天)内为顾客启动一个 POC 环境,他可以降低平均销售周期长度,并向客户展示产品的易用性。
推荐的最佳实践是在最初的会议中使用这些 “资源”,按照设计收集输入信息,并在前期发现潜在的问题。随着项目的向前推进,让主要的应用程序部署人员联系扩展团队,因为有可能在后期需要他们的帮助。
与任何项目一样,非技术性的角色也参与虚拟系统模式的开发,如项目发起人和项目经理的角色。然而,对这些角色的描述已超出本文的范围。
您一定会希望识别各种运行时,以便有效地将它们映射到虚拟系统模式组件。让我们来看看这些流程。
在虚拟系统模式设计中的第一步,是识别托管目标应用程序所需要的所有运行时组件(包括准确的版本号)。这通常包括:
- 操作系统,包括扩展,例如 Linux® 上特定的 RPM。
- Web 服务器。
- 应用程序服务器。
- 数据库。
- 业务流程服务器。
- 消息和连接性组件,如 MQ。
- 自定义中间件组件,如一个自定义 C++ 应用程序服务器。
要检查的第一种运行时是操作系统;确保在 IBM PureApplication System 上支持它。
确认支持所需的操作系统后,映射就可以开始:
- IBM 中间件组件应该被映射到 IBM PureApplication System 自带的中间件产品的虚拟机管理程序版本。例如,如果 Red Hat Linux 上的 WebSphere Application Server V7 是其中一个运行时组件,那么它映射到 IBM PureApplication System 自带的 WebSphere Application Server V7.X hypervisor edition for Red Hat Linux 镜像。
- 如果与 IBM PureApplication System 镜像目录中的 IBM 产品的版本号不存在精确匹配,那么将需要执行一个评估,看看应用程序是否可以在产品的较新版本上运行。例如,如果应用程序在 WebSphere Application Server V7.0.0.17 上运行,而 IBM PureApplication System 中的 WebSphere Application Server 镜像是 V7.0.0.19,就需要评估该应用程序是否可以在 WebSphere Application Server 的较新版本上运行。
- 如果应用程序无法在 IBM PureApplication System 中的 IBM 产品版本级别上运行,或者如果在 IBM PureApplication System 镜像目录中不存在 IBM 产品的虚拟机管理程序版本,那么该系统提供了可创建完全定制的虚拟镜像的灵活性。
图 7. 扩展和捕获目录中的基础镜像
- 自定义镜像:可以通过 IBM PureApplication System 中的 扩展/捕获功能 或通过 ICON 工具 创建产品的自定义镜像。在此方法中,操作系统的虚拟机管理程序核心映象被当作一个基础,然后在这个操作系统核心镜像上安装产品。然后,会将这个自定镜像捕获回 IBM PureApplication System,将它用于可重复的部署。
- 自定义镜像的支持考虑因素:在创建 IBM 中间件产品的自定义镜像之前,请咨询 IBM 技术支持,以确保可以支持该产品的这种配置。
- 如果虚拟系统模式组件映射到非 IBM 产品,那么我们刚才所介绍的自定义镜像方法可用于将非 IBM 产品包括在虚拟系统模式中。
图 8. 将拓扑中的产品映射到 VSP 中的组件
本机组件是与操作系统有关的产品或运行时。例如,一个用 C++ 编写的自定义服务器可以被视为本机组件,因为它可能已被编译为可在某个特定的操作系统或架构上运行。
首要的一点是,要确保本机组件与 IBM PureApplication System 上的目标虚拟机管理程序版本的操作系统兼容。
可以通过一个 脚本包、扩展/捕获 或 ICON 工具方法 将本机组件带入虚拟系统模式。
虚拟系统模式旨在最大限度地重用客户在其基础架构和平台中已作出的现有投资。自动化应用程序的安装和配置的脚本会是在虚拟系统模式开发中可重用的关键资产。
例如,如果您有一个的 Jython 脚本,可用它来创建 WebSphere Application Server 集群,配置数据源/队列定义,并安装一个 EAR 文件,那么您可以很容易地在虚拟系统模式环境中重用这样的脚本,用它来安排您的应用程序的启动。这种情况同样适用于创建架构并用初始数据填充表的 DB2® DDL 或 SQL 文件;在虚拟系统模式中,也可以轻松地将这些脚本应用于 DB2 组件。
此外,如果虚拟系统模式中的产品在 IBM PureApplication System 中不存在虚拟机管理程序镜像,那么这些产品的任何现有自动化工具在虚拟系统模式中都将非常有用。例如,第三方产品的静默安装工具(而不是 GUI 驱动的安装程序)可以在虚拟系统模式中重用,实现非 IBM 产品的启动自动化。
虚拟机管理程序版本镜像的默认配置与特定的磁盘大小配套。例如,WebSphere Application Server 的配置文件被放置在一个 2GB 的虚拟磁盘,并且 DB2 数据虚拟磁盘的默认大小是 10GB。
如果应用程序需要不同的磁盘大小,那么您将需要使用更大的虚拟磁盘 扩展/捕获 在 IBM PureApplication System 目录中各个产品的镜像。
还应该制定一个战略,清理或滚动可能会导致虚拟磁盘填满的日志文件和临时文件。
如果虚拟系统模式中的产品在 IBM PureApplication System 中不存在虚拟机管理程序镜像(这些可能是非 IBM 的第三方产品,或不存在相应虚拟机管理程序镜像版本的 IBM 产品),那么有三种方法可以在虚拟系统模式中捕获这样的产品/组件:
- 使用脚本包。
- 使用扩展/捕获方法。
- 使用 Image Construction and Composition Tool (ICON)。
脚本包可以使现有的或新的脚本在由虚拟系统模式配置的虚拟机上运行。他们被称为 “包” 的原因是,用户将一个 ZIP 或 TAR 文件上传到一个设备,该设备可以包含脚本和相关的二进制文件,以及该脚本需要据其执行的文件。例如,如果一个脚本包需要执行一个自定义的 Java 程序,用户可以上传一个 ZIP 文件,其中包含一个 JAR 文件,以及调用该 JAR 文件内的 Java 代码的 shell 脚本。
此外,脚本包可以访问内置的环境变量,使它们更了解作为其运行环境的云。例如,WebSphere Application Server VM 中的脚本包可以在部署时查找云中的一个 DB2 VM 的主机名(这也是同一个虚拟系统模式的一部分)。
因此,脚本包也可以被用来自动化第三方组件在 IBM PureApplication System 虚拟机管理程序镜像上的安装和配置。
至于选择什么样的虚拟机管理程序镜像来安装第三方产品的问题,要在 Core OS 镜像和模式中已存在的任何其他虚拟机管理程序镜像之间作出选择。为了正确回答这个问题,需要考虑若干因素。
如果您的第三方产品可以放在作为虚拟系统模式的一部分的同一个镜像上,那么操作更简单,只需在现有镜像上安装产品。举例来说,如果在虚拟系统模式中已经有一个 WebSphere Application Server 镜像,并且第三方产品可以与 WebSphere Application Server 共处,那么操作更简单,只需将脚本包添加到 WebSphere Application Server VM。
但是,如果产品需要自己的专用虚拟机,那么就需要在虚拟系统模式中使用 Core OS 镜像,并将脚本包添加到它上面。Core OS 镜像是一个空白的虚拟机管理程序镜像,它上面只安装了一个操作系统。像其他常规 IBM 产品的虚拟机一样,这个 Core OS 镜像的虚拟机将作为模式的一部分启动,被添加到该虚拟机的脚本包将被执行,以安装、配置和启动第三方产品。
因此,如果第三方产品的二进制文件不是非常大(在写这篇文章时,从 IBM PureApplication System GUI 上传的脚本包大小被限制为 2GB),并且如果您的第三方产品的安装/配置不是很复杂,可以用 shell 脚本实现安装/配置的自动化,这个方法将会很适合。
请注意,大于 2GB 的脚本包可以通过部署工具的命令行界面上传。如果使用脚本包来打包大文件或产品的二进制文件,那么脚本的最佳实践是访问网络文件系统或存储大文件的中央存储库。
虽然脚本包允许在部署虚拟系统模式时自定义虚拟机管理程序镜像(通过脚本),但扩展/捕获方法可以在虚拟系统模式被部署之前自定义虚拟机,并使自定义虚拟机成为 IBM PureApplication System 目录的一部分。
如果您想为所有模式中的虚拟机设置标准基线,扩展/捕获会是做到这一点的一个好方法。例如,如果 IBM PureApplication System 中的 WebSphere Application Server 虚拟机管理程序镜像配置文件目录的默认磁盘大小不符合您的要求,您希望 WebSphere Application Server 配置文件使用更大的磁盘,那么您可以扩展目录中的 WebSphere Application Server 镜像,并向 WebSphere Application Server 配置文件目录分配更多磁盘空间。上述原则同样适用于您希望在虚拟机上执行的任何其他标准化,比如让特定的 Linux RPM 出现在所有模式中的某些虚拟机上。
此外,扩展/捕获方法还可以用于在 Core OS 或现有的 IBM 产品虚拟机管理程序镜像上安装第三方产品。在扩展/捕获方法中,要扩展的镜像首先被部署到云中,然后在为该镜像配置的虚拟机上执行手动定制(如第三方产品安装)。一旦完成定制后,已部署虚拟机的状态就会捕获到目录中,并会使用一个新的逻辑名称。然后,该定制镜像可在任何虚拟系统模式中使用。
若产品的安装和/或配置无法通过脚本实现,扩展/捕获方法对于脚本包是更可取的方法(适用于第三方产品)。例如,如果您的产品是只能通过一个需要人为干预的 GUI 进行安装,那么扩展/捕获方法就是一个不错的选择。此外,在您希望在一个虚拟系统模式中快速安装产品,并且目前还没有资源创建脚本实现自动安装的情况下,那么这可能也是一个较好的方法。
此外,如果您的第三方产品的二进制文件非常大(大于 2GB),那么扩展/捕获方法对于脚本包是更可取的方法。
您会注意到,脚本包可以防止所谓的 “镜像蔓延”,它们使您可以将不同的 “风格” 添加到基础镜像。如果没有脚本包,即使只是配置略有不同的一个基础镜像,仍然需要您执行一次扩展/捕获流程,这将导致目录中有大量镜像。
扩展/捕获方法也有一些挑战。
首先,用户在所捕获的虚拟机上执行的定制是手动的,因此它是不容易重复的,除非对它进行了彻底的记录。例如,如果您支持 Red Hat 和SuSE Linux,那么您将必须对两种风格的 Linux 执行两次这种定制。同样,如果您想完全升级到一个新版本的虚拟机管理程序镜像,您将不得不重复这个手动定制过程。
第二,请记住,定制的镜像的某些属性是动态的;它们在每次部署时都会改变。例如,云中的某个镜像的每个实例都有一个动态分配的主机名或 IP 地址。如果在镜像上配置的第三方产品需要这种动态信息,相关的脚本包(在镜像激活时运行)将被用于更新镜像中的这些信息。
可以使用 ICON 工具解决其中的一些挑战。
使用 Image Construction and Composition Tool
Image Construction and Composition Tool (ICON) 是一个 IBM PureApplication System 自带的工具,它支持基础虚拟镜像的重复定制。上文解释的扩展/捕获原则也适用于 ICON,但有一个重要区别:ICON 通过一个被称为 bundle 的概念来实现镜像的模块化定制,这意味着使用 ICON 时,会记录镜像的定制本身,并且这些镜像是可重复的。
ICON 中的 bundle ,代表软件以及安装/配置该软件所需要的配置脚本, bundle 在基础虚拟机管理程序镜像上运行。配置脚本作为镜像激活的一部分执行,因此能够了解它们正在运行的云环境(如动态提取虚拟机的主机名)。在 ICON 中,多个 bundle 可以被添加到一个镜像。并且 bundle 可以在不同的镜像中重用。例如,“产品 X” 的 bundle 可以用来定制一个 Red Hat 或 SUSE 映象。
同样,如果出现较新版本的基础镜像,并且需要进行定制,现有的 bundle 能够以自动化和可重复的方式再次在新的基础镜像上运行,从而减少了定制虚拟镜像的维护负担。
因此,虽然 ICON 需要更大的前期投资,但如果涉及多个操作系统支持,如果镜像定制的可重复性是一个关注点,或者镜像需要频繁升级,那么在 IBM PureApplication System 中它将优于基本的扩展/捕获方法。
工具 ... | ... 最适合于 ... |
---|---|
脚本包 | 占用较少资源的产品的安装 不要求人工干预的静默安装选项的产品 安装后的定制步骤 拓扑的顺序编排 |
扩展/捕获 | GUI 驱动的安装进程,没有静默安装选项 占用较多资源的产品的安装 更快的大型拓扑部署时间 |
ICON | 简化已导入 IBM PureApplication System 的自定义虚拟镜像的创建 复杂的非 IBM 产品的安装 |
最后,让我们看看开发和测试虚拟系统模式的总体思路,这也适用于大多数 IT 开发工作。
通过“大爆炸式采用” 方法来开发虚拟系统模式是非常有诱惑力的,在这种方法中,您尝试在第一次运行中就自动化虚拟系统模式中每个组件的启动和配置。但这种方法是有风险的,因为它可能会延迟发现在新环境中运行应用程序所带来的不可预见的挑战。
如果您刚好要借助虚拟系统模式的方法来升级到较新的产品或不同的产品版本,将特别容易发生这种情况。例如,您可能会发现,应用程序需要进行一些调整才能在不同的产品版本上工作。或者会发现,在虚拟机管理程序镜像中,第三方组件在特定版本的操作系统上无法正常运行。
为了防止过晚发现此类问题,最好是采取迭代的方法进行虚拟系统模式开发。通过手动试运行所有您希望通过脚本包实现自动化的任务,可以做到这一点:
- 不使用脚本包,将拓扑中的所有虚拟机部署到云中。
- 如果您已经有现成的脚本可以在虚拟机上执行配置任务,通过将它们直接上传到虚拟机并手工调用它们来手动运行它们。如果您还没有脚本,那么手动执行所有任务(通过 GUI 或命令行),并记录您所发现的与原始虚拟系统模式的编排步骤之间的差异。
- 配置好所有虚拟机,并手动启动鐠用程序后,在环境上运行一些基本的测试,以验证应用程序。
- 一旦您验证了应用程序在该环境中可正常工作,您就可以开始创建脚本,自动化您所执行的所有手动步骤。
- 如果您有现成的脚本,那么您需要做的只是将它们添加到脚本包。不过,如果您没有现成的脚本,那么您可以先在您手动配置的虚拟机上迭代开发脚本。
- 此外,也可以使用迭代方法进行脚本包测试。 脚本包可以被指定为自动运行(在虚拟机启动或关闭时)或通过工作负载部署 GUI 手动运行。
- 从 GUI 手动运行它们的好处是,在每次调用时都可以提取脚本包的更新。因此,这让您可以迭代地测试脚本包,而无需每次修改脚本都重新部署整个虚拟系统模式。
【编辑推荐】