具有 HA 的本地 docker 集群部署

On-prem docker swarm deployment with HA

我正在使用 docker swarm 进行本地部署,我需要应用程序和数据库的高可用性。

应用程序 HA 而言,它在 docker(服务发现和负载平衡)中运行良好,但我不确定如何使用它在我的网络上。我的意思是如何为我的所有 docker 管理器分配一个虚拟 IP,以便在其中任何一个出现故障时,该虚拟 IP 会自动指向集群中的另一个 docker 管理器。我不想在我的架构中出现单点故障,这就是为什么我不倾向于在我的 swarm 集群前使用任何(单一)反向代理解决方案(因为据我了解,如果 nginx/HAProxy 宕机,整个系统将陷入深渊。我很想知道我错了)。

其次,我在我的应用程序中使用 WebSockets 进行推送通知,因为套接字握手会失真,所以它在所有负载平衡方面都表现不正常。

我想要一个解决这些问题的方法,而无需在代码中编写任何内容(特定于 HA 的和非通用的,如硬编码 IP 等)。有什么建议么?我希望我正确地解释了我的问题。

Docker Flow Proxy or Traefik 可以放置在一组要接收传入连接流量的 swarm 节点上,并使用 DNS 路由将数据包发送到正确的容器。两者都有粘性会话选项(我知道 Docker Flow 有,不确定 Traefik)。

那么您可以:

  1. 如果您的传入连接只是客户端 HTTP/S 请求,您可以使用具有多个 A 记录的 DNS 循环,效果很好,或者
  2. 通过昂贵的硬件容错反向代理,如 F5
  3. 在 OS 和物理网络级别使用一些 network-layer IP 故障转移(实际上与 Docker 无关),但我不确定它的效果如何与群。

数字 2 是私有数据中心的典型解决方案,所有层都需要完整的 HA。