0

我正在尝试为我的(也许很简单)问题找出最佳解决方案。

我有一个(一个)docker compose 文件和一些服务:

  • 休息 Api (java)
  • 蒙哥
  • 雷迪斯

其余的 api 需要可扩展。Java-1、Java-2、Java-3 等

您在下面看到的是 3 个不同的主机。当我的所有主机都启动时,编写所有脚本的最佳解决方案是什么?我希望能够在 3 个不同的主机上docker-compose up -d执行类似的操作并生成我的服务。

我知道 docker swarm 可以做一些事情。我还阅读了与 Swarm 结合的 Weave 网络。老实说,我很难把所有东西放在一起。了解如何使其基本工作......

Java 主机将被负载平衡(当然)。

我的主机 1 会成为我的集群管理器吗?主机 2 和 3 工人?我该如何管理这个。?

你有什么建议?Rancher、Portainer、Docker-Machine、其他……?

     Host 2
+-------------+                               
|             |                               
|   Java 1    |               Host 1       
|             |---\      +-------------------+
+-------------+    ---\  |                   |
                       --|   Mongo, Redis    |
    Host 3             --|                   |
+-------------+     --/  +-------------------+
|             |  --/                          
|   Java 2    |-/                             
|             |                               
+-------------+                               

    Host #
    ...

编辑:我的 RestApi 服务和数据库之间的链接需要加密。

4

1 回答 1

2

正如您所提到的,Docker Swarm 可以用来解决您的问题。最初您应该了解的是您的 Java (API)、Mongo 和 Redis 不应被识别为主机。他们将是码头服务在群模式。因此,在您的情况下,您的 docker swarm 中将拥有三个服务。在您的主机上扩展它是一项使用 Docker Swarm 完成的工作。正如您所提到的,您的 Java (API) 应该进行扩展,作为起点,假设您将从 3 个 Java (API) 服务开始,因此假设您的 Docker Swarm 中有三台主机,一台是经理,另外两台是工人(决定哪台主机成为管理器,哪台主机是工作人员取决于您),您只需要创建三个 Java (API) 服务副本,Docker Swarm 将在这三台主机上运行这三个副本,即使一台主机出现故障,Docker Swarm 也会自动将流量重定向到运行容器的主机,并且将始终运行您告诉它运行的副本数量。这意味着如果容器失败,它将被重新创建。这些服务可以根据您的目的使用简单的命令轻松扩展。所以一个很好的起点是阅读Docker Swarm 官方文档本身。然后按照官方swarm教程

在 Docker swarm 模式中,有一个称为堆栈的功能,堆栈可以让您简单地将完整的应用程序堆栈部署到 swarm。你可以从这里读到它。就您而言,正如您所提到的,您已经拥有可用于部署堆栈的撰写文件。您需要更新现有的撰写文件以匹配您需要在应用程序堆栈中拥有的配置。只需在 docker-compose.yml 文件中提及您想要什么以及您想要它的方式,Docker Swarm 就会为您创建它。

在您阅读了这些概念并准备好 Docker Swarm 设置和主机以及所有 Workers 和 Managers 设置之后,请按照这个很棒的Docker Swarm 投票应用程序示例。阅读该示例的 Docker Stack 文件,这将使您了解如何正确定义应用程序堆栈,这将使您对 Docker Stacks 有深入的了解,并使用相同的示例文件作为设计应用程序堆栈的基础。

之后,就是部署堆栈的问题了。只需运行docker stack deploy -c docker-compose.yml yourAppName.

在这一切中添加另一点是,您可以在 Docker中创建一个单独的覆盖类型网络,专门用于您的应用程序。这将允许在多个 Docker 守护程序主机(节点)之间建立分布式网络。

编辑 - 所有 swarm 服务管理流量默认加密,在GCM模式下使用 AES 算法。--opt encrypted您也可以在创建覆盖网络时通过添加来加密应用程序数据。正如文档所述,这将带来不可忽略的性能损失,因此在生产中运行该功能之前需要进行测试。请参阅6加密覆盖网络上的流量部分。

希望这个解释能帮助您了解 Docker Swarm 将如何解决您的问题并澄清您面临的问题。

于 2018-03-02T15:48:29.860 回答