spring cloud 入門系列三:使用Eureka 搭建高可用服務注冊中心


在上一篇中分享了如何使用Eureka 進行服務治理,里面搭建的服務注冊中心是單體的,

但是在實際的應用中,分布式系統為了防止單體服務宕機帶來嚴重后果,一般都會采用服務器集群的形式,服務注冊中心也是一樣,需要多台服務一起工作,組成高可用的服務注冊中心。這樣,如果有其中一台宕機,系統也能正常運行。

那么如何來構建高可用的服務注冊中心呢?

由於eureka注冊中心既可以作為服務端(服務注冊中心),也可以作為客戶端(到別的注冊中心注冊自己),

我們可以通過在機器上部署peer1和peer2兩個服務,兩個服務相互注冊。

一、代碼實現

  還是使用上篇文章中的eureka服務例子,在此基礎上我們進行修改:

  1. 新增/eureka/src/main/resources/application-peer1.properties
    server.port=1111
    
    spring.application.name=eureka-service
    #設定主機名為peer1
    eureka.instance.hostname=peer1
    
    #eureka.client.register-with-eureka=false
    #eureka.client.fetch-registry=false
    #設定eureka的serviceUrl為peer2
    eureka.client.serviceUrl.defaultZone=http://peer2:1112/eureka
  2. 新增/eureka/src/main/resources/application-peer2.properties
    server.port=1112
    
    spring.application.name=eureka-service
    eureka.instance.hostname=peer2
    #eureka.client.register-with-eureka=false
    #eureka.client.fetch-registry=false
    #設定eureka的serviceUrl為peer1
    eureka.client.serviceUrl.defaultZone=http://peer1:1111/eureka

    由於需要peer1和peer2相互注冊,因此第1和第2步中,eureka.client.register-with-eureka=false和eureka.client.fetch-registry=false這兩個配置就不能要了,需要注釋掉或刪掉。

  3. 設定host,在C:\Windows\System32\drivers\etc目錄下的hosts文件中添加
    127.0.0.1 peer1
    127.0.0.1 peer2

    以將peer1和peer2進行解析。

  4. 配置兩個啟動服務
    1. )

       

    2. )

       

       
  5. 啟動eureka1和eureka2
  6. 頁面訪問http://localhost:1111/

     

    我們會發現,在DS Replicas(分片)中會有peer2;   在服務instance中會有2個,一個是1111,一個是1112;   在registered-replicas(注冊分片)和available-replicas(可用分片)中出現了peer2:1112。  同樣道理,我們訪問http://localhost:1112/也能看到相似效果。 如果將peer2停掉,那么在訪問http://localhost:1111/的時候就會發現peer2已經跑到unavailable-replicas(不可用分片)中,具體截圖略。

二、調試中遇到的問題

我在調試以上內容的時候遇到一個問題,就是在peer1和peer2一直不能彼此注冊成功,頁面表現就是服務instance為空並且available-replicas為空,對應的服務在unavailable-replicas中。后來經過多次實現和分析,終於發現,原來是在我的application.properties文件中還保留着下面兩個配置,服務在啟動的時候是會讀取到這個配置的,

雖然這兩個配置默認是true,但是卻被application.properties覆蓋了,這個時候講這兩個配置注釋掉就好了。

如果在application-{profiles}.properties中再配置一遍就又可以覆蓋application.properties里面的配置。

代碼讀取順序是這樣的:

先讀取默認配置-->然后讀取application.properties-->讀取application-{profiles}.properties。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM