将 WebSphere 应用程序迁移到 Azure 虚拟机

本指南介绍想要迁移现有 WebSphere 应用程序服务器(WAS)传统应用程序以在 Azure 虚拟机上运行时应注意的内容。 有关 Azure 市场 中可用的 WAS 传统解决方案的概述,请参阅在 Azure 上运行 IBM WebSphere 产品系列的解决方案是什么?

预迁移

若要确保迁移成功,请在开始之前完成以下各节中所述的评估和清点步骤。

定义“迁移完成”的含义

本指南和相应的Azure 市场产品/服务是加速将 WAS 传统工作负荷迁移到 Azure 的起点。 定义迁移工作的范围很重要。 例如,你是否要严格按要求从现有的基础结构“直接迁移”到 Azure 虚拟机? 如果答案为是,则在迁移过程中,你可能想要尝试使用一些“迁移加改进”措施。

考虑到本指南中详述的必要更改,最好是尽可能进行单纯的“直接迁移”。 定义“迁移完成”的含义,这样就可以知道自己何时到达了该里程碑。 到达“迁移完成”后,可以按照创建虚拟硬盘快照中所述,获取虚拟机快照。 验证是否可以从快照成功还原后,可以执行改进,而不必担心丢失迄今已实现的迁移进度。

确保目标是迁移工作的适当目标

成功将 WAS 应用程序迁移到 Azure 的第一步是选择最合适的迁移目标。

WAS 传统在 Azure 虚拟机上运行良好。 虚拟机(VM)目标是最简单的选择,因为它最类似于本地部署。 虚拟机的管理和部署体验类似于本地的。

另一个选项是通过将 WAS 传统工作负荷转换为应用程序容器来迁移到容器。 可以在 Azure Kubernetes 服务(AKS)和 Azure Red Hat OpenShift 上运行容器目标。 这种宽松的权衡是经济成本。

一般来说,与容器相比,基于 VM 的解决方案的每分钟成本更高。 虽然基于容器的解决方案的运行成本较低,但必须限制应用程序以适应容器业务流程平台的要求。

如果最大程度地减少更改是迁移工作最重要的因素,请考虑基于 VM 的迁移。 在这种情况下,请参阅将 WebSphere 应用程序迁移到 Azure 虚拟机

如果可以容忍将应用程序转换为在容器中运行以降低运行时成本,请考虑基于 AKS 或基于 Azure Red Hat OpenShift 的迁移。

对于基于 AKS 的迁移,可以开始使用免费层。 获取免费群集管理和仅支付消耗的虚拟机、关联的存储和网络资源的费用。 在这种情况下,请参阅将 WebSphere 应用程序迁移到Azure Kubernetes 服务

对于基于 Azure Red Hat OpenShift 的迁移,除了计算和基础结构成本外,应用程序节点还具有 OpenShift 许可证组件的其他成本。 此费用根据应用程序节点数和实例类型计费。 使用按需定价或预留实例,无论哪种情况最符合工作负荷和业务需求。 在这种情况下,请参阅 将 WebSphere 应用程序迁移到 Azure Red Hat OpenShift

Azure Red Hat OpenShift 文档中的操作指南涵盖了与迁移相关的一些方面。 有关操作指南的完整列表,请参阅 Azure Red Hat OpenShift 文档

确定预生成Azure 市场产品/服务是否是一个很好的起点

IBM 和 Microsoft 已合作将一组 Azure 解决方案模板引入Azure 市场,以提供一个坚实的起点,以便迁移到 Azure。 有关产品/服务列表,请参阅 在 Microsoft Azure 上运行 WebSphere 产品和 Liberty 系列,然后选择最符合现有部署的套餐。 可以在概述文章 中看到产品/服务列表:在 Azure 上运行 IBM WebSphere 产品系列的解决方案是什么?

如果现有产品/服务都不是一个很好的起点,则必须使用 Azure 虚拟机资源来重现部署。 可以在教程中找到分步指南:在 Azure 虚拟机上手动安装传统 IBM WebSphere 应用程序服务器网络部署。 有关详细信息,请参阅什么是 IaaS?

确定 WAS 传统版本是否兼容

现有的 WAS 传统版本必须与 IaaS 产品/服务中的版本兼容。 可以从 Azure VM上的 IBM WebSphere 应用程序服务器单实例和 Azure VM 上的 IBM WebSphere 应用程序服务器群集的概述页中找到版本信息。 如果现有的 WAS 传统版本与该版本不兼容,则必须使用 Azure IaaS 资源重现部署。 有关详细信息,请参阅什么是 IaaS?

