来自 VMware 环境,我的整个过程是这样的,
- 多台 Docker 机器(群),挂载相同的 NFS 数据存储
- 在 Docker Swarm 上部署了一个容器(例如 Maria dB)
- 如果集群中的一个节点发生故障,服务仍然在其他节点上运行
所以我安装了/var/lib/docker/volumes在 NFS 共享上,在多台 Docker 机器上尝试创建一个集群。但最终我发现,如果多台 Docker 机器挂载同一个 NFS 数据存储,Docker 服务只能在其中一个节点上启动。
所以我想我的问题是,如何创建一个群,让相同的服务在多个节点上运行,并且数据保存在 NFS 共享上?
当然,很有可能我还没有完全理解 Docker Swarm 的工作原理,而且我从错误的角度来看待这个问题。
答案1
正确,你不想在 /var/lib/docker 中共享任何内容,即数据和配置该引擎位于单个服务器上。
在集群中,你可以将节点添加到集群中,作为管理者或工作者,然后管理者复制存储集群配置和状态的 Raft 共识数据库。
然后,您可以创建具有同一容器映像的一个或多个副本的服务,并根据需求和可用性在各个节点上启动这些副本。
对于数据库,您要处理的是持久数据(每个数据库实例的数据库和日志)。这与 Docker 卷(您存储持久数据的位置)有关,特别是您选择的卷驱动程序。默认情况下,只将该服务副本(容器)的卷存储在其当前运行的节点上。如果您希望该数据库容器能够自动在新的节点上失败并启动(容器编排器的功能之一),您需要使用不同的卷驱动程序,该驱动程序是“群集感知”的,并且知道如何确保 NFS 挂载放置在正确的节点上,以便为正确的服务副本做好准备。
您可以查看REX 射线它充当管理外部存储卷的中间层(并且有自己的后端类型驱动程序)或查看Docker Store 中的完整列表。