Docker swarm模式的被动副本

fel*_*x-b 10 nginx docker docker-swarm

我正试图找出一种在Docker swarm模式下在服务副本之间实现主动/被动故障转移的正确方法.

该服务将保持一个不会丢失的有价值的内存状态,这就是我需要多个副本的原因.副本将在内部实现Raft,因此只有在给定时刻处于活动状态("领导者")的副本才会接受来自客户端的请求.

(如果你不熟悉Raft:简单地说,它是一个分布式共识算法,它有助于实现主动/被动容错的复制群集.根据Raft,主动副本 - 领导者 - 将其数据的变化复制到被动副本 - 追随者.只有领导者接受客户的请求.如果领导者失败,则在追随者中选出新的领导者).

据我所知,Docker将保证指定数量的副本启动并运行,但它将以主动/主动方式平衡所有副本之间的传入请求.

如何告诉Docker仅将请求路由到活动副本,但仍保证所有副本都已启动?

一种选择是通过另一个NGINX容器路由所有请求,并在每次选出新的领导者时更新其规则.但这将是一个额外的跳跃,我想避免.

我也试图避免使用外部/重叠工具,consul或者kubernetes为了使解决方案尽可能简单.(HAProxy不是一个选项,因为我需要一个Linux/Windows便携式解决方案).所以目前我正在努力了解是否可以单独完成Docker swarm mode.

我遇到的另一种方法是从被动副本返回失败的健康检查.它与技巧kubernetes 根据这个答案,但我不知道它会与码头工人工作.群集管理器如何解释来自任务容器的失败健康检查?

我很感激任何想法.

小智 0

主动被动副本可以通过以下部署模式来实现:

模式:全球

相应服务的此端口打开,即可以通过 swarm 中的任何节点访问服务,但容器将仅在特定节点上运行。

参考: https: //docs.docker.com/compose/compose-file/#mode

示例:带有 Consul 后端 docker 堆栈文件的 VAULT-HA: https://raw.githubusercontent.com/gtanand1994/VaultHA/master/docker-compose.yml

在这里,Vault 和 Nginx 容器仅出现在 swarm 的一个节点中,但 Consul 容器(具有模式:replicated)将出现在 swarm 的所有节点上。但正如我之前所说,VAULT 和 NGINX 服务可通过“any_node_ip:corresponding_port_number”获得