Eureka集羣複製策略問題

前言

我們都知道,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/
在這裏插入圖片描述
在這裏插入圖片描述
現在一切正常,雙方你中有我我中有你,能夠正常的進行信息的同步。

問題一!!!

問題: DS Replicas下面的 eureka7001eureka7002是從哪裏得到的? 配置的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.

重新啓動兩個程序:
在這裏插入圖片描述
在這裏插入圖片描述

咦? 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/
 

啓動測試:
在這裏插入圖片描述
把鼠標放到鏈接上面,瀏覽器左下角會顯示ip+端口:
在這裏插入圖片描述
同樣eureka7002也有同樣的效果,我這裏就不截圖了。。
所以這裏我們可以做一個結論,
結論: 用127.0.0.1配置也是可以的。

問題三 !!!

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

看一下我的本機ip地址:
在這裏插入圖片描述
我的鏈接路由器的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/
 

啓動測試:
在這裏插入圖片描述

在這裏插入圖片描述
好像結果並不像我們想的那樣,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/

另外一個配置這裏就不貼出來了。。。 啓動測試:
在這裏插入圖片描述
發現是可以的。

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章