Proxy 在一个url下运行marathon(mesos)中的redis

Proxy 在一个url下运行marathon(mesos)中的redis,proxy,redis,mesos,marathon,Proxy,Redis,Mesos,Marathon,我在mesos马拉松的一个IP地址上启动redis服务器时遇到问题 我的脚步 创建自己的Dockerfile,其中包含自己的redis.conf 我创建自己的docker映像并将其拉入docker repo(名称为arekmax/redis instanceje) 在马拉松中,我启动了我的docker图像-redis启动并正常工作。 mesos中的故障切换redis服务器也能正常工作—当我关闭192.168.18.21服务器时—在第二个或第三个实例中启动redis 现在我想给我的开发者一个地

我在mesos马拉松的一个IP地址上启动redis服务器时遇到问题

我的脚步

  • 创建自己的Dockerfile,其中包含自己的redis.conf
  • 我创建自己的docker映像并将其拉入docker repo(名称为arekmax/redis instanceje)
  • 在马拉松中,我启动了我的docker图像-redis启动并正常工作。 mesos中的故障切换redis服务器也能正常工作—当我关闭192.168.18.21服务器时—在第二个或第三个实例中启动redis
现在我想给我的开发者一个地址IP,他们可以使用redis服务器(我不想现在给他们192.168.18.21:31822和故障转移后的地址IP,例如192.168.18.22:23124)。我需要一些代理服务器如何自动检查实际的redis IP和端口

我尝试使用,但端口80正常工作-我不知道它是否可以与redis服务器一起使用-我找不到如何将31822(在docker容器中的redis端口)重定向到例如IP 192.168.18.10:6739(地址IP 192.168.18.10,它是为我的开发者redis服务器提供的)的信息


有人能帮我吗?这个问题的最佳解决方案是什么?我应该使用什么样的代理服务器/实例/应用程序?

例如,您可以使用它,它将抽象出
ip:port
查找。此外,您还可以使用将服务名称解析为
ip:port
映射。

在Mesos环境中执行发现服务有十几种解决方案

根据客户如何找到服务,我们可以将其分为3组:

  • 基于代理的
    • 当客户端和服务之间存在代理(例如,(基于它),)时,该代理将根据HTTP路径、标头、域e.t.c负责负载平衡您的服务。此解决方案易于开发,并提供了根据请求调整负载平衡的机会。另一方面,我们添加了额外的跃点,作为一个代理,我们有这种情况
  • DNSlike(向特定的知名端点询问服务位置)
    • -我们可以将每个容器的IP与SDN一起使用,这样每个容器都可以使用唯一的IP公开,并使用默认端口80表示HTTP,使用默认端口443表示HTTPS,等等。这是最先进且相对较新的技术,尽管它使用普通的旧DNS来查找服务IP。它可能比代理更难引入,但可以用于任何类型的流量
    • -每个容器在全局DNS中注册,客户端使用DNS SRV查询获取其IP和端口。领事提供这种类型的DNS服务器。其他一些协议也是基于这个想法(请看一看)。它试图充分利用SDN和代理。它相对容易设置,而且不受协议限制
  • 其他
    • 任何不适合其他类型的内容,例如内部开发的解决方案,或。它可能与提供一些优化的基础架构和应用程序紧密相连。值得一提的是,有一些尝试使用基于发现的服务-
  • 您可以找到有关可用于创建发现服务的工具的更多详细信息

    我们可以按照服务条目填充发现服务的方式来划分发现服务:

  • 汇集
    • Mesos/Marathon定期查询状态。这就是Mesos DNS的工作原理。这是最简单的方法,但会在服务启动/停止和更改进入服务发现之间造成巨大延迟。通过使用healthchecking,这可以最小化
  • 基于事件
    • Marathon能够处理有关状态变化的信息(也有包含事件总线int Mesos的建议)。Marathon lb就是这样工作的。类似的工作由完成,但数据会传递给领事
  • 应用程序内/容器内
    • 上述解决方案是异步的,因此当您的服务发现状态过时时,可能会有一个时间跨度,例如,服务已启动但尚未准备好为请求提供服务,或者服务刚刚死亡。即使使用HealCheck,我们也不能假设所有事情都是在0停机时间内发生的。最小化停机时间的解决方案是让应用程序在准备就绪时自行注册o服务请求,并在其停止(即关闭)之前取消注册

  • 非常好的回答@janisz。我想知道2发生了什么。另外,你可能想提到一个缺点(除了TTL)基于DNS的方法缺乏对健康检查的支持修复了错误的计算,谢谢。根据DNS的缺点,这取决于它。例如,如果您使用Concur,它支持健康检查,因此它提供了与代理几乎相同的配置选项。我们不能使用traefik-此解决方案仅支持HTTP,但redis协议是基于TCP的d、 traefik中对TCP的支持-将在未来的版本中发布-这在官方traefick支持中得到确认。但我必须说traefik在HTTP协议中工作得非常好。要支持TCP流量,请查看第4层代理,例如。