如何将Weblogic从虚拟机迁移到容器

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
简介: 本文讲的是如何将Weblogic从虚拟机迁移到容器【编者的话】本文描述了传统Web服务器WebLogic从VM迁移至Docker原因,以及运行在Docker上的优点,并给出了迁移部署的思路。
本文讲的是如何将Weblogic从虚拟机迁移到容器【编者的话】本文描述了传统Web服务器WebLogic从VM迁移至Docker原因,以及运行在Docker上的优点,并给出了迁移部署的思路。

随着PaaS和DevOps解决方案需求的增涨,我们可以看到那些运行在虚拟机上或直接运行在裸机上的遗留应用程序,在实践时会遇到一系列的障碍。分解和迁移的过程复杂度非常高。通常,为了获得PaaS或CaaS模式的好处,应用程序所有者必须去重新设计他们的应用架构。

在这个文章里,我们将分析把运行在虚拟机上的Java 遗留应用程序迁移到基于容器平台上的具体挑战。使用Oracle WebLogic Server做为案例,我们将展示分解过程的具体步骤和迁移的结果。

迁移到容器的动机

对比Java EE应用运行在裸机的时代,硬件虚拟化已经是一个很大的进步。它给了我们解决多个应用间隔离及提高硬件利用率的能力。然而,Hypervisors(虚拟机管理程序)在宿主机上会使用大量CPU和内存,且每个虚拟机都要求拥有完整的操作系统、TCP栈和文件系统。

每个虚拟机都有固定的内存,只有部分的虚拟机管理程序可以为通过内存膨胀(memory ballooning)机制的帮助为运行中的虚拟机重新分配内存。所以为了应用程序未来的规模,我们在每个虚拟机里都会预留一些资源,但这些资源并没有得到完全的利用。同时,由于在一个虚拟机内实例间缺乏适当的隔离,这些资源也不能被其他的程序共享。
1.png

而容器通过共享宿主机的OS kernel、TCP栈、文件系统和其他的系统资源,仅使用很少的资源和CPU就可以运行,进一步提高了性能和资源利用率。

这里有两种类型的容器——应用容器和系统容器。通常,一个应用容器运行时相当于一个单进程。而一个系统容器则像一个完整的操作系统,可以在一个单容器内执行操作系统所有的功能,比如systemd、SysVinit和通过openrc产生其他类似openssh、crond and syslogd的进程。两种类型的容器在不同的使用场景都非常有用,而且在冗余管理进程上不浪费内存,通常消耗的内存比虚拟机少。然而,对于Java遗留应用程序的迁移只有使用系统容器可以不需要大量的应用重构。

不同于虚拟机,对于运行中实例的容器资源的不需要重启就可以很容易修改限制。而且这些在限制边界内没有被消耗的资源自动与在同一个物理节点上的其他容器共享。
2.png

此外,容器对于开发而言也非常有用,在创建,打包,测试应用方面用一种敏捷的方式加快应用的开始进度和提高应用的可扩展性。

这些在物理机上没有被利用的资源可以很容易弹性扩展或新应用的容器使用。考虑到提高容器的隔离,不同类型的应用可以运行在相同的物理节点而不相互影响。这些可以平均提高已存在的基础设备资源利用率的3-10倍。

什么是分解

在迁移过程中,程序分解是基本部分,它可以帮助把大的单块应用分解成小的,按逻辑块划分的,和可以独立运行程序。

以图中显示的是在从虚拟机迁移到容器时应用的一个简单的分解过程:
3.png

在虚拟机中运行Java遗留应用程序

在软件程序开发里有句老话:遗留软件是好的,只不过是还在运行的旧软件。下面通过案例让我们更精确的知道在Oracle Weblogic Server上它是怎么工作的。

在虚拟机中Oracle Weblogic Server的结构

在虚拟机中运行时,Weblogic Server包含三种类型的实例:
  • Administration Server.(管理服务器)
  • Node Manager.(节点管理器)
  • Managed Server.(被管理服务器)

管理服务器是中心节点,通过它可以配置和管理集群中的所有资源。它通过与节点管理器连接增加或删除被管理节点。而被管理节点运行Web应用、EJBs、Web service和其他的资源。
4.png

