Docker swarm模式的被动副本

时间:2016-11-18 22:14:27

标签: nginx docker docker-swarm

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

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

If you're unfamiliar with Raft:简单地说,它是一种分布式一致性算法,它有助于实现主动/被动容错的复制群集。根据Raft,主动副本 - 领导者 - 将其数据的变化复制到被动副本 - 追随者。只有领导者接受客户的请求。如果领导者失败,则在追随者中选出新的领导者。

据我了解,Docker将保证指定数量的副本已启动并正在运行,但它将以主动/主动方式平衡所有副本中的传入请求。

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

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

我还试图避免外部/重叠工具,例如consulkubernetes,以使解决方案尽可能简单。 (HAProxy不是一个选项,因为我需要Linux / Windows便携式解决方案)。因此,目前我正在尝试了解是否可以单独使用Docker swarm mode来完成此操作。

我遇到的另一种方法是从被动副本返回失败的运行状况检查。它使用kubernetes according to this answer来解决问题,但我不确定它是否适用于Docker。群集管理器如何解释来自任务容器的失败健康检查?

我很感激。

1 个答案:

答案 0 :(得分:0)

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

模式:全局

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

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

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

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