部署连接到 MySQL Database 服务的 Apache Tomcat

Apache Tomcat ®是开源 Java 应用程序服务器。它实现 Java Servlet、JavaServer Pages、Java 表达式语言和 Java WebSocket 技术。

MySQL Database 服务是完全托管的 Oracle Cloud Infrastructure 本机服务。它由 Oracle 上的 MySQL 团队开发、管理和支持。备份和恢复、数据库和操作系统打补丁等任务是自动化的。您只负责管理数据、方案设计和访问策略。

体系结构

引用体系结构包含负载平衡器、带有 Apache Tomcat 的应用程序层以及带有启用 HA 的 MySQL Database 服务的数据库层。

组件位于不同的子网中。负载平衡器位于公共子网中。Tomcat 服务器共享专用子网,数据库位于自己的专用子网中。所有外部访问都通过 Internet 网关通过负载平衡器进行。

启用 HA 的 MySQL Database 服务是集群的抽象服务。它有三个 MySQL 实例,但有一个端点。一个实例是主实例,另外两个实例是辅助实例。主端点具有单个端点,允许读取和写入数据库。辅助节点接收来自主节点的复制数据。不允许直接访问辅助节点。

如果发生故障或手动切换,其中一个辅助节点将成为新的主节点,并且端点将重定向到该节点。这意味着端点 IP 地址从不更改,无需更新应用程序。

包含使用数据库显示应用程序会话管理的示例应用程序。

下图说明了此引用体系结构。

后面是 Architecttecture-deploy-tomcat-mds-ha.png 的说明
插图 architecture-deploy-tomcat-mds-ha.png 的说明

architecture-deploy-tomcat-mds-oracle.zip

如果子网是区域性的,则会将三个 MySQL 实例放置在不同的可用性域和故障域之间。在具有单个可用性域的区域中,MySQL 实例位于同一可用性域中的不同故障域中。

体系结构包含以下组件:

  • 区域

    Oracle Cloud Infrastructure 区域是一个本地化地理区域,包含一个或多个数据中心,称为可用性域。区域独立于其他区域,其距离很大(跨越国家或甚至大陆)可以分开。

  • 可用性域

    可用性域是区域内的独立独立数据中心。每个可用性域中的物理资源都与其他可用性域中的资源隔离,这些资源提供故障容差。可用性域不共享基础设施,例如电源、冷却或内部可用性域网络。因此,一个可用性域的故障不可能影响该区域中的其他可用性域。

  • 故障域

    故障域是可用性域中的一组硬件和基础结构。每个可用性域都有三个具有独立电源和硬件的故障域。在多个故障域之间分配资源时,应用程序可以容忍故障域中的物理服务器故障、系统维护和电源故障。

  • 虚拟云网络 (VCN) 和子网

    VCN 是可在 Oracle Cloud Infrastructure 区域中设置的自定义软件定义网络。与传统的数据中心网络一样,VCN 允许您完全控制您的网络环境。一个 VCN 可以具有多个不重叠的 CIDR 块,您可以在创建 VCN 后更改这些块。您可以将 VCN 细分到子网,从而限定在区域或可用性域范围内。每个子网都包含不与 VCN 中的其他子网重叠的连续地址范围。创建子网后可以更改子网的大小。子网可以是公共子网,也可以是专用子网。

  • 负载平衡器

    Oracle Cloud Infrastructure Load Balancing 服务提供从单个入口点到后端多个服务器的自动通信分配。

  • 安全列表

    对于每个子网,可以创建安全规则,以指定必须允许进出子网的源、目标和流量类型。

  • 路由表

    虚拟路由表包含用于将流量从子网路由到 VCN 外部的目标的规则,通常是通过网关路由。

  • Internet 网关

    Internet 网关允许 VCN 中的公共子网与公共 Internet 之间的通信。

  • Tomcat 服务器

    Tomcat 服务器托管 Java Servlet、JavaServer Pages、Java 表达式语言和 Java WebSockets。此层中存在您的应用程序。

  • 数据库服务器

    Tomcat 可以连接到提供 Java 数据库连接 (JDBC) 的任何数据库。此体系结构使用 MySQL Database 服务。

  • 底座主机

    堡垒主机是一个计算实例,用作云外部拓扑的安全受控入口点。堡垒主机通常预配在非军事区 (DMZ) 中。它使您可以通过将敏感资源放置在无法直接从云外部访问的专用网络中来保护敏感资源。拓扑有一个已知的单个入口点,您可以定期监视和审计。因此,可以避免公开拓扑的更敏感的组件,而不会影响对这些组件的访问。

