将 JBoss EAP 应用程序迁移到 Azure Red Hat OpenShift

本指南介绍了将现有 JBoss EAP 应用程序迁移到 Azure Red Hat OpenShift 上运行时应注意的事项。

预迁移

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

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

成功将 JBoss EAP 应用程序迁移到 Azure 的第一步是选择最合适的迁移目标。 JBoss EAP 在 Azure 虚拟机 (VM) 或 Azure Red Hat OpenShift 上运行良好。

VM 目标是最简单的选择,因为它与本地部署最为相似。 虚拟机的管理和部署体验与本地体验很相似。 选择 VM 可以推迟进行现代化。

Red Hat OpenShift 汇集了经过测试和值得信赖的服务,以减少开发、现代化、部署、运行和管理应用程序的摩擦。 Azure Red Hat OpenShift 基于 Kubernetes 而构建。 Azure Red Hat OpenShift 可在共有云、本地、混合云或边缘体系结构中提供一致的体验。

如果最大程度地减少更改是迁移工作最重要的因素,请考虑基于 VM 的迁移。 在这种情况下,请参阅将 JBoss EAP 应用程序迁移到 Azure VM 上的 JBoss EAP。 如果能够容忍将应用程序转换为在 Red Hat OpenShift 中运行以降低运行时成本,请考虑基于 Azure Red Hat OpenShift 的迁移。 在这种情况下,请继续将 JBoss EAP 应用程序迁移到 Azure Red Hat OpenShift 上的 JBoss EAP。 要了解 JBoss EAP 和 JBoss EAP for OpenShift 的区别,请参阅比较:JBoss EAP 和 JBoss EAP for OpenShift

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

首先,确定 Azure Red Hat OpenShift 是合适的部署目标。 然后,确定预生成的 Azure 市场产品/服务是否是一个良好的起点。 请考虑以下有关预生成 Azure 市场产品/服务的要点:

  • Red Hat 和 Microsoft 创建了此产品/服务,以便在 Azure Red Hat OpenShift 上快速预配 JBoss EAP。
  • 概括而言,产品/服务会自动执行以下步骤。
    • 在 Azure Red Hat OpenShift 上安装 EAP 操作器。
    • 使用 eap-s2i-build 模板生成应用程序映像。 有关源代码到映像 (S2I) 的详细信息,请参阅为 OpenShift 使用 OpenJDK 11 源代码到映像
    • 使用 EAP 操作程序部署 Java 应用程序。 有关详细信息,请参阅 Red Hat 网站上的 EAP 操作器参考文档。

如果不使用预生成 Azure 市场产品/服务,则必须了解如何直接使用 EAP 操作器。 掌握操作员超出了本文的范围。 有关 EAP 操作器的完整文档,请访问 Red Hat

本节的其余部分提供了决定使用预生成的 Azure 市场产品/服务或直接使用操作员的一些注意事项。

确定 JBoss EAP 版本是否兼容

现有的 JBoss EAP 版本必须是操作器支持的版本之一。 有关详细信息,请参阅 Red Hat 文档中的版本兼容性和支持

清点服务器容量

记录当前生产服务器的硬件(内存、CPU、磁盘)、平均值和峰值请求计数,以及资源利用率。 无论选择哪种迁移路径,都需要这些信息。 以下方面以及更多方面都能从详细的服务器容量清单中获益。

  • 帮助指导选择节点池中 VM 的大小。
  • 了解容器要使用的内存量。
  • 了解容器需要多少 CPU 份额。

可以调整 Azure Red Hat OpenShift 中节点池的大小。 有关详细信息,请参阅 Red Hat 文档中的重设群集大小 - Microsoft Azure

清点所有机密

在出现“配置即服务”技术(如 Azure Key Vault)之前,没有有关“机密”的明确定义的概念。 你只能使用一组不同的配置设置,这些设置可以有效地充当我们现在所称的“机密”。 在应用服务器(如 JBoss EAP)中,这些机密位于许多不同的配置文件和配置存储中。 检查生产服务器上的所有属性和配置文件中是否有机密和密码。 请务必检查应用程序中的 custom-config.xmljboss-web.xml 等配置文件。 还可以在应用程序中查找包含密码或凭据的配置文件。 有关详细信息,请参阅 Azure Key Vault 基本概念

