EC2 IP 地址:Web 服务器如何在启动时识别数据库服务器 IP 地址?

EC2 IP 地址:Web 服务器如何在启动时识别数据库服务器 IP 地址?

我有一个简单的 2 层布局 - 一个 Web 服务器 (托管在 Windows 上的 Websphere) 和一个 Oracle 数据库服务器。Web 服务器需要连接 Oracle 数据库服务器。

我正在尝试编写一个脚本

  1. 启动一个带有 Oracle 数据库的 EC2 实例
  2. 使用 Websphere 启动 EC2 实例
  3. 配置 Websphere 实例以与数据库进行通信

我被困在了第 3 步。每次运行脚本时,数据库服务器都会获得不同的 IP 地址。我该如何告诉我的 Websphere 实例“将此 IP 地址用于数据库”?

我考虑过的一些解决方案 -

  1. 配置 Websphere 以连接到主机名。当 DB 服务器启动并分配 IP 地址时,更新 DNS 记录(可能是 Route 53)
  2. 启动 websphere 实例时将 DB 服务器 ip 地址作为用户数据传递,并运行启动脚本来更新配置
  3. 使用弹性 IP 地址 - 但这需要通过互联网路由数据库流量,对吗?

这些解决方案似乎都比平常更费力。我是不是漏掉了什么?解决这个问题的标准方法是什么?

编辑赏金 弹性 IP 地址解决方案有效,但我不喜欢在永远不应该连接到互联网的服务器上使用浪费的公共 IP 地址。我很想知道您使用过其他解决方案来解决这个问题。

答案1

您可以使用弹性 IP,但通过其域名进行连接,它将解析为内部地址。因此,您显然可以从弹性 IP 中派生出 DNS 名称,例如ec2-46-147-161-187.eu-west-1.compute.amazonaws.com对应于 eu-west-1 中的 46.147.161.187。该域将被修复,因此您可以根据需要对其进行硬编码。

https://forums.aws.amazon.com/message.jspa?messageID=299889

答案2

您必须假设您不能使用像 DHCP 这样的广播响应机制来完成这项工作,这意味着唯一的选择就是在某个地方更新和查询某个目录。

动态 DNS(例如 DNS 更新;RFC 2136)是一个显而易见的解决方案。如果您已经有名称服务器,此解决方案大约需要 5 分钟即可完成设置。请参阅http://linux.yyz.us/nsupdate/bind有关设置动态更新和使用命令的快速入门教程nsupdate。请参阅这篇博文有关将 DDNS 与 Route 53 结合使用的信息。

另外,您也可以使用某个 Web 服务器上的简单私有 PHP 脚本之类的东西来推出自己的解决方案,以处理 IP 注册更新和查询响应机制。显然,这种解决方案更灵活一些,但它缺乏 DDNS 的简洁优雅。

答案3

我建议一个解决方案是使用亚马逊的虚拟私有云 (VPC) - 这听起来像是一个很好的用例。(此外,在这种情况下,VPC 没有额外的成本)。

本质上,您可以创建一个新的 VPC 并在该 VPC 内创建一个公共子网(通常为 10.0.0.0/24)。然后将两个实例都启动到子网中。

  • 将 websphere 实例启动到子网中,然后将弹性 IP 与其关联
    • 注意:您需要特殊的 VPC 弹性 IP - 常规 IP 在 VPC 中不起作用 - 分配它们时,将域指定为“vpc”。
  • 启动 Oracle 实例,并传递PrivateIpAddress来自子网的有效 IP 地址的参数。
    • 这会将请求的私有 IP 分配给您的实例,它将可供 VPC 中的其他实例使用(但如果 VPC 中没有弹性 IP,则无法访问互联网),并且您不会浪费公共 IP 地址。值得注意的是,VPC 地址会在实例的整个生命周期内保留 - 即使实例停止,地址也不会分离。此外,您无法使用弹性 IP 在 VPC 中的实例之间路由流量。

当然,在此设置或任何不使用 NAT 的设置中,每个具有任何类型的互联网访问权限的实例都将被分配一个公共 IP(即使它不是弹性 IP 地址)。只有使用配置了路由的 NAT 实例的私有和公共子网,您才能允许实例完全没有公共 IP,但仍然能够访问互联网。(当然,缺点是,对于小型设置 - 例如 2 个实例 - 您需要第 3 个实例来执行 NAT,这并不实际)。

进一步阅读:

答案4

只有三种可能的解决方案(当 EIP 不是一种选择时),并且您似乎已经对它们有了大致的了解:

  1. 使用动态 DNS。您可以让您的数据库使用其私有 IP 地址更新 Route53 中托管的区域。Route53 将允许非常低的 TTL。您的 websphere 服务器应该始终知道连接到您指定的 route53 A 记录,例如 mydb.internal.mydomain.com

  2. 使用标签来标记您的数据库实例角色和 IP 地址。然后让您的 Websphere 服务器查询标记为数据库服务器的实例并发现其 IP 地址

  3. 使用 VPC 并在启动时为您的 DB 实例指定私有 IP。您的 websphere 实例始终连接到相同的指定 IP。

如果没有必要的话,我会避免使用 VPC,并且根据您上面的描述,据我所知,这似乎没有必要。

相关内容