Docker 集群和卷

Docker 集群和卷

考虑到 Docker 1.12。我理解卷不能在群集间移植,而像 Flocker 这样的解决方案更适合较大的群集。

尽管如此,我下面描述的选项是否适合我的设置?

设置 一个由 3 个节点组成的集群,运行来自实验分支的 Docker 1.12.latest。

目标 运行一个不错但较小的 Cassandra 集群。

问题 我想解耦有状态的服务的一部分(数据量)来自无国籍者Cassandra 守护进程。

建议的解决方案 在每个节点上手动创建一个命名卷,每个节点上的名称相同。使用docker service create --name cassandra --replicas 3 --mount type=volume,source=cassandra_data,target=/usr/var/cassandra

我的理解是,每个节点都会运行一个 Cassandra 副本,每个副本都引用一个具有相同名称的本地命名卷。

这可行吗?我是否需要指定一个约束来确保群集中每个节点最多有 1 个副本?

编辑:阅读文档后,我似乎应该使用--mode=global而不是replicas=3在群集的每个节点上运行 1 个副本。这很有意义...

答案1

是的,这确实有效,使用全局标志将是防止任何冲突的更好选择。我已经使用 MongoDB 运行了类似的模型作为测试,并且运行良好。

答案2

从 19.03 版本开始,现在有一个选项可以限制每个节点的副本数量,以避免多个副本访问同一个卷:

$ docker service create --help

Usage:  docker service create [OPTIONS] IMAGE [COMMAND] [ARG...]

Create a new service

Options:
...
      --replicas-max-per-node uint         Maximum number of tasks per node (default 0 = unlimited)

将其添加到service create命令后,下一步将在撰写文件中添加放置偏好以支持docker stack deploy

相关内容