我有一个简单的 2 层布局 - 一个 Web 服务器 (托管在 Windows 上的 Websphere) 和一个 Oracle 数据库服务器。Web 服务器需要连接 Oracle 数据库服务器。
我正在尝试编写一个脚本
- 启动一个带有 Oracle 数据库的 EC2 实例
- 使用 Websphere 启动 EC2 实例
- 配置 Websphere 实例以与数据库进行通信
我被困在了第 3 步。每次运行脚本时,数据库服务器都会获得不同的 IP 地址。我该如何告诉我的 Websphere 实例“将此 IP 地址用于数据库”?
我考虑过的一些解决方案 -
- 配置 Websphere 以连接到主机名。当 DB 服务器启动并分配 IP 地址时,更新 DNS 记录(可能是 Route 53)
- 启动 websphere 实例时将 DB 服务器 ip 地址作为用户数据传递,并运行启动脚本来更新配置
- 使用弹性 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,这并不实际)。
进一步阅读:
- AWS 新闻稿:IP 地址分配
- EC2-run-instances 参考(请注意 VPC 特定选项)
- VPC 上的公共子网
答案4
只有三种可能的解决方案(当 EIP 不是一种选择时),并且您似乎已经对它们有了大致的了解:
使用动态 DNS。您可以让您的数据库使用其私有 IP 地址更新 Route53 中托管的区域。Route53 将允许非常低的 TTL。您的 websphere 服务器应该始终知道连接到您指定的 route53 A 记录,例如 mydb.internal.mydomain.com
使用标签来标记您的数据库实例角色和 IP 地址。然后让您的 Websphere 服务器查询标记为数据库服务器的实例并发现其 IP 地址
使用 VPC 并在启动时为您的 DB 实例指定私有 IP。您的 websphere 实例始终连接到相同的指定 IP。
如果没有必要的话,我会避免使用 VPC,并且根据您上面的描述,据我所知,这似乎没有必要。