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),service-url(Map)
  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
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容