清点服务器容量

记录当前生产服务器的硬件(内存、CPU、磁盘),以及平均和峰值请求计数和资源利用率。 此信息必须告知所选 VM 大小。 有关详细信息,请参阅云服务的大小

清点所有机密

在出现“配置即服务”技术(如 Azure Key Vault)之前,没有有关“机密”的明确定义的概念。 你只能使用一组不同的配置设置,这些设置可以有效地充当我们现在所称的“机密”。 对于 WAS 等应用服务器,这些机密位于许多不同的配置文件和配置文件存储中。 检查生产服务器上的所有属性和配置文件中是否有机密和密码。 还可以在应用程序中查找包含密码或凭据的配置文件。 WAS 将配置数据存储在目录的级联层次结构中的多个文档中。 大多数配置文档都有 XML 内容。 有关详细信息,请参阅配置文档Azure 密钥库基本概念

清点所有证书

记录用于公共 SSL 终结点的所有证书。 可以通过运行以下命令来查看生产服务器上的所有证书:

keytool -list -v -keystore <path to keystore>

有关详细信息,请参阅 SSL 中的 IBM 文档 证书管理

验证支持的 Java 版本是否正常运行

在 Azure 上使用 WAS 虚拟机需要特定版本的 Java,因此需要确认应用程序使用该受支持的版本正确运行。

IBM Java 8 附带 WAS9 分发版。 建议使用 IBM 提供的 Java JRE。 有关详细信息,请参阅 WebSphere 应用程序服务器传统 V9 中的 Java 标准版 8。

如果要切换到其他 Java SDK,请按照 IBM 文档 在 WebSphere 应用程序服务器中切换 Java SDK。

清点 JNDI 资源

清点所有 JNDI 资源。 例如,数据库等数据源可能具有关联的 JNDI 名称,该名称允许 JPA 正确地将 EntityManager 的实例绑定到特定数据库。 有关 JNDI 资源和数据库的详细信息,请参阅 IBM 文档中的 WebSphere 数据源 。 其他 JNDI 相关资源(如 JMS 消息代理)可能需要迁移或重新配置。 有关 JMS 配置的详细信息,请参阅 使用 JMS 资源

检查配置文件配置

WAS 中的主要配置单元是配置文件。 因此, resources.xml 文件包含大量配置,必须仔细考虑进行迁移。 该文件包括对存储在子目录中的更多 XML 文件的引用。 IBM 建议通常使用 IBM 控制台 来配置 WAS 的可管理对象和服务,并允许 WAS 维护 配置文件/配置文件名称 文件夹。 有关详细信息,请参阅 管理分布式操作系统和 IBM i 操作系统上的配置文件。

在应用程序中

检查deployment.xml文件和/或 WEB-INF/web.xml 文件。

确定是否使用了会话复制

如果应用程序依赖于会话副本 (replica),则可以使用以下选项:

  • 对于 HTTP 会话,根据会话管理级别,可以使用内存或数据库来收集会话数据。
  • 对于 分布式会话,可以使用数据库会话持久性在数据库中保存会话。
  • 对于动态缓存,可以在内存到内存副本 (replica)或数据库中管理会话数据。
  • 重构应用程序,使用数据库进行会话管理。
  • 重构应用程序,将 Azure Redis 服务的会话外部化。 有关详细信息,请参阅 Azure Cache for Redis

对于所有这些选项,最好掌握 WAS 如何执行 HTTP 会话状态复制。 有关详细信息,请参阅 IBM 文档中管理员注册会话豆类

记录数据源

如果应用程序使用任何数据库,则需捕获以下信息:

  • 数据源名称是什么?
  • 连接池配置是什么?
  • 在哪里可以找到 JDBC 驱动程序 JAR 文件?

有关 WAS 中的 JDBC 驱动程序的详细信息,请参阅 将 JDBC 驱动程序与 WebSphere 应用程序服务器配合使用。

确定是否已自定义 WAS

确定进行了以下哪些自定义,并捕获已完成的操作。

  • 是否更改了启动脚本? 此类脚本包括 wsadmin管理员Control、管理员Config管理员App管理员Task
  • 是否有任何特定参数传递到 JVM?
  • 是否存在添加到服务器 classpath 中的 JAR?
  • OS 级设施(例如 systemd 用于导致 WAS 组件在服务器重启后自动启动)吗?

需要考虑迁移注意事项,具体取决于这些问题的解答。

确定是否需要连接到本地

