将 WebLogic Server 应用程序迁移到 Azure 虚拟机
本指南介绍在需要迁移现有 WebLogic 应用程序以使之在 Azure 虚拟机上运行时应注意的事项。 有关 Azure 市场中可用 WebLogic Server 解决方案的概述,请参阅采用哪些解决方案在 Azure 虚拟机上运行 Oracle WebLogic Server?
预迁移
若要确保迁移成功,请在开始之前完成以下各节中所述的评估和清点步骤。
定义“迁移完成”的含义
可以从本指南和相应的 Azure 市场套餐着手,加快将 WebLogic Server 工作负载迁移到 Azure。 定义迁移工作的范围很重要。 例如,你是否要严格按要求从现有的基础结构“直接迁移”到 Azure 虚拟机? 如果答案为是,则在迁移过程中,你可能想要尝试使用一些“迁移加改进”措施。
考虑到本指南中详述的必要更改,最好是尽可能进行单纯的“直接迁移”。 定义“迁移完成”的含义,这样就可以知道自己何时到达了该里程碑。 “迁移完成”以后,即可拍摄虚拟机的快照,如创建快照中所述。 在验证你可以从快照成功还原后,你可以进行改进,而不必担心丢失迄今为止取得的迁移进度。
确保目标是迁移工作的适当目标
成功将 WLS 应用程序迁移到 Azure 的第一步是选择最合适的迁移目标。 WLS 在 Azure 虚拟机 (VM) 或 Azure Kubernetes 服务 (AKS) 上运行良好。 VM 目标是最简单的选择,因为它与本地部署最为相似。 虚拟机的管理和部署体验与本地体验非常相似。 这种便利性的代价是经济成本。 一般来说,基于 VM 的解决方案的每分钟成本高于 AKS。 虽然基于 AKS 的解决方案运行成本较低,但必须限制应用程序以满足 AKS 的要求。 如果最大程度地减少更改是迁移工作最重要的因素,请考虑基于 VM 的迁移。 在这种情况下,请参阅将 WebLogic 应用程序迁移到 Azure 虚拟机。 如果可以容忍将应用程序转换为在 Kubernetes 中运行以降低运行时成本,请考虑基于 AKS 的迁移。 在这种情况下,请继续执行将 WebLogic Server 应用程序迁移到 Azure Kubernetes 服务。
确定预生成的 Azure 市场产品/服务是否是良好起点
Oracle 和 Microsoft 合作将一组 Azure 解决方案模板引入了 Azure 市场,为迁移到 Azure 提供坚实的起点。 请参阅 Oracle Fusion Middleware 文档以获取套餐列表,选择与现有部署最匹配的套餐。 可在名为 Azure 上的 Oracle WebLogic Server 是指什么?的概述文章中查看套餐列表
如果任何现有产品/服务都不是良好起点,则必须使用 Azure 虚拟机资源手动重现部署。 请参阅在 Azure 虚拟机上手动安装 Oracle WebLogic Server,了解分步指导。 有关详细信息,请参阅什么是 IaaS?
确定 WebLogic 版本是否兼容
现有的 WebLogic 版本必须与 IaaS 套餐中的版本兼容。 若要查看 WebLogic 版本 12.2.1.4 的产品/服务,请查询 Azure 市场以获取 Oracle WebLogic 12.2.1.4。 如果现有的 WebLogic 版本与该版本不兼容,则必须使用 Azure IaaS 资源手动重现部署。 有关详细信息,请参阅 Azure 文档。
清点服务器容量
记录当前生产服务器的硬件(内存、CPU、磁盘),以及平均和峰值请求计数和资源利用率。 此信息必须告知所选 VM 大小。 有关详细信息,请参阅云服务的大小。
清点所有机密
在出现“配置即服务”技术(如 Azure Key Vault)之前,没有有关“机密”的明确定义的概念。 你只能使用一组不同的配置设置,这些设置可以有效地充当我们现在所称的“机密”。 在应用服务器(如 WebLogic Server)中,这些机密位于许多不同的配置文件和配置存储中。 检查生产服务器上的所有属性和配置文件中是否有机密和密码。 请确保在 WAR 中检查 weblogic.xml。 还可以在应用程序中查找包含密码或凭据的配置文件。 有关详细信息,请参阅 Azure Key Vault 基本概念。
清点所有证书
记录用于公共 SSL 终结点的所有证书。 可以通过运行以下命令来查看生产服务器上的所有证书:
keytool -list -v -keystore <path to keystore>
验证支持的 Java 版本是否正常运行
WebLogic 到 Azure 的所有迁移路径都需要一个特定的 Java 版本,该版本因路径而异。 需验证应用程序能否使用该支持的版本正确运行。
注意
如果当前服务器在不受支持的 JDK(如 Oracle JDK 或 IBM OpenJ9)上运行,则此验证尤其重要。
若要获取当前的 Java 版本,请登录到生产服务器并运行以下命令:
java -version
注意
迁移到 Azure 虚拟机上的 WLS 时,特定 Java 版本的要求由虚拟机上预安装的 Java 决定。 迁移到 AKS 上的 WLS 时,特定 Java 版本由所选的容器映像决定。 有很多种选择,但都使用 Oracle JDK。
清点 JNDI 资源
清点所有 JNDI 资源。 例如,数据库等数据源可能具有关联的 JNDI 名称,该名称允许 JPA 正确地将 EntityManager
的实例绑定到特定数据库。 有关 JNDI 资源和数据库的详细信息,请参阅 Oracle 文档中的 WebLogic Server Data Sources(WebLogic Server 数据源)。 其他 JNDI 相关资源(如 JMS 消息代理)可能需要迁移或重新配置。 有关 JMS 配置的详细信息,请参阅 Oracle WebLogic Server 12.2.1.4.0。
检查域配置
WebLogic Server 中的主要配置单元是域。 因此,config.xml 文件包含了大量的配置,进行迁移时必须仔细考虑这些配置。 此文件包含对存储在子目录中的其他 XML 文件的引用。 Oracle 建议你正常情况下使用管理控制台来配置 WebLogic Server 的可管理对象和服务,并允许 WebLogic Server 保留 config.xml 文件。 有关详细信息,请参阅 Domain Configuration Files(域配置文件)。
在应用程序中
检查 WEB-INF/weblogic.xml 文件和/或 WEB-INF/web.xml 文件。
确定是否使用了会话复制
如果应用程序依赖于会话复制,则无论是否有 Oracle Coherence*Web,都可以使用三个选项:
- Coherence*Web 可以在 Azure 虚拟机中与 WebLogic Server 一起运行,但你必须在预配套餐后手动配置此选项。 如果使用独立的 Coherence,也可在 Azure 虚拟机中运行它,但必须在预配套餐后手动配置此选项。
- 重构应用程序,使用数据库进行会话管理。
- 重构应用程序,将 Azure Redis 服务的会话外部化。 有关详细信息,请参阅 Azure Cache for Redis。
对于所有这些选项,最后是掌握 WebLogic 如何执行 HTTP 会话状态复制。 有关详细信息,请参阅 Oracle 文档中的 HTTP 会话状态复制。
记录数据源
如果应用程序使用任何数据库,则需捕获以下信息:
- 数据源名称是什么?
- 连接池配置是什么?
- 在哪里可以找到 JDBC 驱动程序 JAR 文件?
有关 WebLogic 中的 JDBC 驱动程序的详细信息,请参阅 Using JDBC Drivers with WebLogic Server(将 JDBC 驱动程序与 WebLogic Server 配合使用)。
确定是否已自定义 WebLogic
确定进行了以下哪些自定义,并捕获已完成的操作。
- 是否更改了启动脚本? 此类脚本包括 setDomainEnv、commEnv、startWebLogic 和 stopWebLogic。
- 是否有任何特定参数传递到 JVM?
- 是否存在添加到服务器 classpath 中的 JAR?
确定是否使用了基于 REST 的管理
如果应用程序的生命周期包括使用基于 REST 的管理,则需捕获用于访问 REST API 的具体端口,并确定如何对其进行身份验证以及如何将其公开。 迁移后,需确保这些相同的端口和身份验证机制是公开的,这样应用程序生命周期就能以类似于迁移之前的方式运行。 有关详细信息,请参阅使用 RESTful Management Services 管理 Oracle WebLogic Server。
确定是否需要连接到本地
如果应用程序需要访问任何本地服务,则需预配 Azure 的某个连接服务。 有关详细信息,请参阅将本地网络连接到 Azure。 或者,你需要重构应用程序,以便使用本地资源公开的公开可用的 API。
确定 Java 消息服务 (JMS) 队列或主题是否正在使用中
如果应用程序使用 JMS 队列或主题,则需将其迁移到外部托管的 JMS 服务器。 Azure 服务总线和高级消息队列协议可成为那些使用 JMS 的项目的理想迁移策略。 有关详细信息,请参阅将 Java Message Service 1.1 与 Azure 服务总线标准和 AMQP 1.0 配合使用。
如果已配置 JMS 持久存储,则必须捕获其配置,并在迁移后应用它。
如果使用 Oracle Message Broker,则可将此软件迁移到 Azure 虚拟机并按原样使用。
确定是否使用自己的自定义创建的共享 Java EE 库
如果使用共享 Java EE 库功能,则可使用两个选项:
- 重构应用程序代码以删除库上的所有依赖项,并改将功能直接合并到应用程序中。
- 将库添加到服务器 classpath。
确定是否使用了 OSGi 捆绑
如果使用了添加到 WebLogic 服务器的 OSGi 捆绑,则需将等效的 JAR 文件直接添加到 Web 应用程序。
确定应用程序是否包含特定于 OS 的代码
如果应用程序包含的代码有主机 OS 的依赖项,则需重构该代码,删除那些依赖项。 例如,如果应用程序在 Windows 上运行,则可能需要将文件系统路径中的 /
或 \
替换为 File.Separator
或 Paths.get
。
确定 Oracle 服务总线是否正在使用中
如果应用程序使用 Oracle 服务总线 (OSB),则需捕获 OSB 的配置方式。 有关详细信息,请参阅 About the Oracle Service Bus Installation(关于 Oracle 服务总线安装)。
确定应用程序是否由多个 WAR 组成
如果应用程序由多个 WAR 组成,则应将这些 WAR 中的每一个都视为单独的应用程序,并通过本指南了解这其中的每个应用程序。
确定应用程序是否打包为 EAR
如果应用程序打包为 EAR 文件,请务必检查 application.xml 和 weblogic-application.xml 文件并捕获其配置。
确定在生产服务器上运行的所有外部进程和守护程序
如果在应用程序服务器外运行任何进程(如监视守护程序),则需消除它们或将它们迁移到其他位置。
确定是否使用了 WebLogic 脚本编写工具 (WLST)
如果当前使用 WLST 来执行部署,则需评估其功能。 如果 WLST 在部署过程中更改应用程序的任何(运行时)参数,则需确保在迁移后测试应用程序时此行为继续有效。
确定是否使用以及如何使用文件系统
在持久性、启动和关闭方面,VM 文件系统与本地文件系统的操作方式相同。 尽管如此,仍然必须了解文件系统需求,确保 VM 有足够的存储大小和性能。
只读静态内容
如果应用程序当前提供静态内容,则需为其提供一个备用位置。 可能需要考虑将静态内容移到 Azure Blob 存储,并添加 Azure CDN,方便用户在全球范围内快速下载。 有关详细信息,请参阅 Azure 存储中的静态网站托管和快速入门:将 Azure 存储帐户与 Azure CDN 集成。
动态发布的静态内容
如果应用程序允许那些通过应用程序上传/生成但在创建后不可变的静态内容,则可将上述 Azure Blob 存储和 Azure CDN 与 Azure 函数配合使用,以便处理上传和 CDN 刷新操作。 我们提供了一个示例实现,用于通过 Azure Functions 进行静态内容的上传和 CDN 预加载操作。
确定网络拓扑
当前的 Azure 市场产品/服务集是迁移的起点。 如果套餐不包含需要迁移的体系结构方面的内容,则需捕获现有部署的网络拓扑,并在 Azure 中重新生成该拓扑,即使在将基本套餐与解决方案模板之一结合在一起使用后也是如此。
这是一个非常广泛的主题,但以下参考可为迁移工作提供某些指导:
- 此参考枚举将网络拓扑迁移到 Azure 时的相关高级主题:快速跟踪部署指南。
- 此参考介绍有关群集的重要问题,这会对网络拓扑产生影响:WebLogic Server 群集分析。
- 由于数据源是 WebLogic 系统中的独立服务器,因此必须将其视为网络拓扑分析的一部分。 WebLogic Server Data Sources(WebLogic Server 数据源)。
- 消息传送源也是独立的服务器。 WebLogic Server Messaging(WebLogic Server 消息传送)
- 负载均衡是一项基本要求。 此参考介绍负载均衡的 WebLogic Server 端:在群集中进行负载均衡。
考虑 JCA 适配器和资源适配器的使用情况
如果现有应用程序使用 JCA 适配器和/或资源适配器连接到其他企业系统,请确保这些项目的配置适用于在 Azure 虚拟机中运行的 WebLogic Server。 有关详细信息,请参阅 Creating and Configuring Resource Adapters(创建和配置资源适配器)
考虑自定义安全提供程序和 JAAS 的使用
如果应用程序使用 JAAS,则需确保正确迁移安全提供程序的配置。 有关详细信息,请参阅 Oracle 文档中的 About Configuring WebLogic Security Providers(关于配置 WebLogic 安全提供程序)。
确定是否使用了 WebLogic 群集分析
最可能的情况是,你已将应用程序部署到多个 WebLogic 服务器上,以实现高可用性。 可以直接将这些群集从本地安装迁移到 Azure 虚拟机中运行的 WebLogic。 有关详细信息,请参阅 Oracle 文档中的 Domain Configuration Files(域配置文件)。
用于满足负载均衡要求的帐户
负载均衡是将 Oracle WebLogic Server 群集迁移到 Azure 时必不可少的一部分。 最简单的解决方案是使用 Oracle WebLogic Server 群集的 Azure 市场套餐中提供的 Azure 应用程序网关 的内置支持。 有关此主题的教程,请参阅教程:使用 Azure 应用程序网关作为负载均衡器将 WebLogic Server 群集迁移到 Azure。
要查看摘要了解 Azure 应用程序网关的功能与其他 Azure 负载均衡解决方案的比较情况,请参阅 Azure 中的负载均衡选项概述。
确定是否使用了 Java EE 应用程序客户端功能
如果应用程序使用 Java EE 应用程序客户端功能,则在迁移到 Azure 虚拟机后,它应继续工作,没有更改。 有关详细信息,请参阅 Using Java EE Client Application Modules(使用 Java EE 客户端应用程序模块)。
迁移
选择基于 Azure 虚拟机套餐的 WebLogic
以下套餐适用于基于 Azure 虚拟机的 WebLogic。
在部署产品/服务期间,系统会要求你为 WebLogic 服务器节点选择虚拟机大小。 在选择 VM 大小时,请务必考虑有关大小调整的所有方面(内存、处理器、磁盘)。 有关详细信息,请参阅介绍虚拟机大小调整的 Azure 文档
没有管理服务器的 WebLogic Server 单一节点
此套餐创建单个 VM,并在其上安装 WebLogic,但不配置任何域,这适用于你有高度自定义域配置的情况。
具有管理服务器的 WebLogic Server 单一节点
此套餐会预配一个 VM,并在其上安装 WebLogic Server。 它创建一个域并启动管理服务器。
WebLogic Server N 节点群集
此套餐创建 WebLogic Server VM 的高度可用群集。
WebLogic Server N 节点动态群集
此套餐创建 WebLogic Server VM 的高度可用且可缩放的动态群集
预配套餐
选择了要开始使用的套餐后,请按套餐文档中的说明预配该套餐。 请确保选择与现有域名匹配的域名。 你甚至可以将域密码与现有域密码匹配。
迁移域
预配套餐后,可检查域配置并通过此指南详细了解如何迁移域。
连接数据库
迁移域以后,可以按套餐文档中的说明连接数据库。 这些说明可帮助你考虑所涉及的任何数据库密钥和访问字符串。
考虑密钥存储
必须考虑应用程序所用的任何 SSL 密钥存储的迁移。 有关详细信息,请参阅 Configuring Keystores(配置密钥存储)。
连接 JMS 源
连接数据库后,可以配置 JMS。 有关详细信息,请参阅 WebLogic 文档中的管理 Oracle WebLogic Server 的 JMS 资源的 Fusion 中间件。
用于身份验证和授权的帐户
大多数应用程序都有某种身份验证和授权。 如果使用 LDAP 进行身份验证,则可以使用安全 LDAP 设置 Microsoft Entra 域服务,并在 WebLogic Server 中配置 LDAP 连接。 有关详细信息,请参阅创建和配置 Microsoft Entra 域服务托管域和为 Microsoft Entra 域服务托管域配置安全 LDAP。
考虑日志记录
使用 Oracle WebLogic Server 市场解决方案模板提供的与 Azure 上的 Elastic 的集成。 此方法是考虑日志记录的最简单方法。 可以在概述文章采用哪些解决方案在 Azure 虚拟机上运行 Oracle WebLogic Server?中看到产品列表。以下位置提供了配置 Elastic 的完整教程:
- 在管理产品/服务中将 Oracle WebLogic Server 日志记录到 Elasticsearch 和 Kibana
- 在群集产品/服务中将 Oracle WebLogic Server 日志记录到 Elasticsearch 和 Kibana
- 在动态群集产品/服务中将 Oracle WebLogic Server 日志记录到 Elasticsearch 和 Kibana
如果 Elastic 集成不适用,你应在迁移域时继续使用现有的日志记录配置。 有关详细信息,请参阅 Oracle 文档中的配置 java.util.logging 记录器级别和为 Oracle WebLogic Server 配置日志文件和筛选日志消息。
迁移应用程序
用于将开发团队的应用程序部署到测试、过渡和生产服务器的技术因情况的不同而差异很大。 在某些情况下,可以通过高度演化的 CI/CD 平台将应用程序部署到 WebLogic Server。 在其他情况下,该过程可能需要更多的手动操作。 使用 Azure 虚拟机将 WebLogic 应用程序迁移到云的一个好处是,现有流程可以继续工作。
你必须配置产品/服务预配的网络安全组,以允许从 CI/CD 管道或手动部署系统进行访问。 有关详细信息,请参阅网络安全组。
测试
针对应用程序的任何容器内测试都必须配置为访问 Azure 中运行的新服务器。 如果涉及 CI/CD,则必须确保所需的网络安全规则允许你的测试访问已部署到 Azure 的应用程序。 有关详细信息,请参阅网络安全组。
迁移后
实现在预迁移步骤中定义的迁移目标后,请执行某些端到端验收测试,验证一切是否按预期工作。 有关迁移后一些潜在增强功能的指导,请参阅以下建议:
使用 Azure 存储提供装载到虚拟机的静态内容。 有关详细信息,请参阅在虚拟机中附加或拆离数据磁盘。
通过 Azure DevOps 将应用程序部署到已迁移的 WebLogic 群集。 有关详细信息,请参阅 Azure DevOps 入门文档。
如果按照教程教程:使用 Azure 应用程序网关作为负载均衡器将 WebLogic Server 群集迁移到 Azure 中的步骤,使用 Azure 应用程序网关部署了 WebLogic Server,你可能需要在应用程序网关上进行更多配置。 有关详细信息,请参阅应用程序网关配置概述。
通过高级负载均衡服务增强网络拓扑。 有关详细信息,请参阅在 Azure 中使用负载均衡服务。
使用 Azure 托管标识管理机密并分配对 Azure 资源的基于角色的访问权限。 有关详细信息,请参阅什么是 Azure 资源的托管标识?
将 WebLogic Java EE 身份验证和授权与 Microsoft Entra ID 集成。 有关详细信息,请参阅集成 Microsoft Entra 入门指南。
使用 Azure Key Vault 存储充当“机密”的任何信息。 有关详细信息,请参阅 Azure Key Vault 基本概念。