天天看點

Eureka叢集複制政策問題前言配置檔案 application.yml啟動測試問題一!!!問題二 !!!問題三 !!!

前言

我們都知道,Eureka可以很簡單的配置高可用,隻需要在Eureka server指定該server的其他小夥伴們就可以很簡單的實作。但是在實際使用的過程中,也有一些需要注意的點。本文會說明。

本文測試用例我們是兩個執行個體來模拟叢集環境。兩個spring-boot的小項目:eureka-server-7001和eureka-server-7002。 win10環境,先配置hosts:

127.0.0.1   eureka7001  eureka7002
           

本文代碼位址:https://github.com/lchpersonal/eureka-parent

配置檔案 application.yml

eureka-server-7001

server: 
  port: 7001
 
eureka: 
  instance:
    hostname: eureka7001 #eureka服務端的執行個體名稱
    prefer-ip-address: true

  client: 
    register-with-eureka: false     #false表示不向注冊中心注冊自己。
    fetch-registry: false     #false表示自己端就是注冊中心,我的職責就是維護服務執行個體,并不需要去檢索服務
    service-url: 
      #單機 defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/       #設定與Eureka Server互動的位址查詢服務和注冊服務都需要依賴這個位址(單機)。
      defaultZone: http://eureka7002:7002/eureka/
      
           

eureka-server-7002

server: 
  port: 7002
 
eureka: 
  instance:
    hostname: eureka7002 #eureka服務端的執行個體名稱
    prefer-ip-address: true

  client: 
    register-with-eureka: false     #false表示不向注冊中心注冊自己。
    fetch-registry: false     #false表示自己端就是注冊中心,我的職責就是維護服務執行個體,并不需要去檢索服務
    service-url: 
      #單機 defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/       #設定與Eureka Server互動的位址查詢服務和注冊服務都需要依賴這個位址(單機)。
      defaultZone: http://eureka7001:7001/eureka/ 
           

啟動測試

分别啟動兩個項目,打開浏覽器通路

http://eureka7001:7001/

http://eureka7002:7002/

Eureka叢集複制政策問題前言配置檔案 application.yml啟動測試問題一!!!問題二 !!!問題三 !!!
Eureka叢集複制政策問題前言配置檔案 application.yml啟動測試問題一!!!問題二 !!!問題三 !!!

現在一切正常,雙方你中有我我中有你,能夠正常的進行資訊的同步。

問題一!!!

問題: DS Replicas下面的

eureka7001

eureka7002

是從哪裡得到的? 配置的

hostname

嗎?

好,帶着這個問題,我們來修改一點配置:

我們兩個服務的把eureka.instance.hostname:的值改成

127.0.0.1

eureka: 
  instance:
    hostname: 127.0.0.1  #eureka服務端的執行個體名稱
    prefer-ip-address: true
           

兩個服務的hostname都修改成127.0.0.1.

重新啟動兩個程式:

Eureka叢集複制政策問題前言配置檔案 application.yml啟動測試問題一!!!問題二 !!!問題三 !!!
Eureka叢集複制政策問題前言配置檔案 application.yml啟動測試問題一!!!問題二 !!!問題三 !!!

咦? DS Replicas仍然是eureka7001 和 eureka7002 ,值沒有變。是以暫且可以得出一個結論

結論: DS Replicas下面的值不是

eureka.instance.hostname

那麼它是哪裡配置的呢? 縱觀整個配置檔案,隻有以下配置的地方有用到eureka7001和eureka7002

client: 
    service-url: 
        defaultZone: http://eureka7002:7002/eureka/
           

是以可以肯定,DS Replicas的值,來自于defaultZone。

問題二 !!!

問題: 本文是通過一台機器模拟的,那麼我們可不可以不配置域名? 直接使用ip位址來配置所有的資訊呢?

好,改一下配置:

eureka-server-7001改成如下:

server: 
  port: 7001
 
