【问题标题】:Docker-ized Consul, Zookeeper and Kafka in Amazon-ECSAmazon-ECS 中的 Docker 化 Consul、Zookeeper 和 Kafka
【发布时间】:2017-10-13 15:30:03
【问题描述】:

我正在尝试将 dockerized Kafka(使用 Zookeeper)部署到 AWS。我已经梳理了几个资源,并接近了。但是当我 ssh 进入 AWS 中的 Kafka 盒子时,我可以看到 Kafka 以 -1 退出。我只能假设 Kafka 无法访问 Zookeeper,因为我还没有设置任何名称解析。我正在将 Consul 视为解决此问题的方法(请参阅 here)。

这看起来像一个不错的resource。但我什至无法成功运行官方 Consul docker image(无论是服务器模式还是代理模式)。我可以让this one 工作(使用here)。但如果可能的话,我想使用官方图像。

有没有人获得与 Kafka 和 Zookeeper 合作的官方 Consul 图像?

A) 首先,我想我想让它在 docker-compose 中运行。这是我的 docker-compose.yml file,我试图让 Kafka 使用 Consul 来发现 Zookeeper 节点。

以下是相关代码块,您可以使用docker-compose up consul 运行它。这不会显示任何错误。但是 i) 我无法联系到 http://localhost:8500ii)然后我如何将 Kafka 指向 Zookeeper 并将 Kafka 客户端指向 Kafka?

version: '2'
services:

  consul:
    image: consul:0.8.3
    expose:
      - 8300
      - 8301
      - 8301/udp
      - 8302
      - 8302/udp
      - 8400
      - 8500
      - 8600
      - 8600/udp
    ports:
      - 8300:8300
      - 8301:8301
      - 8301/udp:8301/udp
      - 8302:8302
      - 8302/udp:8302/udp
      - 8400:8400
      - 8500:8500
      - 8600:8600
      - 8600/udp:8600/udp
    command: "agent -server -bind=0.0.0.0 -retry-join=0.0.0.0 -bootstrap-expect=1"

B) 然后我可以尝试在 AWS 中使用它(通过Terraform)。理想情况下,我希望有 10 个 Kafka 节点和 2 个 Zookeeper 节点。但这是一个延伸目标。

编辑

正如@MattSchuchard 所指出的,Mesos 有 Marathon 和 Chronos 的选项。

A) 但我想尝试一些我认为更直接的东西(即 Consul、Zookeeper、Kafka),然后再对另一个抽象进行分层。使用 zutherb/terraform-dcos 之类的东西似乎简化了安装 DCOS。

B) 但走这条路意味着将部署工作流程从 i) 仅部署 ECS 实例更改为 ii) 将 DCOS 集群部署到 AWS,然后将 docker 映像部署到该集群。如果我知道将 Consul、Zookeeper、Kafka 等容器部署到 Marathon 很容易,那就太好了。但据我所知,我必须使用 docs cli,而对于我的实际应用程序和服务来说,Terraform 的声明性属性会丢失。因为就目前而言,没有与 Marathon 交互的官方 Terraform 提供程序(尽管有nicgrayson/terraform-provider-marathon)。

C) 所以我来看看 Mesosphere DCOS。但希望我现在所拥有的只是一个小的配置错误。

【问题讨论】:

  • 已经有 Mesosphere 和/或 DC/OS 为您执行此操作。
  • @MattSchuchard +1 我知道 Mesos Marathon 和 Chronos。可能你是对的。但在 Mesos 分层之前,我想尝试一些更直接的东西(Consul、Zookeeper、Kafka)。走这条路意味着将部署从 i) 部署容器到 ECS,到 ii) 部署 DCOS,将 docker 映像部署到它。而且它看起来很费力,因为我不得不使用 dcos cli,失去了 Terraform 对我的实际应用程序和服务的声明性属性。因为就目前而言,没有用于与 Marathon 交互的 Terraform 提供程序。希望我现在所拥有的只是一个小错误。
  • 您可以在没有 DC/OS 的情况下进行 Mesosphere。此外,Marathon 用于应用程序部署,因此无论如何您都不会使用 Terraform。
  • 您也可以使用 Docker 中已经存在的Docker swarm mode,并为您处理服务发现。并允许您将 Compose 文件与 docker stack deploy 一起使用。顺便说一句,您可能希望将您的撰写文件提升到 v3 docs.docker.com/compose/compose-file
  • 运行 2 个 Zookeeper 节点是没有意义的,因为它们需要法定人数才能运行。要对 1 个 zookeeper 节点故障具有恢复能力,您首先需要有 3 个 zookeeper 节点。

标签: docker apache-kafka consul amazon-ecs terraform


【解决方案1】:

有没有人拿到官方的 Consul 镜像与 Kafka 和 Zookeeper 一起工作?

是的,我有 :) 请参阅 https://github.com/dmstr/docker-roj/blob/master/data/example/discovery/consul/docker-compose.yml 以获取示例配置。尽管映射端口我使用网络模式host 为领事,这只是工作得更好。

您可以查看有关如何setup a swarm with consul on AWS 的文档。

虽然这可能无法回答您的所有问题,但它仍然是了解如何设置集群的好资源;因为这是一个非常简单的解决方案。随时为 roj 提交问题或 PR。

【讨论】:

    猜你喜欢
    • 2018-04-06
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 2021-04-24
    • 2018-01-11
    • 1970-01-01
    • 2019-03-23
    • 2019-11-14
    相关资源
    最近更新 更多