我当前设置的简化版本如下:
- 3 个虚拟机:VM1、VM2、VM3
- 它们每个都运行一个
docker-compose
包含 tomcat 应用程序和 DB 的堆栈。
数据库每晚根据原始数据重新创建(运行包含索引应用程序的 docker 容器)。
这是通过 crontab 作业实现的,这些作业经过安排,以便在任何给定时间只有 1 个 VM 处于维护状态。
现在,这将扩展到更多虚拟机,并且可能每个虚拟机有此堆栈的多个副本。我正在研究 docker swarm 堆栈以简化部署和管理。
具体问题是:
一旦通过 Swarm 管理部署,特别是如果服务被复制到每个 VM 的 1 个以上实例中,我该如何管理夜间数据库重新创建,以便:
- 所有数据库均已重建
- 我可以控制集群中有多少服务实例在任意给定时间处于维护模式吗?
我想我可以将问题重新表述为:如何在服务级别(相对于节点级别)控制维护?
我确实知道 Swarm 节点可以独立耗尽并进入维护模式。问题是每个节点可以包含多个服务副本,并且每个副本都需要自己维护。
答案1
Swarm 服务没有维护模式。
您还不能在 Swarm 服务中运行任务,也不能从路由网格和 VIP 负载均衡器控制每个任务的启用/禁用。
您可以以各种方式发挥创造力,控制数据库是否在端口上监听以及它如何更新数据(可能是入口点脚本),但要回答这个问题,您需要了解更多有关系统要求、数据流、数据库更新与客户端访问需要连接的内容,以及您是否使用卷驱动程序来处理数据库数据等内容。所以这将是一个不同的问答 :)