一旦你有了可靠的机密清单,请查阅有关机密的 EAP 操作器文档。 有关详细信息,请参阅 Red Hat 文档中的创建机密

清点所有证书

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

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

获得可靠的证书清单后,就可以在 Azure Red Hat OpenShift 中进行配置了。 有关详细信息,请参阅 Red Hat 文档中的 OpenShift 容器平台中的 TLS 配置(替换)

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

JBoss EAP 迁移到 Azure Red Hat OpenShift 的所有路径都需要特定的 Java 版本,而每个路径的版本都不相同。 需要验证应用程序能否使用该支持版本正确运行。

注意

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

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

java -version

清点 JNDI 资源

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

确定是否使用了会话复制

如果应用程序依赖于会话复制(无论是否使用 Infinispan),则有三种选择:

  • Infinispan 在 Azure 虚拟机中运行良好,但如果使用提供高可用性功能的配置文件,请注意 JGroups 配置。 确定系统是作为托管域还是独立服务器运行。
    • 如果是在托管域中,则 hafull-ha 配置文件将处理 JGroups。
    • 如果是在独立服务器中,则 standalone-ha.xmlstandalone-full-ha.xml 配置文件将处理 JGroups。
    • Microsoft Azure 不支持基于 UDP 多播的 JGroups 发现协议。 有关详细信息,请参阅 Red Hat 文档中的在 Microsoft Azure 中使用 JBoss EAP 高可用性
  • 重构应用程序,使用数据库进行会话管理。
  • 重构应用程序,将 Azure Redis 服务的会话外部化。 有关详细信息,请参阅 Azure Cache for Redis

对于所有这些选项,最后是掌握 JBoss EAP 如何执行 HTTP 会话状态复制。 有关详细信息,请参阅 Red Hat 文档中的关于 HTTP 会话复制

记录数据源

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

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

有关 JBoss EAP 中 JDBC 驱动程序的详细信息,请参阅 Red Hat 文档中的数据源管理

确定是否已自定义 JBoss EAP

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

  • 是否更改了启动脚本? 此类脚本包括 hosteap_envstandalonedomain
  • 是否有任何特定参数传递到 JVM?
  • 是否存在添加到服务器 classpath 中的 JAR?

需要在 Azure Red Hat OpenShift 上运行的容器映像中捕获这些自定义。 如需了解详细信息,请参阅 Red Hat 文档中的为 Java 应用程序配置 JBoss EAP for OpenShift 映像

确定是否需要连接到本地

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

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

如果应用程序正在使用 JMS 队列或主题,则可能需要将它们迁移到外部托管的 JMS 服务器上。 Azure 服务总线和高级消息队列协议可成为那些使用 JMS 的项目的理想迁移策略。 有关详细信息,请参阅将 Java Message Service 1.1 与 Azure 服务总线标准和 AMQP 1.0 配合使用

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

有关详细信息,请参阅 Red Hat 文档中的配置消息传递

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

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

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

可以使用确定是否已自定义 JBoss EAP 部分中描述的相同技术来处理这些库。

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

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

Azure Red Hat OpenShift 在 OpenShift 4 上运行时,使用 Red Hat Enterprise Linux CoreOS (RHCOS) 作为所有控制平面和工作器节点的操作系统。 任何特定于 OS 的代码都必须与 RHCOS 兼容。

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

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

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

如果应用程序被打包为 EAR 文件,请务必捕获它们的配置。

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

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

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

考虑负载均衡的最佳方法是使用应用程序网关集成。 有关详细信息,请参阅什么是 Azure 应用程序网关?

迁移

本部分中的步骤假定分析已引导你决定使用预生成 Azure 市场产品/服务。

预配套餐

要在Azure 门户中打开产品/服务,请参阅 Azure Red Hat OpenShift 上的 JBoss EAP。 选择“创建”,然后按照产品/服务中的说明操作。

迁移应用程序

产品/服务支持“源到映像”(S2I) 流程,可在 JBoss EAP for OpenShift 映像上生成和运行 Java 应用程序。 如果想稍后自行部署,Red Hat 有一个示例演示了如何手动完成部署。 有关详细信息,请参阅 Red Hat 文档中的第 2 章:在 JBoss EAP for OpenShift 映像上生成和运行 Java 应用程序

迁移后

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