将 JBoss EAP 应用程序迁移到 Azure VM 上的 JBoss EAP

本指南介绍想要迁移现有 JBoss EAP 应用程序以在 Azure VM 中的 JBoss EAP 上运行时应注意的内容。

预迁移

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

定义“迁移完成”的含义

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

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

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

Red Hat 和 Microsoft 已合作将一组 Azure 解决方案模板引入Azure 市场,以提供一个坚实的起点,以便迁移到 Azure。 可以在 Azure 上的 Red Hat JBoss EAP 的 Azure 虚拟机 部分中的 JBoss EAP 中查看产品/服务列表。

若要了解预生成的Azure 市场产品/服务,请参阅快速入门:使用 Azure 门户 在 Azure VM 上部署 JBoss EAP 服务器。

如果现有产品/服务都不是一个很好的起点,则必须使用 Azure 虚拟机中可用的资源来重现部署。 有关详细信息,请参阅什么是 IaaS?

确定 JBoss EAP 版本是否兼容

现有的 JBoss EAP 版本必须与基础结构即服务(IaaS)产品/服务中的版本兼容。 产品/服务的Azure 门户页面显示哪些 JBoss EAP 版本可用。 有关详细信息,请参阅 Azure 门户 上 VM 上的 JBoss EAP 群集。 如果现有的 JBoss EAP 版本与产品/服务中提供的版本不兼容,则必须使用 Azure IaaS 资源来重现部署。 有关详细信息,请参阅什么是 IaaS?

确保拥有所需的许可证

使用预生成的Azure 市场产品/服务时,必须为所有 JBoss EAP 服务器提供 Red Hat 的当前许可证。 将它们移动到 Azure,可以在以下部署选项之间进行选择,以满足你的需求:

  • 在 Red Hat Enterprise Linux 即用即付虚拟机上部署。 此选项称为 PAYG
  • 通过 Red Hat 云访问 计划将 Red Hat JBoss EAP 和 Red Hat Enterprise Linux 订阅移动到 Azure。 此选项称为 BYOS

在这两个选项中,对于许可证可移植性,系统会要求你从 Red Hat 获取 池 ID 。 在试用产品/服务之前,请确保你手头有此 ID。

预生成的Azure 市场产品/服务包括对 Red Hat Satellite 的支持,用于许可证管理。 有关 Red Hat Satellite 的概述,请参阅 Red Hat Satellite

注意

如果你没有 EAP 权利,可以通过适用于个人的 Red Hat 开发人员订阅注册免费的开发人员订阅。 记下用作预生成Azure 市场产品/服务中 RHSM 用户名和 RHSM 密码的帐户详细信息

有关发现池 ID 的步骤,请参阅快速入门中的先决条件部分:使用 Azure 门户 在 Azure 虚拟机上部署 JBoss EAP 服务器。

清点服务器容量

记录当前生产服务器的硬件(内存、CPU、磁盘)、平均值和峰值请求计数,以及资源利用率。 无论选择了哪种迁移路径,都将需要此信息。 例如,这有助于指导选择节点池中 VM 的大小、容器要使用的内存量以及容器需要多少 CPU。

可以在 AKS 中调整节点池的大小。 若要了解如何操作,请参阅在 Azure Kubernetes 服务(AKS)中调整节点池大小。

清点所有机密

检查生产服务器或服务器上的所有属性和配置文件,了解任何机密和密码。 请务必在 WAR 中检查jboss-web.xml文件。 还可以在应用程序中查找包含密码或凭据的配置文件。

请考虑将这些机密存储到 Azure KeyVault 中。 有关详细信息,请参阅 Azure Key Vault 基本概念

清点所有证书

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

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

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

Azure VM 上的 JBoss EAP 需要受支持的 Java 版本。 有关要使用的 JDK 版本的指南,请参阅 Red Hat 文档中支持的配置

注意

如果当前服务器在不受支持的 JDK(如 Oracle JDK 或 IBM OpenJ9)上运行,则此验证尤其重要。

若要获取当前的 Java 版本,请登录到生产服务器并运行以下命令:

java -version

清点外部资源