建议

您的要求可能与此处描述的体系结构不同。使用以下建议案作为起点。

  • VCN

    创建 VCN 时,根据您计划连接到 VCN 中子网的资源数,确定所需的 CIDR 块数和每个块的大小。使用标准专用 IP 地址空间内的 CIDR 块。

    选择不与要设置专用连接的任何其他网络(在 Oracle Cloud Infrastructure、内部部署数据中心或其他云提供商中)重叠的 CIDR 块。

    创建 VCN 后,您可以更改、添加和删除其 CIDR 块。

    设计子网时,请考虑流量和安全要求。将特定层或角色中的所有资源附加到可用作安全边界的同一子网。

  • 负载平衡器

    此体系结构使用始终免费层中包含的 10-Mbps 负载平衡器。根据所需的同步连接数和总吞吐量,您可以使用更大的形状。可以随时编辑吞吐量。

    建议您使用 DNS 名称,因为无法保留负载平衡器的 IP 地址。

  • 实例

    所有租户都会获得两个始终免费的计算虚拟机 (Always Free Compute Virtual Machine, VM) 实例,此体系结构用于 Tomcat 服务器。

    如果需要更多的处理功率,可以选择不同的形状。

  • 数据库系统

    连接到 MySQL:安装最新的 MySQL 客户机,并从 MySQL Yum 资料档案库安装 MySQL Shell。有关使用 MySQL Yum 资料档案库的链接,请参阅更多信息部分。

  • 存储

    此体系结构中的实例使用常规块存储;不需要额外的性能。

  • 网络连接

    您可以通过使用站点到站点的 VPN 或与 FastConnect 的专用连接连接到现有内部部署基础结构来管理环境。

    如果环境需要与现有基础结构分离或在外部访问,则堡垒主机可以保护管理连接。堡垒主机通常预配在非军事区 (DMZ) 中。它通过将敏感资源置于无法直接从云外部访问的专用网络中来保护敏感资源。可以避免公开体系结构中更敏感的组件,而不会影响对这些组件的访问。

考虑事项

部署此引用体系结构时,请考虑以下几点。

  • 性能

    您可以通过分别更改实例形状(如果使用 Intel 系列)或 OCPU 和内存(如果使用 AMD 系列)来调整性能以满足应用程序特定的需求。

    此时无法更改数据库实例。在创建时选择合适的大小。

  • 安全性

    除了堡垒主机(如果存在)和负载平衡器之外,所有组件都应放置在专用子网中。

    如果需要严格的安全性,请考虑利用 Oracle 安全区。免费提供。

  • 可用性

    负载平衡器随附一个备用实例,如果发生故障转移,则不需要进行干预。

    Tomcat 服务器将作为一对部署,并由负载平衡器进行平衡。每个 Tomcat 实例都位于不同的故障域中。

    根据需要备份数据库以匹配预期的恢复点目标 (RPO)。

    尽管不常见,但请调整 MySQL Database Service 的维护窗口以满足您的组织的需求。

  • 成本

    此体系结构的成本因实例、数据库和负载平衡器的大小和形状而异。没有具有可变成本的组件。

部署

部署此引用体系结构所需的代码在 GitHub 中可用。单击一次即可将代码拉入 Oracle Cloud Infrastructure Resource Manager,创建堆栈并部署该堆栈。或者,也可以使用 Terraform CLI 将代码从 GitHub 下载到计算机,定制代码并部署体系结构。

  • 使用 Oracle Cloud Infrastructure Resource Manager 进行部署:
    1. 单击部署到 Oracle Cloud

      如果尚未登录,请输入租户和用户身份证明。

    2. 复核并接受条款和条件。
    3. 选择要在其中部署堆栈的区域。
    4. 按照屏幕上的提示和说明创建堆栈。
    5. 创建堆栈后,单击 Terraform 操作,然后选择规划
    6. 等待作业完成,然后复查计划。

      要进行任何更改,请返回“堆栈详细信息”页,单击编辑堆栈,然后进行所需的更改。然后,再次运行计划操作。

    7. 如果不需要进一步更改,请返回“堆栈详细信息”页,单击 Terraform 操作,然后选择应用
  • 在 GitHub 中使用 Terraform 代码进行部署:
    1. 转到 GitHub
    2. 将资料档案库克隆或下载到本地计算机。
    3. 按照 README 文档中的说明操作。

更改日志

此日志仅列出重大更改: