

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 Auto Scaling 从 IBM WebSphere 应用程序服务器迁移到亚马逊 EC2 上的 Apache Tomcat
<a name="migrate-from-ibm-websphere-application-server-to-apache-tomcat-on-amazon-ec2-with-auto-scaling"></a>

*Kevin Yung 和 Afroz Khan，Amazon Web Services*

## Summary
<a name="migrate-from-ibm-websphere-application-server-to-apache-tomcat-on-amazon-ec2-with-auto-scaling-summary"></a>

此模式为在启用了 Amazon Aut EC2 o Scaling 的亚马逊弹性计算云 (亚马逊 EC2) 实例上将 Java WebSphere 应用程序从 IBM 应用程序服务器迁移到 Apache Tomcat 提供了指导。 

通过使用此示例，您可实现：
+ 降低 IBM 许可成本
+ 使用多可用区部署，实现高可用性
+ 使用 Amazon A EC2 uto Scaling 提高了应用程序的弹性

## 先决条件和限制
<a name="migrate-from-ibm-websphere-application-server-to-apache-tomcat-on-amazon-ec2-with-auto-scaling-prerequisites-and-limitations"></a>

**先决条件**
+ Java 应用程序（版本 7. *x* 或 8. *x*）应该在 LAMP 堆栈中开发。
+ 目标状态是在 Linux 主机托管的 Java 应用程序。此示例已在 Red Hat Enterprise Linux (RHEL) 7 环境中成功实现。其他 Linux 发行版可遵循这种模式，但应参考 Apache Tomcat 发行版的配置。
+ 您应该了解 Java 应用程序的依赖项。
+ 您必须有权访问 Java 应用程序源代码才能更改。

**限制和更换平台的变化**
+ 您应该了解企业存档 (EAR) 组件，确认所有库都打包在 Web 组件 WAR 文件中。您需要配置 [Apache Maven WAR Plugin](https://maven.apache.org/plugins/maven-war-plugin/) 并生成 WAR 文件构件。
+ 使用 Apache Tomcat 8，servlet-api.jar 和应用程序包内置 jar 文件之间存在已知冲突。若要解决此问题，请将 servlet-api.jar 从应用程序包中删除。
+ 您必须配置位于 [Apache Tomcat 配置](https://tomcat.apache.org/tomcat-8.0-doc/class-loader-howto.html)的*类路径*中的 Web-inf/资源。默认情况下，将 JAR 库加载至以下目录。或者，您可以部署下的所有资源src/main/resources*。*
+ 检查 Java 应用程序中是否存在任何硬编码的上下文根，并更新 [Apache Tomcat 上下文根目录](https://tomcat.apache.org/tomcat-8.0-doc/config/context.html#Defining_a_context)
+ 若要设置 JVM 运行时选项，可以在 Apache Tomcat bin 文件夹中创建配置文件 setenv.sh；如 JAVA\_OPTS、JAVA\_HOME** 等**。 
+ 身份验证是在容器级别配置，并在 Apache Tomcat 配置中设置为一个领域。已为以下三个领域中的任何一个建立身份验证： 
  + [JDBC Database Realm](https://tomcat.apache.org/tomcat-8.0-doc/config/realm.html#JDBC_Database_Realm_-_org.apache.catalina.realm.JDBCRealm) 在 JDBC 驱动程序访问的关系数据库查找用户。
  + [DataSource Database Realm](https://tomcat.apache.org/tomcat-8.0-doc/config/realm.html#DataSource_Database_Realm_-_org.apache.catalina.realm.DataSourceRealm) 在 JNDI 访问的数据库中查找用户。
  + [JNDI Directory Realm](https://tomcat.apache.org/tomcat-8.0-doc/config/realm.html#JNDI_Directory_Realm_-_org.apache.catalina.realm.JNDIRealm) 在 JNDI 提供者可以访问的轻型目录访问协议 (LDAP) 目录中查找用户。查询需要： 
    + LDAP 连接详细信息：用户搜索库、搜索筛选条件、角色库、角色筛选条件 
    + 密钥 JNDI Directory Realm：连接至 LDAP、对用户进行身份验证并检索用户所属的所有群组
+ 授权：如果容器具有基于角色授权，可以检查 web.xml 中的授权限制，则必须定义 Web 资源并将其与约束条件中定义的角色进行比较。如果 LDAP 没有组角色映射，则必须在 web.xml 中设置属性 < security-role-ref > 才能实现组角色映射。要查看配置文档的示例，请参见 [Oracle 文档](https://docs.oracle.com/cd/E19226-01/820-7627/bncav/index.html)。 
+ 数据库连接：在 Apache Tomcat 中通过 Amazon Relational Database Service (Amazon RDS) 端点 URL 和连接详细信息创建资源 使用 JNDI 查找更新应用程序代码以引用 a DataSource 。中定义的现有数据库连接 WebSphere 不起作用，因为它使用 WebSphere的 JNDI 名称。你可以<resource-ref>在 web.xml 中添加一个带有 JNDI 名称和 DataSource 类型定义的条目。若要查看示例配置文档，请参阅 [Apache Tomcat](https://tomcat.apache.org/tomcat-8.0-doc/jndi-resources-howto.html#JDBC_Data_Sources) 文档。
+ 日志记录：默认情况下，Apache Tomcat 将日志记录到控制台或日志文件中。您可通过更新 *logging.properties*（参见[Tomcat 日志记录](https://tomcat.apache.org/tomcat-8.0-doc/logging.html)），启用 realm 级追踪。如果您使用 Apache Log4j 将日志附加至文件中，则必须下载 tomcat-juli 并将其添加至 *classpath*。
+ 会话管理：如果您保留 IBM WebSEAL 用于应用程序负载平衡与会话管理，则无需进行任何更改。[如果您在 AWS 上使用应用程序负载均衡器或网络负载均衡器来取代 IBM WebSEAL 组件，则必须使用带有 Memcached 集群的 Amazon ElastiCache 实例来设置会话管理，并将 Apache Tomcat 设置为使用开源会话管理。](https://github.com/magro/memcached-session-manager) 
+ 如果您使用的是 IBM WebSEAL 转发代理，则必须设置新的适用于 AWS 的网络负载均衡器。使用 Network Load Balancer IPs 提供的 WebSEAL 接合点配置。
+ SSL 配置：我们建议您使用安全套接字层 (SSL) 进行 end-to-end通信。若要在 Apache Tomcat 中设置 SSL 服务器配置，请按照 [Apache Tomcat 文档](https://tomcat.apache.org/tomcat-8.0-doc/ssl-howto.html)中的说明进行操作。 

## 架构
<a name="migrate-from-ibm-websphere-application-server-to-apache-tomcat-on-amazon-ec2-with-auto-scaling-architecture"></a>

**源技术堆栈**
+ IBM WebSphere 应用程序服务器

 

**目标技术堆栈**
+ 该架构使用 [Elastic Load Balancing（版本 2](https://docs.aws.amazon.com/elasticloadbalancing/)）。如果您使用 IBM WebSEAL 进行身份管理和负载平衡，则可以选择适用于 AWS 的网络负载均衡器与 IBM WebSEAL 反向代理集成。
+ Java 应用程序部署到 Apache Tomcat 应用程序服务器，该服务器在 A [mazon A EC2 uto](https://docs.aws.amazon.com/autoscaling/ec2/userguide/AutoScalingGroup.html) Scaling 组中的 EC2 实例上运行。您可以基于 Amazon CloudWatch 指标（例如 CPU 利用率）设置[扩展策略](https://docs.aws.amazon.com/autoscaling/ec2/userguide/scaling_plan.html)。 
+ 如果您要停止使用 IBM WebSEAL 进行负载平衡，则可以使用 A [mazon for Memcached ElastiCache 进行会](https://docs.aws.amazon.com/AmazonElastiCache/latest/mem-ug/WhatIs.html)话管理。
+ 对于后端数据库，您可以部署 [High Availability (Multi-AZ) for Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Concepts.MultiAZ.html) 并选择数据库引擎类型。

 

**目标架构**

![](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/52b91dab-7b3b-4751-abe2-25e7c7cd8d89/images/25125023-9a81-452a-9ada-184e2416cc02.png)


## 工具
<a name="migrate-from-ibm-websphere-application-server-to-apache-tomcat-on-amazon-ec2-with-auto-scaling-tools"></a>
+ [AWS CloudFormation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)
+ [AWS 命令行界面（AWS CLI）](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-welcome.html)
+ Apache Tomcat（版本 7.*x* 或 8.*x*）
+ RHEL 7 或 Centos 7
+ [Amazon RDS Multi-AZ 部署](https://aws.amazon.com/rds/details/multi-az/)
+ [ ElastiCache 适用于 Memcached 的亚马逊](https://docs.aws.amazon.com/AmazonElastiCache/latest/mem-ug/WhatIs.html)（可选）

## 操作说明
<a name="migrate-from-ibm-websphere-application-server-to-apache-tomcat-on-amazon-ec2-with-auto-scaling-epics"></a>

### 设置 VPC
<a name="set-up-the-vpc"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 创建虚拟私有云（VPC）。 |  |  | 
| 创建子网。 |  |  | 
| 必要时创建路由表。 |  |  | 
| 创建网络访问控制列表 (ACLs)。 |  |  | 
| 设置 AWS Direct Connect 或企业 VPN 连接。 |  |  | 

### 更换应用程序平台
<a name="replatform-the-application"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 重构应用程序构建 Maven 配置，以生成 WAR 构件。 |  |  | 
| 在 Apache Tomcat 中重构应用程序依赖项数据来源。 |  |  | 
| 重构应用程序源代码，以使用 Apache Tomcat 中的 JNDI 名称。 |  |  | 
| 将 WAR 神器部署至 Apache Tomcat 中。 |  |  | 
| 完成应用程序验证与测试。 |  |  | 

### 配置网络
<a name="configure-the-network"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 配置公司防火墙，以允许连接到依赖项服务。 |  |  | 
| 将公司防火墙配置为允许最终用户访问 Elastic Load Balancing on AWS。 |  |  | 

### 创建应用程序基础设施
<a name="create-the-application-infrastructure"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在 EC2 实例上创建和部署应用程序。 |  |  | 
| 创建 Amazon f ElastiCache or Memcached 集群用于会话管理。 |  |  | 
| 为后端数据库创建 Amazon RDS Multi-AZ 实例。 |  |  | 
| 创建 SSL 证书并将其导入 AWS Certificate Manager (ACM)。 |  |  | 
| 在负载均衡器上安装 SSL 证书。 |  |  | 
| 为 Apache Tomcat 服务器安装 SSL 证书。 |  |  | 
| 完成应用程序验证与测试。 |  |  | 

### 割接
<a name="cut-over"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 关闭现有基础设施。 |  |  | 
| 将数据库从生产环境恢复至 Amazon RDS。 |  |  | 
| 通过更改 DNS 割接应用程序。 |  |  | 

## 相关资源
<a name="migrate-from-ibm-websphere-application-server-to-apache-tomcat-on-amazon-ec2-with-auto-scaling-related-resources"></a>

**参考**
+ [Apache Tomcat 7.0 文档](https://tomcat.apache.org/tomcat-7.0-doc/realm-howto.html)
+ [Apache Tomcat 7.0 安装指南](https://tomcat.apache.org/tomcat-7.0-doc/appdev/installation.html)
+ [Apache Tomcat JNDI 文档](https://tomcat.apache.org/tomcat-7.0-doc/jndi-datasource-examples-howto.html)
+ [Amazon RDS 多可用区部署](https://aws.amazon.com/rds/details/multi-az/)
+ [亚马逊 Memcac ElastiCache hed 版](https://docs.aws.amazon.com/AmazonElastiCache/latest/mem-ug/WhatIs.html)

**教程和视频**
+ [Amazon RDS 入门](https://aws.amazon.com/rds/getting-started/)