我有一个在多台服务器(节点)上运行的 Docker Swarm 集群。Docker Swarm 使用循环机制来处理对我的服务的请求,无论哪台服务器接收到请求,它都能正常工作。
现在我想知道如何将 URL 路由到此设置以使其具有高可用性。
我使用欧洲DNS(eurodns.com),并将域名的A记录设置为多个IP地址(Swarm集群服务器)。
总体而言,这似乎没问题,因为 DNS 以循环方式为其提供服务,并且即使它被缓存,由于 Docker Swarm,命中的节点也会以循环方式为其提供服务。
但是,如果某个节点/服务器彻底失败怎么办?我还能获得高可用性吗?
即使我使用另一个 HAProxy 负载均衡器或类似产品,似乎也总是存在 DNS 被绑定到某个 IP 地址的问题?那么,如果 HAProxy 服务器完全失败,情况会是相同的吗?
答案1
循环 DNS 应该适用于大多数情况,尽管当对一个 IP 的请求超时并且客户端最终重试列表中的下一个 IP 时会出现延迟。它无法解决部分故障,即主机正在响应网络请求但应用程序(例如 docker)没有响应或给出错误响应。
负载均衡器通过几种方式改善了这种情况。首先,它可以使用可配置的探测器轮询应用程序的运行状况,并仅向运行状况良好的实例发送请求。这避免了部分故障的情况。其次,可以使用虚拟 IP 配置多个负载均衡器,从而允许备份负载均衡器接管请求,而无需等待客户端的 DNS 超时。