eureka: 
  instance:
    hostname: 127.0.0.1
    prefer-ip-address: true

  client: 
    register-with-eureka: false   
    fetch-registry: false    
    service-url: 
      defaultZone: http://127.0.0.1:7002/eureka/
           

同樣eureka-server-7002改成如下:

server: 
  port: 7002
eureka: 
  instance:
    hostname: 127.0.0.1
    prefer-ip-address: true
  client: 
    register-with-eureka: false  
    fetch-registry: false    
    service-url: 
         defaultZone: http://127.0.0.1:7001/eureka/
 
           

啟動測試:

Eureka叢集複制政策問題前言配置檔案 application.yml啟動測試問題一!!!問題二 !!!問題三 !!!

把滑鼠放到連結上面,浏覽器左下角會顯示ip+端口:

Eureka叢集複制政策問題前言配置檔案 application.yml啟動測試問題一!!!問題二 !!!問題三 !!!

同樣eureka7002也有同樣的效果,我這裡就不截圖了。。

是以這裡我們可以做一個結論,

結論: 用127.0.0.1配置也是可以的。

問題三 !!!

問題: 不使用本地環路位址,直接使用真實位址行不行?

看一下我的本機ip位址:

Eureka叢集複制政策問題前言配置檔案 application.yml啟動測試問題一!!!問題二 !!!問題三 !!!

我的連結路由器的ip位址是

192.168.0.125

, 假如我們把上面所有的

127.0.0.1

全部改為

192.168.0.125

可以嗎? 這裡大家是不是認為肯定可以啊? 哈哈,往下看測試結果:

好,改一下配置:

eureka-server-7001改成如下:

server: 
  port: 7001
 
eureka: 
  instance:
    hostname: 192.168.0.125
    prefer-ip-address: true

  client: 
    register-with-eureka: false   
    fetch-registry: false    
    service-url: 
      defaultZone: http://192.168.0.125:7002/eureka/
           

同樣eureka-server-7002改成如下:

server: 
  port: 7002
eureka: 
  instance:
    hostname: 192.168.0.125
    prefer-ip-address: true
  client: 
    register-with-eureka: false  
    fetch-registry: false    
    service-url: 
         defaultZone: http://192.168.0.125:7001/eureka/
 
           

啟動測試:

Eureka叢集複制政策問題前言配置檔案 application.yml啟動測試問題一!!!問題二 !!!問題三 !!!
Eureka叢集複制政策問題前言配置檔案 application.yml啟動測試問題一!!!問題二 !!!問題三 !!!

好像結果并不像我們想的那樣,DS Replicas下面什麼都沒有。。。

其實這個問題是我在搭建Apollo分布式配置中心的時候遇到的問題。Apollo中使用的就是Eureka。 當時我是在同一台機器上,用docker來模拟僞分布式,當時就沒有配置域名,直接使用的事docker主控端的ip位址,發現總有一個節點運作不正常,不能夠正常複制另外一個節點的内容。 這才來研究了一下Eureka。

其實,除了127.0.0.1,你用同一個域名,不同端口也是不行的,例如我們配置hosts

127.0.0.1  eureka.
           

把所有的ip全部換成同一個域名

eureka

server: 
  port: 7001 
eureka: 
  instance:
    hostname: eureka  #eureka服務端的執行個體名稱
    prefer-ip-address: true
  client: 
    register-with-eureka: false 
    fetch-registry: false  
    service-url: 
      defaultZone: http://eureka:7002/eureka/
           

另外一個配置這裡就不貼出來了。。。 啟動測試:

Eureka叢集複制政策問題前言配置檔案 application.yml啟動測試問題一!!!問題二 !!!問題三 !!!

發現是可以的。

除了把ip全部配置成本機真實ip,其它情況都是可以的。目前就是沒搞明白,為什麼把hostname改成真實ip位址不行。。。 如果有哪位知道答案,麻煩告知,不甚感激。。。,如果我後面知道了答案,會在這裡公布出來。

繼續閱讀