eureka集群的兩種配置方式:配置文件方式與DNS方式


eureka client獲取serviceUrls(eureka server地址)列表的過程:

  • 1. 根據use-dns-for-fetching-service-urls屬性判斷是從dns還是從config獲取region和zone以及serviceUrl相關信息
  • 2. 獲取過程首先從配置中獲取應用所在region,通過region屬性設置
  • 3. 根據region獲取所有zone信息,dns與config獲取方式不一樣
    • 3.1. dns會請求dns服務器獲取指定region的所有zone列表,如果沒有查詢到則拋出異常.使用該方式需要設定 eureka-server-d-n-s-name,eureka-server-u-r-l-context,eureka-server-port屬性,具體配置可參考另一篇文章《eureka集群基於DNS配置方式
    • 3.2. config則從配置文件的availabilityZones列表獲取,如果沒有配置,則返回defaultZone.使用該方式需要配置availability-zones(Map<region:zone>),service-url(Map<zone:serviceUrls>)
  • 4. 獲取zone列表成功后需要對列表進行排序,排序根據prefer-same-zone-eureka而不同,該屬性意為是否將相同名稱的zone作為注冊首選
    • 4.0. 這里有一個客戶端zone的概念,該zone為availabilityZones的第一個zone,如果沒有設置則為defaultZone
    • 4.1. 如果設置true,則查詢zone列表,找到與客戶端zone同名的元素,並將其之前元素轉移到列表最后
    • 4.2. 如果設置false,則查找zone列表,找到第一個與客戶端zone不同名的zone,並將其之前的元素轉移到列表最后
  • 5. 然后循環獲取所有zone對應的serviceUrls並按順序追加到一個列表中
    • 5.1. 如果是配置方式,獲取某個zone的serviceUrls為空則返回defaultZone的serviceUrl,而DNS方式不會進行任何處理

通過以上步驟可以獲取到region對應的zone的serviceUrls.

這里出現了region,zone,serviceUrl這幾個概念,可以簡單理解為region包含多個zone,zone包含多個serviceUrl.但需要注意的是,zone可以出現在多個region中,serviceUrl可以出現在多個zone中,也就是說他們三個概念兩兩之間的關系是多對多而非一對多.

 

#基於DNS的配置
eureka:
  client:
    #DNS域名,獲取其他信息將以該域名為根域名
    eureka-server-d-n-s-name: relinson.com
    #開啟DNS方式獲取serviceUrl,默認為false
    use-dns-for-fetching-service-urls: true
    #當前應用所在區域,默認為us-east-1
    region: region1
    #eureka服務根目錄
    eureka-server-u-r-l-context: eureka
    #服務所在端口
    eureka-server-port: 9999
    #獲取serviceUrl時候是否優先獲取相同zone的列表(如果獲取為空則獲取所在region第一個zone),如果為false則優先獲取不在相同zone的列表
    prefer-same-zone-eureka: true
    #是否獲取注冊信息到本地
    fetch-registry: true
    #是否將自己注冊到eureka
    register-with-eureka: true

 

#基於CONFIG的配置
eureka:
  client:
    #開啟DNS方式獲取serviceUrl,默認為false
    use-dns-for-fetching-service-urls: false
    #當前應用所在區域,默認為us-east-1
    region: region1
    #獲取serviceUrl時候是否優先獲取相同zone的列表(如果獲取為空則獲取所在region第一個zone),如果為false則優先獲取不在相同zone的列表
    #client所在zone為availabilityZones的第一個zone,如果未配置,則為defaultZone
    prefer-same-zone-eureka: true
    #是否獲取注冊信息到本地
    fetch-registry: true
    #是否將自己注冊到eureka
    register-with-eureka: true
    #與DNS獲取的方式相同,這里需要手工配置包含哪些region以及zone(Map類型),如果沒有給相關的region配置zone,則默認返回defaultZone
    availability-zones:
      region1: zone1-2,zone1-2,zone2-2
      region2: zone2-2,zone2-2,zone2-3
    #與DNS獲取數據方式類似,這里需要手工配置每個zone包含哪些URL,如果應用所在區域沒有zone,則默認返回defaultZone的數據
    service-url:
      zone1-1: http://xxx,http://xxx2 
      zone1-2: http://xxx,http://xxx2
      zone2-1: http://xxx,http://xxx2
      zone2-2: http://xxx,http://xxx2

 


免責聲明!

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



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