【问题标题】:Docker swarm use local service instanceDocker swarm 使用本地服务实例
【发布时间】:2016-12-28 08:44:36
【问题描述】:

我尝试将项目从单主机更新到多主机平台。 所以基本上我想从 docker-compose 部署切换到 docker swarm。 我的应用程序如下所示:

我有 2 个应用程序 app1 和 app2。 app1 为 app2 创建一个巨大的文件。 该文件被写入 app1 和 app2 容器之间共享的数据卷上。 以前我使用 traefik 路由从 app1 移动到 app2。

所以现在要做到这一点,我创建了 3 个全局服务(一个用于 app1,一个用于 app2,一个用于 traefik)。它正在工作,但是当您从 app1 切换到 app2 时,traefik 可以重定向到不同的主机。 (以下方案中的红色箭头)

(traefik 规则类似于 app1.domaine.com --> app1 服务)

那么我如何才能将路由限制为仅限本地主机服务?

提前感谢您的帮助;)

【问题讨论】:

    标签: docker docker-swarm


    【解决方案1】:

    在这里推断出理想的解决方案有点困难,但我不确定--global 是否真的是你的最佳选择。查看--mount (https://github.com/docker/docker/blob/master/docs/reference/commandline/service_create.md#add-bind-mounts-or-volumes) 的文档。我想知道服务任务(容器)共享的命名卷是否比尝试创建全局服务更合适。这将在集群中的每个主机上为该服务创建容器。

    那么我如何才能将路由限制为仅限本地主机服务?

    您究竟为什么要这样做?理想情况下,您应该能够毫无问题地在服务中的任务实例之间进行负载平衡。如果您必须将请求“粘贴”到一对容器,请仅运行每个容器的一个实例并使用命名卷。

    【讨论】:

    • 首先感谢您的帮助@nathanleclaire。服务 app1 和 app2 已经挂载了一个卷(如 --mount type=volume .... )。问题来自我使用的文件的大小(因此在主机之间移动文件很长。)和第二个问题,app2 它不是无状态的。因此,当用户进入host X 时,接下来的所有操作都应该在host X 中完成。我的负载均衡器为用户分配了一台服务器,并允许在发生故障时迁移到另一台服务器。 (但它可能有点长)。这就是为什么我只需要在当前主机内部route 用户。这可能吗?
    • 在我的例子中,我需要非常快的请求,并且我的 swarm 被复制到世界各地。当有人到达欧洲节点上运行的服务并且该服务需要向群中的另一个服务发出请求时,它应该非常强烈地更喜欢位于同一节点上的服务实例并且只如果本地节点不可用,则回退到在亚洲节点上运行的服务。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多