我们遇到以下情况:在服务器上,我们必须设置 2 个 IP,它们将引用相同的 FQDN。在服务器上运行的应用程序中,我们正在配置 FQDN。一旦访问一个 IP(基于 FQDN)出现问题,服务器将使用分配给同一 FQDN 的第二个 IP:
示例:
/etc/hosts
将包含
1.1.1.1 server1.google.com
1.1.2.1 server1.google.com
一旦访问1.1.1.1出现问题,服务器将使用server1.google.com作为1.1.2.1
我们可以使用这样的东西吗?还有其他选择吗?
答案1
/etc/hosts 不会循环。它只返回它找到的第一个匹配项。
如果您想要循环解析,则需要一个完整的 DNS 服务器来执行此操作。
此外,循环 DNS 并不是一个很好的负载平衡工具,而这正是您想要的。尽管看起来很方便,但名称解析并不是执行您想要执行的操作的层。
答案2
如果不想或无法更改应用程序,则必须在运行应用程序的服务器和要连接的两台服务器之间的某个位置放置一个负载平衡层。这将允许:
- 继续使用相同的 DNS 名称,甚至相同的 IP 地址(负载均衡器将创建一个虚拟 IP)
- 依次定向到所有服务器
- 避免连接到任何出现问题时会消失的服务器
- 如有必要,允许与同一目标保持身份验证会话
对于负载平衡解决方案,您可以查看Linux LVS 项目。
如果支持的话,您还可以更改您的应用程序,以在任何连接字符串中提供两个 IP。将使用第一个 IP,如果没有响应,则将使用第二个 IP。但这在很大程度上取决于用于构建应用程序的语言。例如,这可以通过 Java 数据库连接器实现。