我们想要为一个 Java 应用程序设置故障转移机制,该应用程序在一台服务器上有 3 个实例,每个实例都必须通过不同的 url 访问,这些 url 已经注册并可通过 dns 访问。在辅助服务器上我们进行复制(重要的是实例只能在一台物理机器上启动和运行),因此我们建立了辅助服务器以防主服务器出现故障,我们想要为一个域注册多个 IP,但这会导致麻烦,因为应用程序设计为只有一个 IP 注册到实例 url。多个 ip 设置的另一个问题是 dns 的循环性质。是否可以为一个域注册两个 IP,并通过 nginx 或 HAproxy 代理它以仅指向主服务器?或者其他想法?我的想法是,如果主服务器出现故障,则在辅助服务器上打开应用程序并尽可能更改 nginx 端的配置,以避免 dns 注册和传播时间?
答案1
我要做的是接受域名实际名称的传入流量,然后手动进行路由/故障转移。
IE
example.com > nginx 服务器 > server1.(如果失败)> server2.
http { 上游 java-app { 服务器 $primary-server; 服务器$secondary-服务器备份; } 服务器 { 地点 / { 代理密码 http://java-app; proxy_set_header 主机 "example.com"; proxy_next_upstream 错误 http_502; } } }
通过使用此方法,您的后端服务器无需担心 DNS。只有 Nginx 才会有指向它的 DNS 记录。您的后端服务器只需担心处理传入流量,如果服务器primary-server
挂了……辅助服务器将接管!
通过在其中添加主机标头,您的后端服务器仍然可以匹配其代码中的“主机”标头。:)