外部资源(如数据源、JMS 消息代理等)通过 Java 命名和目录接口 (JNDI) 注入。 某些此类资源可能需要迁移或重新配置。

在应用程序中

检查 WEB-INF/jboss-web.xml 和/或 WEB-INF/web.xml 文件。 查找 <Context> 元素中的 <Resource> 元素。

Datasources

数据源是 JNDI 资源,其 type 属性设置为 javax.sql.DataSource。 对于每个数据源,请记录以下信息:

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

有关详细信息,请参阅 JBoss EAP 文档中的 About JBoss EAP Datasources(关于 JBoss EAP 数据源)。

所有其他的外部资源

在本指南中,不可能记录每个可能的外部依赖项。 你的团队负责验证你是否可以在迁移之后满足应用程序的所有外部依赖项的要求。

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

应用程序服务器上的文件系统的任何用法都需要重新配置,或者,在极少数情况下,体系结构更改。 JBoss EAP 模块或应用程序代码可以使用文件系统。 可以标识以下部分所述的部分或全部方案。

只读静态内容

如果应用程序当前提供静态内容,则需为其提供一个备用位置。 可能需要考虑将静态内容移到 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 的解决方案。 或者,你需要重构应用程序,以便使用本地资源公开的公开可用的 API。

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

如果应用程序使用 JMS 队列或主题,则需将其迁移到外部托管的 JMS 服务器。 Azure 服务总线和高级消息队列协议 (AMQP) 可成为那些使用 JMS 的项目的理想迁移策略。 有关详细信息,请参阅将 JMS 与 Azure 服务总线和 AMQP 1.0 配合使用

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

确定是否使用了 JCA 连接器

如果应用程序使用 JCA 连接器,请验证是否可以在 JBoss EAP 上使用 JCA 连接器。 如果可以在 JBoss EAP 上使用 JCA 连接器,则必须将这些 JAR 添加到服务器 classpath 中,并将所需的配置文件放在 JBoss EAP 服务器目录中的正确位置,使其可用。

确定是否使用了 JAAS

如果应用程序使用的是 JAAS,则需要捕获 JAAS 的配置方式。 如果使用的是数据库,则可以将其转换为 JBoss EAP 上的 JAAS 域。 如果它是自定义实现,则需要验证它是否可在 JBoss EAP 上使用。

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

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

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

如果将应用程序打包为 EAR 文件,请务必检查 application.xml 文件并捕获配置。

注意

如果希望能够独立缩放每个 Web 应用程序,以便更好地使用 Azure VM 资源,则应将 EAR 分解为单独的 Web 应用程序。

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

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

迁移

在 Azure 虚拟机 产品/服务中选择 JBoss EAP

以下部分中介绍的产品/服务适用于 Azure 虚拟机 上的 JBoss EAP。

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

Azure 虚拟机规模集上的 JBoss EAP

虚拟机规模集为任何大小的工作负荷提供负载均衡且高度可缩放的虚拟机组。 有关详细信息,请参阅什么是虚拟机规模集?

群集虚拟机上的 JBoss EAP

如果愿意,使用 JBoss EAP 聚类分析机制的传统 VM 群集适合从已使用此功能的部署直接迁移。 有关详细信息,请参阅 JBoss EAP 文档中的“配置 Red Hat JBoss EAP 7 群集 ”。 预生成的Azure 市场产品/服务包括对域模式的支持。 有关 EAP 域和域模式的概述,请参阅 “域管理”。

JBoss EAP 单一服务器

如果只需要单个服务器(可能用于测试和评估),或者对于轻型工作负荷,则有一个产品/服务在单个 VM 上部署 JBoss EAP 单一服务器。

Red Hat Migration Toolkit for Apps

Red Hat Migration Toolkit for Applications 是 Visual Studio Code 的免费扩展。 此扩展分析应用程序代码和配置,以提供从本地迁移到云的建议。 有关详细信息,请参阅 Migration Toolkit for Applications 概述

本指南的内容可帮助你解决迁移旅程的其他组件,例如选择正确的 VM 大小以及外部化会话状态。

迁移后

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