如果应用程序需要访问任何本地服务,则需预配 Azure 的某个连接服务。 有关详细信息,请参阅选择用于将本地网络连接到 Azure 的解决方案。 或者,你需要重构应用程序,以便使用本地资源公开的公开可用的 API。

确定 Java 消息服务 (JMS) 队列或主题是否正在使用中

如果应用程序使用的是 JMS 队列或主题,则需要将它们迁移到外部托管的 JMS 服务器。 使用 JMS 的一种策略是使用Azure 服务总线和高级消息队列协议。 有关详细信息,请参阅将 JMS 与 Azure 服务总线和 AMQP 1.0 配合使用

如果已配置 JMS 永久性存储,则必须捕获其配置,并在迁移后应用它。

如果使用 IBM MQ,可以将此软件迁移到 Azure 虚拟机,并按原样使用它。

Microsoft 有一个解决方案,用于将 IBM MQ 与逻辑应用集成。 有关详细信息,请参阅从 Azure 逻辑应用中的工作流连接到 IBM MQ 服务器

确定是否使用自己的自定义创建的共享 Java EE 库

如果使用共享 Java EE 库功能,则可使用两个选项:

  • 重构应用程序代码以删除库上的所有依赖项,并改将功能直接合并到应用程序中。
  • 将库添加到服务器 classpath。

确定是否使用了 OSGi 捆绑

如果使用了添加到 WAS 的 OSGi 捆绑包,则需要将等效的 JAR 文件直接添加到 Web 应用程序。

确定应用程序是否包含特定于 OS 的代码

如果应用程序包含的代码有主机 OS 的依赖项,则需重构该代码,删除那些依赖项。 例如,可能需要将文件系统路径中使用的 /\ 替换为 File.SeparatorPaths.get

确定 IBM 集成总线是否正在使用

如果应用程序使用的是 IBM 集成总线,则需要捕获 IBM 集成总线的配置方式。 有关详细信息,请参阅 IBM 集成总线文档

确定应用程序是否由多个 WAR 组成

如果应用程序由多个 WAR 组成,则应将这些 WAR 中的每一个都视为单独的应用程序,并通过本指南了解这其中的每个应用程序。

确定应用程序是否打包为 EAR

如果应用程序打包为 EAR 文件,请务必检查 application.xmlibm-application-bnd.xmiibm-application-ext.xmi 文件并捕获其配置。 有关详细信息,请参阅 在 WebSphere 上生成企业存档 (EAR) 包。

确定在生产服务器上运行的所有外部进程和守护程序

如果在应用程序服务器外运行任何进程(如监视守护程序),则需消除它们或将它们迁移到其他位置。

确定是否使用以及如何使用文件系统

在持久性、启动和关闭方面,VM 文件系统与本地文件系统的操作方式相同。 尽管如此,仍然必须了解文件系统需求,确保 VM 有足够的存储大小和性能。

只读静态内容

如果应用程序当前提供静态内容,则需为其提供一个备用位置。 可能需要考虑将静态内容移到 Azure Blob 存储,并添加 Azure CDN,方便用户在全球范围内快速下载。 有关详细信息,请参阅 Azure 存储中的静态网站托管快速入门:将 Azure 存储帐户与 Azure CDN 集成。 还可以直接将静态内容部署到 Azure Spring Apps Enterprise 计划中的应用。 有关详细信息,请参阅部署 Web 静态文件

动态发布的静态内容

如果应用程序允许那些通过应用程序上传/生成但在创建后不可变的静态内容,则可将上述 Azure Blob 存储和 Azure CDN 与 Azure 函数配合使用,以便处理上传和 CDN 刷新操作。 我们提供了一个示例实现,用于通过 Azure Functions 进行静态内容的上传和 CDN 预加载操作。 还可以直接将静态内容部署到 Azure Spring Apps Enterprise 计划中的应用。 有关详细信息,请参阅部署 Web 静态文件

确定网络拓扑

当前Azure 市场套餐集是迁移的起点。 如果产品/服务未涵盖需要迁移的体系结构的各个方面,则需要捕获现有部署的网络拓扑。 然后,即使在使用解决方案模板之一建立基本产品/服务之后,也需要在 Azure 中重现该网络拓扑。

网络拓扑是一个广泛的主题,但以下参考可以指导迁移工作:

考虑使用 JCA 适配器和资源适配器

如果现有应用程序使用 JCA 适配器或其他资源适配器连接到其他企业系统,请确保将这些项目的配置应用到 Azure 虚拟机中运行的 WAS。 有关详细信息,请参阅 IBM 文档中的关系资源适配器和 JCA

