2016-04-25 45 views
0

我有一個安裝程序,用於從Docker羣覆蓋網絡內部署Spring-Cloud-Consul應用程序。在我的覆蓋網絡中,我在每個節點上創建了領事圖像。當我啓動spring-cloud-consul應用程序時,我必須指定它應與之對話的代理主機名稱,例如「發現」,以便它可以通告自己並查詢服務發現。這裏的問題是,每個集裝箱都在查詢同一個領事代理人。當我移除這個特定的consul代理時,Ribbon DiscoveryClient似乎依靠自己的緩存而不是使用其他consul節點之一。Spring Cloud with Consul高可用性

使用spring-cloud-consul和consul啓動一個微服務應用程序的正確方法是什麼,它們不依賴於一個固定的consul代理。

解決方案我已經想嘗試:

  1. 擁有多個撰寫文件,並指定不同的領事代理。
  2. 以某種方式讓泊塢窗鏡像識別它所在的節點,然後設置自己使用該節點本地的consul代理。 (不知道如何做到這一點呢。)
  3. 用spring-boot應用程序打包一個consul代理。

謝謝你的幫助。

+1

從https://www.consul.io/docs/agent/basics.html「代理程序必須在作爲Consul集羣一部分的每個節點上運行。」在每個節點上運行代理的IMO正在每個泊塢箱容器中運行代理。 – spencergibb

+0

這將是選項3.但我覺得這是一種打破微服務封裝。它還使得打包這些圖像變得更加困難,因爲這需要擴展consul鏡像,確保java對spring的需求在那裏,然後運行這兩種服務。然而,它確實提供了最高的可靠性,因爲某個特定的領事代理人只會降低一個實例。 – Mimyck

+0

「微服務封裝」是什麼意思?領事是一個單一的二元。 – spencergibb

回答

0

consul代理程序必須在集羣中的每個節點上運行。沒有必要在每個碼頭集裝箱內運行consul agent,只需在每個節點上運行。您可以選擇在每個節點上安裝consul代理,也可以在每個節點上的泊塢窗容器中運行consul代理。

對於碼頭集裝箱解決方案中的領事代理,您需要確保在其他集裝箱啓動之前運行了consul agent容器。

有關在泊塢窗容器中以客戶端模式運行consul代理的詳細信息,請參閱:https://hub.docker.com/_/consul/並在客戶端模式下搜索運行Consul代理。這使用--net = host networking定義了代理容器,因此代理的行爲與本身安裝的代理相同,實際上是在Docker容器中。