使用两台机器和 docker-networking 进行零停机部署

使用两台机器和 docker-networking 进行零停机部署

是否可以使用两个 Amazon EC2 实例连接小型零停机部署 (*1)?我希望定期将我的服务迁移到新的 EC2 实例,以避免在实例本身上手动更新操作系统。

EC2-1:应用服务

EC2-2:数据库、docker 网络的 consul 注册表

EC2-1 是唯一的公共实例(绑定到 Amazon Elastic IP)。复制此实例并将 Elastic IP 更改为新的 EC2 实例应该没有问题,对吧?

但是,我不知道是否可以切换 EC2-2,因为 docker 将 docker 网络设置存储在 consul 数据库中。我可以启动该实例的副本并告诉 docker 现在应该使用新的 consul 实例进行联网吗?

(*1) 如果使用两个实例,您无法保证在实例故障等情况下实现零停机时间。我的意思是在迁移到新的 EC2 实例时实现零停机时间 :)

答案1

使用 1.12 版 Docker Swarm,要实现零停机时间,您至少需要 3 个节点。与过去的高可用性安装(当心跳信号失败时,一个节点接管主节点和共享 HA 存储)不同,Docker 传统上采用多数或法定人数模型。一旦您将写入推送到大多数节点,您就可以确保在从大多数节点读取时拥有该内容的最新版本。

在 3 个节点的 Swarm 集群中,即使一个节点发生故障,大多数节点仍可用于仲裁。请注意,您仍然需要一个可以在每个级别作为多个实例运行的应用程序,这样如果任何一个节点发生故障,该应用程序已经在另一个节点上运行以处理流量。

建议的设置是集群中有 5 个节点。这样,一个节点可以因定期维护而停机,另一个节点可以意外发生故障,而不会失去法定人数。

相关内容