将 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 虚拟机 (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 Cloud Access 计划将 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 虚拟机 (VM) 上部署 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 Blob 存储和 Azure CDN 与 Azure 函数配合使用,以便处理上传和 CDN 刷新操作。 我们提供了一个示例实现,用于通过 Azure Functions 进行静态内容的上传和 CDN 预加载操作。
确定是否需要连接到本地
如果应用程序需要访问任何本地服务,则需预配 Azure 的某个连接服务。 有关详细信息,请参阅将本地网络连接到 Azure。 或者,你需要重构应用程序,以便使用本地资源公开的公开可用的 API。
确定 Java 消息服务 (JMS) 队列或主题是否正在使用中
如果应用程序使用 JMS 队列或主题,则需将其迁移到外部托管的 JMS 服务器。 Azure 服务总线和高级消息队列协议 (AMQP) 可成为那些使用 JMS 的项目的理想迁移策略。 有关详细信息,请参阅将 Java Message Service 1.1 与 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 文档中的 Web 应用程序中的群集。 预生成的 Azure 市场产品/服务包括对域模式的支持。 有关 EAP 域和域模式的概述,请参阅域管理。
JBoss EAP 单一服务器
如果只需要单个服务器(可能用于测试和评估),或者对于轻型工作负荷,则有一个产品/服务在单个 VM 上部署 JBoss EAP 单一服务器。
适用于应用的 Red Hat 迁移工具包
Red Hat Migration Toolkit for Applications 是 Visual Studio Code 的免费扩展。 此扩展会分析应用程序代码和配置,以提供从本地迁移到云的建议。 有关详细信息,请参阅 Migration Toolkit for Applications 概述。
本指南的内容可帮助你解决迁移旅程的其他组件,例如选择正确的 VM 大小以及外部化会话状态。
迁移后
实现在预迁移步骤中定义的迁移目标后,请执行某些端到端验收测试,验证一切是否按预期工作。 有关一些潜在的迁移后增强功能的信息,请参阅以下文章:
使用 Azure 存储提供装载到虚拟机的静态内容。 有关详细信息,请参阅为 Azure 开发测试实验室中的实验室虚拟机附加或分离数据磁盘。
通过 Azure DevOps 将应用程序部署到已迁移的 JBoss EAP 群集。 有关详细信息,请参阅 Azure DevOps 入门文档。
通过高级负载均衡服务增强网络拓扑。 有关详细信息,请参阅在 Azure 中使用负载均衡服务。
使用 Azure 托管标识管理机密并分配对 Azure 资源的基于角色的访问权限。 有关详细信息,请参阅什么是 Azure 资源的托管标识?
将 Java EE 身份验证和授权与 Microsoft Entra ID 集成。 有关详细信息,请参阅将 Microsoft Entra ID 与应用程序集成入门指南。
使用 Azure Key Vault 存储充当“机密”的任何信息。 有关详细信息,请参阅 Azure Key Vault 基本概念。