用于身份验证和授权的帐户

大多数应用程序都有某种身份验证和授权。 如果使用 OpenID 进行身份验证,则可以使用 Microsoft Entra ID 配置 OpenID 连接身份验证。 有关详细信息,请参阅 OpenID 连接使用 Microsoft Entra ID 进行身份验证。

确定是否使用了 WAS 聚类分析

最有可能的是,已将应用程序部署到多个 WAS 服务器上以实现高可用性。 可以直接将这些群集从本地安装迁移到 Azure 虚拟机中运行的 WAS。 有关详细信息,请参阅 IBM 文档中的 WebSphere 应用程序服务器网络部署

用于满足负载均衡要求的帐户

负载均衡是将 WAS 群集迁移到 Azure 的重要组成部分。 最简单的解决方案是使用 IBM WebSphere 应用程序服务器群集Azure 市场产品/服务中提供的Azure 应用程序网关IBM HTTP Server 的内置支持。

有关与其他 Azure 负载均衡解决方案相比Azure 应用程序网关功能摘要,请参阅负载均衡选项

确定是否使用了 Java EE 应用程序客户端功能

如果应用程序使用 Java EE 应用程序客户端功能,则在迁移到 Azure 虚拟机后,它应继续工作,没有更改。 有关详细信息,请参阅 Using Java EE Client Application Modules(使用 Java EE 客户端应用程序模块)。

迁移

在 Azure 虚拟机 产品/服务上选择 WAS 传统

以下产品/服务适用于 Azure 虚拟机上的 WAS。

在产品/服务的部署过程中,系统会要求你为 WAS 节点选择虚拟机大小。 在选择 VM 大小时,请务必考虑有关大小调整的所有方面(内存、处理器、磁盘)。 有关详细信息,请参阅云服务(经典)的大小。

预配套餐

选择要开始使用的产品/服务后,按照 Azure 虚拟机上的部署 WebSphere 应用程序服务器(传统)群集中的说明预配该套餐。

迁移配置文件

预配产品/服务后,可以检查配置文件配置。 有关详细信息,请参阅 IBM 文档中的配置文件概念

连接数据库

迁移配置文件后,可以按照 IBM 文档中配置 WebSphere 应用程序服务器数据源中的说明连接数据库。

考虑密钥存储

必须考虑应用程序所用的任何 SSL 密钥存储的迁移。 有关详细信息,请参阅 IBM 文档中 SSL 的密钥存储配置。

连接 JMS 源

连接数据库后,可以按照 IBM 文档中的“在 IBM WebSphere 应用程序服务器中设置 JMS”中的说明配置 JMS。

用于身份验证和授权的帐户

大多数应用程序都有某种身份验证和授权。 如果使用 OpenID 进行身份验证,则可以使用 Microsoft Entra ID 配置 OpenID 连接身份验证。 有关详细信息,请参阅 OpenID 连接使用 Microsoft Entra ID 进行身份验证。

考虑日志记录

可以按照 IBM 文档中使用 Elastic Stack 分析 WebSphere 应用程序服务器日志的说明 配置 Elastic Stack 。 Azure 为 Elastic 提供支持。 有关详细信息,请参阅 什么是 Elastic 与 Azure 的集成? 可以结合这两个资源中的知识来实现 VM 上的 WAS 的 Azure 优化日志记录解决方案。

迁移应用程序

用于将开发团队的应用程序部署到测试、过渡和生产服务器的技术因情况的不同而差异很大。 在某些情况下,有一个高度演变的 CI/CD 平台会导致应用程序部署到 WebSphere 应用程序服务器。 在其他情况下,该过程可能需要更多的手动操作。 使用 Azure 虚拟机将 WAS 传统应用程序迁移到云的一个好处是,现有流程可以继续工作。

必须配置套餐预配的网络安全组,以允许从 CI/CD 管道或手动部署系统进行访问。 有关详细信息,请参阅网络安全组

测试

必须针对应用程序配置任何容器内测试,以访问在 Azure 中运行的新服务器。 如果涉及 CI/CD,则必须确保所需的网络安全规则允许你的测试访问已部署到 Azure 的应用程序。 有关详细信息,请参阅网络安全组

迁移后

实现在预迁移步骤中定义的迁移目标后,请执行某些端到端验收测试,验证一切是否按预期工作。 有关某些潜在的迁移后增强功能的指导,请参阅以下建议: