Docker容器雙向聯(lián)通與高可用的Eureka Server

在《4.7 Eureka Server的高可用》中,我們構建了一個雙節(jié)點的Eureka Server集群,本節(jié)我們使用Compose來編排這個Eureka Server集群。該雙節(jié)點的Eureka配置如下:

spring:
  application:
    name: microservice-discovery-eureka-ha
---
spring:
  profiles: peer1                                 # 指定profile=peer1
server:
  port: 8761
eureka:
  instance:
    hostname: peer1                               # 指定當profile=peer1時,主機名是peer1
  client:
    serviceUrl:
      defaultZone: http://peer2:8762/eureka/      # 將自己注冊到peer2這個Eureka上面去

---
spring:
  profiles: peer2
server:
  port: 8762
eureka:
  instance:
    hostname: peer2
  client:
    serviceUrl:
      defaultZone: http://peer1:8761/eureka/

以下是步驟:

(1) 執(zhí)行mvn clean package docker:build 構建Docker鏡像。

(2) 編寫docker-compose.yml,如下

version: "2"            # 表示使用docker-compose.yml的Version 2 file format編寫
services:
  microservice-discovery-eureka-ha1:
    hostname: peer1             # 指定hostname
    image: itmuch/microservice-discovery-eureka-ha:0.0.1-SNAPSHOT
    links:
      - microservice-discovery-eureka-ha2
    ports:
      - "8761:8761"
    environment:
      - spring.profiles.active=peer1
  microservice-discovery-eureka-ha2:
    hostname: peer2
    image: itmuch/microservice-discovery-eureka-ha:0.0.1-SNAPSHOT
    links:
      - microservice-discovery-eureka-ha1
    ports:
      - "8762:8762"
    environment:
      - spring.profiles.active=peer2

從文件內(nèi)容我們可以看到,我們定義了兩個服務:microservice-discovery-eureka-ha1和microservice-discovery-eureka-ha2,它們的hostname分別是peer1和peer2。然后通過links標簽相互連接。

(3) 執(zhí)行

docker-compose up

命令啟動。然而,控制臺會輸出類似以下的異常:

ERROR: Circular dependency between microservice-discovery-eureka-ha1 and microservice-discovery-eureka-ha2

從異常可知,發(fā)生了循環(huán)依賴。如何解決這個問題呢?

解決循環(huán)依賴

該問題有很多解決方案,例如使用ambassador pattern,使用外部的DNS容器等,本節(jié)用多個容器共享一個網(wǎng)絡的方式解決該問題,以下是配置:

version: "2"
services:
  peer1:      # 默認情況下,其他服務可以使用服務名稱連接到該服務。因此,對于peer2的節(jié)點,它需要連接http://peer1:8761/eureka/,因此需要配置該服務的名稱是peer1。
    image: itmuch/microservice-discovery-eureka-ha:0.0.1-SNAPSHOT
    networks: 
      - eureka-net
    ports:
      - "8761:8761"
    environment:
      - spring.profiles.active=peer1
  peer2:
    image: itmuch/microservice-discovery-eureka-ha:0.0.1-SNAPSHOT
    hostname: peer2
    networks: 
      - eureka-net
    ports:
      - "8762:8762"
    environment:
      - spring.profiles.active=peer2
networks:
  eureka-net:
    driver: bridge

參考文檔

(1) 解決循環(huán)依賴的總結:http://www.dockone.io/article/929

(2) ambassador pattern官方介紹:https://docs.docker.com/engine/admin/ambassador_pattern_linking/

(3) StackOverflow上對該問題的深入探討:http://stackoverflow.com/questions/29307645/how-to-link-docker-container-to-each-other-with-docker-compose

(4)Github上的相關Issue: https://github.com/docker/compose/issues/666

本文首發(fā)

http://www.itmuch.com/docker-compose-eureka-ha/

干貨分享

全是干貨
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,544評論 19 139
  • 概述 著名的CAP理論指出,一個分布式系統(tǒng)不可能同時滿足C(一致性)、A(可用性)和P(分區(qū)容錯性)。由于分區(qū)容錯...
    PKAQ閱讀 3,916評論 0 13
  • Docker — 云時代的程序分發(fā)方式 要說最近一年云計算業(yè)界有什么大事件?Google Compute Engi...
    ahohoho閱讀 15,844評論 15 147
  • 我有試想過這樣一個畫面,多年以后,再次聯(lián)系上了曾經(jīng)的好友,我們都已成長為有故事的人,不再是青澀的少年少女。我們圍...
    碎片時間亂燉閱讀 716評論 5 5
  • 不知道其它地域的人是如何排解心中的繁雜負念,感覺對于內(nèi)蒙古的我們來說,好像真的只是一醉解千愁。 我這個人吧,很多...
    安然_f854閱讀 262評論 0 0

友情鏈接更多精彩內(nèi)容