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”获得
| 归档时间: |
|
| 查看次数: |
925 次 |
| 最近记录: |