通常,每个虚拟机上运行一个节点管理器和多个被管服务服务器,而一个管理服务器则管理所有虚拟机上的所有实例。

通过虚拟机扩展 WebLogic

现在想象一下遇到流量高峰期需要扩展集群,新的被管服务器将会被加入到虚拟机中用于处理增长的负载,直到没有资源分配。
5.png

但是当流量还在不断增长,而当前被管理服务的实例数量不足以处理负载时,则需要增加一个新的虚拟机去处理程序的进一步增长的业务规模。

典型的通过多个虚拟机对WebLogic进行扩展包括三个步骤:
  1. 提供一个提前配置好 Weblogic Server 模板的新虚拟机
  2. 在新的虚拟机上启动一个节点管理器,并连接到管理服务器上
  3. 添加一个新的被管理服务器处理部分增长的业务负载
    6.png

然后,这个扩展的步骤重复,在新增加的虚拟启动更多的被管理服务器直到资源限制。
7.png

在虚拟机中运行WebLogic的劣势

这样运行Oracle WebLogic是一种资源利用率非常低下的方式,这里有几个资源浪费或未使用的点:
  1. 每个虚拟机要求拥有完整的操作系统,TCP 栈和文件系统,这些需要使用宿主机大量的 CPU 和内存。
  2. 这些资源的分配并非高度微粒化,在某些场景,所有当我们只需要增加一个被管理服务器时也需要去准备一个完整的虚拟机。
  3. 如果当一个虚拟机的资源不足时,添加额外的 CPU 或仅是增加内存也需要重启整个虚拟机。
  4. 每个虚拟机都需要节点管理器用来增加或删除被管理节点,需要消耗额外的资源和增加额外复杂的配置。
  5. 在同一个虚拟机里运行的实例由于缺少隔离会相互影响,从而影响整个应用的性能。也出于这个原因,我们不能在同一个虚拟机上混合搭配运行不同的应用程序。
  6. 虚拟机的可移植性受限于一个厂商,所以当我们想从一个云迁移到另一个云会有一系列的问题。
  7. 在虚拟机上做模板打包和实施CI/CD会非常慢和过程复杂。

从虚拟机迁移到容器

这些天,我们找到多个设计用来在容器里运行微服务的优秀应用服务器和框架,比如 Spring Boot、WildFly Swarm、Payara Micro等等。无论如何,有一系列的服务器设计运行在虚拟机,比如 Oracle WebLogic Server ,这种类型的实例迁移到容器里的任务更加复杂。这就是为什么我们更关注这个主题。

WebLogic Server的分解

这些天通过Docker容器的帮助这个分解是一个相当容易的任务。首先,我们需要准备一个有WebLogic Server的容器镜像。(镜像可从 Oracle的官方仓库 获得)。

当Docker模板已经准备好,我们规定每个实例在独立的容器里:一个管理服务器和需要数量的被管理服务器。

在这里,我们放弃了用于增加和删除被管理节点的节点管理器。

迁移到容器后,和直接使用管理节点一样,通过容器编排平台和一系列 WSLT脚本 ,被管理服务器实例可以被自动增加和删除。

这样,我们就得到了一个非常简单的Weblogic Server Cluster结构。
8.png

因为容器比从头开始配置或克隆更容易,这样水平扩展过程变得非常细颗粒和平滑。还有,每个容器可以被快速启动或停止,几乎没有停机时间。当和虚拟机对比时容器更加轻量,所以调度容器时比调度虚拟机使用更少的时间。

运行 WebLogic在容器中的好处

虽然将应用迁移到容器里是一个挑战,但是如果你知道怎么管理它,可以获得如下的好处:
  1. 每个容器消除独立的完整操作系统,TCP 栈和文件系统可以减少系统资源( CPU 和内存)的使用。
  2. 通过在集群拓扑里删除节点管理器可以简化水平扩展。
  3. 通过容器可以共享未使用资源的能力可以自动化垂直扩展,而且不需要重启就可以重新配置,非常容易。
  4. 通过在同一个物理机上使用独立的容器隔离运行不同的应用,提高基础设备的利用率。
  5. 通过容器的可移植性解除在不同云厂商的迁移约束。

