我正在尝试找出在Docker Swarm模式下实现主/备故障转移的适当方法。
该服务将保存一个有价值的内存状态,不能丢失,这就是为什么我需要多个副本的原因。这些副本将在内部实现Raft,以便每次只有处于活动状态(“领导者”)的副本会接受客户端的请求。
(如果您不熟悉Raft:简单来说,它是一种分布式共识算法,可以帮助实现主/备容错副本集群。根据Raft协议,活动副本 - 领导者 - 将其数据的更改复制到被动副本 - 跟随者。只有领导者会接受客户端的请求。如果领导者失败,则在跟随者中选举新的领导者。)
据我所知,Docker将保证指定数量的副本正在运行,但它将以主/备的方式在所有副本之间平衡传入的请求。
我该如何告诉Docker仅将请求路由到活动副本,但仍保证所有副本都在运行?
一种选项是通过额外的
我还试图避免使用外部/重叠的工具,例如
我遇到的另一种方法是从被动副本返回失败的健康检查。根据这个答案,它可以在
我很感谢任何想法。
该服务将保存一个有价值的内存状态,不能丢失,这就是为什么我需要多个副本的原因。这些副本将在内部实现Raft,以便每次只有处于活动状态(“领导者”)的副本会接受客户端的请求。
(如果您不熟悉Raft:简单来说,它是一种分布式共识算法,可以帮助实现主/备容错副本集群。根据Raft协议,活动副本 - 领导者 - 将其数据的更改复制到被动副本 - 跟随者。只有领导者会接受客户端的请求。如果领导者失败,则在跟随者中选举新的领导者。)
据我所知,Docker将保证指定数量的副本正在运行,但它将以主/备的方式在所有副本之间平衡传入的请求。
我该如何告诉Docker仅将请求路由到活动副本,但仍保证所有副本都在运行?
一种选项是通过额外的
NGINX
容器路由所有请求,并在每次选举新领导者时更新其规则。但这将是一个额外的跳跃,我想避免。我还试图避免使用外部/重叠的工具,例如
consul
或kubernetes
,以使解决方案尽可能简单。(HAProxy
不是一个选项,因为我需要一个Linux/Windows便携式解决方案)。因此,目前我正在尝试了解是否可以仅使用Docker swarm mode
来完成这项工作。我遇到的另一种方法是从被动副本返回失败的健康检查。根据这个答案,它可以在
kubernetes
中实现,但我不确定它是否适用于Docker。Swarm管理器如何解释来自任务容器的失败的健康检查?我很感谢任何想法。