nginx - 具有 Docker swarm 模式的被动副本

标签 nginx docker docker-swarm

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

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

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

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

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

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

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

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

如果有任何想法,我将不胜感激。

最佳答案

Active Passive 副本可以通过以下部署模式实现:

模式:全局

打开相应服务的这个端口,即可以通过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 容器(具有模式:已复制)将出现在 swarm 的所有节点上。 但正如我之前所说,VAULT 和 NGINX 服务可以通过 'any_node_ip:corresponding_port_number' 获得

关于nginx - 具有 Docker swarm 模式的被动副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40686770/

相关文章:

Nginx 配置无效参数,即使它在文档中

Docker:安装docker时如何解决ubuntu中的公钥错误

docker - 如何使用 docker compose v3 在容器中直接挂载 NFS 共享/卷

docker - 如果将服务扩展到超过docker节点大小,会有什么影响?

docker - 如何在 Alpine 上的 OpenSSH 中调试无效的无密码 RSA 证书?

deployment - 为自托管服务/博客构建低功耗 HA 集群

linux - 如何更改(隐藏)Nginx 服务器签名?

php - 如何阻止客户端IP地址在Cloudflare/Docker/NGINX/LAMP站点中丢失?

ruby-on-rails - nginx:[警告] 0.0.0.0:80 上的服务器名称 ip_address 冲突,已忽略

docker 撰写 : absolute path for shared volumes in version 3