可以使用相同的方式帮助分解应用的其他层,或应用其他的Java EE应用服务。在下一个主题,我们会通过一个特定的案例描述怎么处理分解后数据的全过程。

原文链接:Migration From VMs to Containers(翻译:陈爱珍)

===========================================================
译者介绍:

陈爱珍,七牛云布道师。多年企业级系统的应用运维及分布式系统实战经验。现专注于容器、微服务及 DevOps 落地的研究与实践。

原文发布时间为:2016-10-26

本文作者:陈爱珍

本文来自云栖社区合作伙伴Dockerone.io,了解相关信息可以关注Dockerone.io。

原文标题:如何将Weblogic从虚拟机迁移到容器

相关文章
|
1天前
|
存储 持续交付 虚拟化
|
2月前
|
KVM 虚拟化
KVM虚拟机的热迁移
这篇文章详细介绍了KVM虚拟机的热迁移过程,包括临时迁移和永久迁移的步骤,以及可能遇到的故障和解决方案。
87 1
KVM虚拟机的热迁移
|
28天前
|
监控 应用服务中间件 nginx
详细解释容器以及虚拟机centos7.9容器化部署基础服务(容器化部署nginx)
容器是一种轻量级、可移植的软件打包和隔离技术,将应用程序及其依赖项打包,确保在任何环境中一致运行。容器共享主机操作系统内核,相比虚拟机更高效、轻量,具有快速启动和高资源利用率的特点。容器的关键技术包括命名空间(如 PID、NET 等)、控制组(cgroups)和联合文件系统(UnionFS)。使用容器可以提高开发和部署效率,简化管理,确保环境一致性。例如,在 CentOS 7.9 上部署 Nginx 时,可以通过 Docker 下载和运行 `nginx:1.20` 镜像,并通过端口映射使外部请求访问 Nginx 服务。此外,还可以将测试页面复制到容器中,进一步验证容器的功能。
|
2月前
|
存储 虚拟化
使用DiskGenius工具来实现物理机迁移虚拟机,实现虚拟化
【9月更文挑战第1天】使用 DiskGenius 工具可将物理机迁移到虚拟机,实现系统与数据的虚拟化。此过程包括:安装 DiskGenius 和准备虚拟化平台;备份物理机数据;使用 DiskGenius 备份磁盘;在虚拟化软件中创建新虚拟机并导入磁盘备份;配置及调整虚拟机设置;测试性能并优化资源分配。这有助于测试、开发及系统管理。
227 5
|
3月前
|
存储 Linux Docker
备份和迁移Docker容器
【8月更文挑战第21天】在Linux系统中,备份与迁移Docker容器可通过以下步骤实现:首先,查找并记录需备份容器的ID或名称;其次,若容器正在运行,则需先停止;最后利用`docker export`命令将其导出为tar归档文件以完成备份。对于容器迁移,有两种常见方式:一是直接迁移备份文件至目标服务器,并通过`docker import`命令导入新容器;二是通过创建容器镜像,并推送至镜像仓库,之后在目标服务器上拉取该镜像并运行。值得注意的是,在进行容器迁移时应确保Docker版本兼容,同时关注数据存储、网络配置及权限设置等问题,以保障容器功能正常运作。
137 2
|
3月前
|
Kubernetes Unix Linux
k8s将节点容器运行时从Docker迁移到Containerd
k8s将节点容器运行时从Docker迁移到Containerd
|
3月前
|
存储 缓存 监控
在Linux中,如何优化虚拟机和容器的性能和资源使用?
在Linux中,如何优化虚拟机和容器的性能和资源使用?
|
3月前
|
Linux KVM 虚拟化
在Linux中,如何进行虚拟机和容器的备份和迁移?
在Linux中,如何进行虚拟机和容器的备份和迁移?
|
13天前
|
安全 虚拟化 数据中心
Xshell 连接 VMware虚拟机操作 截图和使用
Xshell 连接 VMware虚拟机操作 截图和使用
35 4
|
21天前
|
Linux 虚拟化
vmware虚拟机安装2024(超详细)
vmware虚拟机安装2024(超详细)
157 6