2016-06-14 41 views
2

我有問題女巫啓動redis服務器在mesos,馬拉松的一個IP地址。在一個網址下運行redis馬拉松(mesos)

我的步驟

  • 創建自己的Dockerfile誰包括自己redis.conf
  • 創建我自己的碼頭工人圖像並將其拉入泊塢窗式回購(名稱arekmax/redis的-instancje)
  • 馬拉松我開始我的碼頭圖像 - redis啓動並正常工作。 screen from my redis instancje in marathon mesos中的故障切換Redis服務器也可以正常工作 - 當我關閉192.168.18.21服務器時 - Marathon在第二或第三個實例中啓動Redis。

現在我想給我的開發人員一個ADRESS IP在那裏他們可以使用Redis的服務器(我現在不想192.168.18.21:31822和故障轉移例如192.168.18.22:23124後給他們)。我需要一些代理服務器如何自動檢查實際的redis IP和端口。我不知道它有可能使用竹與redis服務器 - 我不能找到信息如何重定向31822(在我的情況redis端口在碼頭集裝箱)例如IP 192.168.18.10:6739(地址IP 192.168.18.10這是我的開發人員Redis服務器)

任何人都可以幫我嗎?問題的最佳解決方案是什麼?我應該使用什麼樣的代理服務器/實例/應用程序?

回答

1

例如,您可以使用marathon-lb,它將抽象出ip:port查找。此外,您可以使用Mesos DNS將服務名稱解析爲ip:port映射。

7

在Mesos環境中有十幾種執行發現服務的解決方案。

我們可以順便客戶端如何找到服務把它們分成3組:

  1. 基於代理
    • 當客戶端和服務之間坐鎮代理例如,HAProxymarathon-lb是基於它) fabio,traefik,nixy),負責基於HTTP路徑,標題,域等負載平衡你的服務該解決方案易於開發,並有機會根據請求調整負載平衡。另一方面,我們添加額外的躍點,並且作爲代理我們有MitM的情況。

proxy

  • DNSlike(問特別公知的端點服務的位置)
    • Software Defined Network - 我們可以每個容器使用IP與SDN因此每個容器都使用唯一的IP進行公開,並使用HTTP的默認端口80,HTTPS的443等提供服務。這是最先進的和相對較新的技術,儘管它使用普通的舊DNS來查找服務IP。這可能會更難以生成代理,但可以與任何類型的流量一起工作。
    • Service record - 其中每個容器都在全局DNS中註冊,客戶端使用DNS SRV查詢獲取IP和PORT。領事Mesos DNS提供這種類型的DNS服務器。還有一些其他協議是基於這個想法(看看Bonjure)。它試圖獲得SDN和代理的最佳效果。這是相對容易設置和它是協議不可知論者。
  • dns

  • 其他
    • 凡是不適合其它類型的例如內部開發的解決方案,etcdEureka。它可能對基礎設施和應用程序提供了一些優化。值得一提的有一些嘗試使用DHT基於發現服務 - Meta Service Discovery
  • 您可以找到有關工具的更多細節,可用於創建搜索服務here

    我們可以將發現服務順便說一下,他們都填充了服務條目:

      • 定期查詢Mesos/Marathon有關狀態。這就是Mesos DNS的工作原理。這是最簡單的方法,但會在服務啓動/停止和更改進入服務發現之間造成巨大的延遲。這可以通過使用健康檢查來最小化。
    1. 基於事件
      • 馬拉松與有關狀態變化信息的能力,以push events(有initative包括事件總線接口Mesos太 - 。design doc這樣馬拉松磅的工作類似的工作被完成marathon-consul但數據被傳遞給領事。
    2. 在應用程序/容器
      • 以上sollutions如ynchronus,因此,當您的服務發現狀態過時時,可能會有一些時間。服務已經開始,但尚未準備好爲請求提供服務,或服務剛剛死亡。即使使用healtcheck,我們也不能認爲所有的事情都是在0次停機的情況下發生的。最大限度減少停機時間的解決方案是讓應用程序在準備好爲請求提供服務時進行註冊,並在停止之前取消註冊(也稱爲正常關閉)。
    +0

    非常好的回答@janisz。我想知道2發生了什麼?此外,您可能想提到基於DNS的方法的一個缺點(除TTL之外)是缺少對健康檢查的支持 –

    +1

    修正了錯誤的計數,謝謝。根據DNS的缺點,這取決於。例如,如果您使用Consul,它支持健康檢查和[準備查詢](https://www.consul.io/docs/agent/http/query.html),因此它可以爲您提供與代理幾乎相同的配置選項。 – janisz

    +1

    我們不能使用traefik - 這個解決方案只支持HTTP,但redis協議是基於TCP的。 對traefik的技術合作計劃的支持 - 將在未來的版本中發佈 - 它在官方的traefick支持中得到證實。 但我必須說,在HTTP協議中,traefik的工作非常好。 – Arek