HaProxy 用于马拉松 mesos docker 链接容器上的服务发现

HaProxy for service discovery on a marathon mesos docker linked containers

拜托,我检查过的任何地方都没有问过这个问题。这是我所做的。我能够部署 mesos、marathon 和 docker 的单个实例。向前迈进下一步,我想让 2 个 mesos slave(docker 容器)link 相互连接。只需使用 docker 即可通过使用 docker link 功能实现相同的效果。但是在使用编排(mesos)和调度程序(马拉松)时,您似乎需要使用服务发现。

我的设置很简单,并且在单个主机上运行。所以我将有 2 个 docker 容器,一个 运行 一个简单的 pub/sub 和一个 运行 rabbitmq。如何在此设置中使用 HA PROxy。我看过mesosphere提供的一些文件 http://mesosphere.com/docs/getting-started/service-discovery/但不清楚如何去做。

使用 Mesos + Marathon + Docker 进行服务发现的规范方法目前在您链接的文档中有所描述。

我假设您已经能够 运行在 Marathon 中获得两个应用程序。

通常发生的情况是:

1) 配置您的应用程序定义以包括您的应用程序需要的端口。

2) 您使用 cron 等实用程序将提供的 haproxy-marathon-bridge 脚本设置为定期 运行。此脚本抓取 Marathon 的 API 以找出应用程序实例正在 运行 的主机和端口以及已知的 "friendly" 端口是什么。

在服务发现文章的示例中,第一个应用程序的友好端口为 80443,而第二个应用程序的友好端口为 8081

脚本然后生成一个 haproxy.cfg 配置,其中规则映射 localhost:friendly_portactual_host:actual_port

3) 配置您的应用程序以在 localhost:friendly_port 上相互查找。 HAProxy 将适当地路由连接。

希望对您的理解有所帮助!

我创建了一个 haproxy 服务发现 docker 容器,您可以在 mesos 中 运行。它还没有准备好生产,但我在我的开发环境中使用它来做你想做的事情。我更喜欢这个而不是 marathon 的原因是我还没有找到用 haproxy-marathon-bridge 进行复杂 haproxy 配置的好方法。使用 spiderweb,您可以为 haproxy 配置创建一个模板,使您能够执行诸如 acl 路由等操作。它尚不支持健康检查,这是在其生产准备就绪之前需要完成的事情。你可以在这里看到这个项目 https://github.com/SBRDevelopment/spiderweb.

我们将 Mesos 和 Marathon 与 consul 和 registartor 结合在一起, 所以最后你有使用 consul-template 自动生成的 haproxy 配置。

尝试https://github.com/eBayClassifiedsGroup/PanteraS 全部在一个容器中。

使用 Mesos-DNS,您还可以执行以下操作:

  1. 按照本指南设置 mesos-dns:http://programmableinfrastructure.com/guides/service-discovery/mesos-dns-haproxy-marathon/(您可以跳过不需要的 HAProxy 步骤)
  2. 当您启动 docker 容器时,请确保它们的 /etc/resolv.conf 文件中有 "namespace %slave_ip_with_mesos_dns%"(用 IP 地址替换字符串)。
  3. 如果假设一个应用程序的名称是 "peek",它应该可以从位于 peek.marathon.mesos
  4. 的其他应用程序访问