Spring Cloud Eureka 集羣使用DNS方式進行服務分區

Eureka註冊中心的配置方式有幾種
網上常見的配置方式分爲
一、使用defaultZone,這種沒有分區的概念,就一個區,所有的服務都會使用defaultZone配置的serverUrl進行服務註冊發現。網上有很多文章這裏不再贅述
二、集羣的配置方式有兩種一種是配置文件的方式,一種是DNS的方式
這裏面還要提到一個分區的概念 Region和Zone,這裏 芋道源碼 http://www.iocoder.cn/Eureka/eureka-client-init-second/?sf&2017-11-01和周立http://www.itmuch.com/spring-cloud-1/的文章裏都有描述,
二、1.第一種配置文件的方式,這種也是網上文件介紹比較全面的一種
SpringCloudEureka進行服務分區:https://www.jianshu.com/p/2ca32773b3e5  和 
eureka集羣的兩種配置方式:配置文件方式和Dns方式http://www.cnblogs.com/relinson/p/eureka_ha_config_properties_and_dns.html
這兩篇文章也介紹的比較清楚
重點是配置region, 配置availability-zones,這個要注意節點的順序前後,還有就是配置service-url,基本上也可以實現了,但是這種方式都是需要提前寫死的,對於動態增加註冊中心進行分區調整都要調整每個eurekaclient的配置,說白了就是每個服務都要修改相應的配置項,所以就引申出DNS的配置方式
二、2.Dns方式配置Eureka集羣
這種方式網上介紹的也有,比如這篇文章https://www.cnblogs.com/relinson/p/eureka_ha_use_dns.html
前半部分介紹的也很清晰,也有那麼幾個重點的配置項,
use-dns-for-fetching-service-urls: true使用dns方式配置 
eureka-server-d-n-s-name: XXX.com DNS根域名
region: beijing
eureka-server-u-r-l-context: eureka    配置中心的eureka目錄
eureka-server-port: 9999   映射其他eurekaServer的端口,這裏注意採用這種方式 server.port和這個端口最好一致
因爲dns是控制地址的變化,端口不變,所以不像前面的哪些配置方式可以自己定義url和port。所以每個IP都是用的相同的port進行註冊中心服務的部署
這些也是文章中說的比較清楚的配置方式,但是踩坑的過程中發現這些只是講解了前半部分,後面還有若干細節從網上如何都找不到。下面就來說一說
1、首先EurekaServer和EurekaClient都要設置DNS地址,也就是說註冊中心,和其他註冊到註冊中心的服務,都要現在運行的服務機器上配置私有的DNS服務地址,使得機器能夠採用相同的DNS服務地址,本地windows調試就去網絡適配器裏改IPv4裏的DNS即可
2、要配置DNS服務器,以windows的DNS服務器爲例,首先建一個域 XXX.com,也就是對應着
eureka-server-d-n-s-name

其次要建一個region例如beijing,然後裏面要建一個txt類型的文本,填入3azone.XXX.com   3bzone.XXX.com,相當於一個region下有2個分區
然後還要在region的同級目錄建2個域一個3azone,一個3bzone,區域的劃分可根據自己的情況命名和劃分

3azone裏面建一個txt文件輸入對應的serviceurl例如192.168.1.1 192.168.1.2,2臺機子歸屬於3azone

3b內也建類似的配置,這樣就完成了dns的配置,通過查看Eureka的源碼,他的實現是通過尋找
txt.beijing.XXX.com(txt.region.eureka-server-d-n-s-name)這樣的方式獲取到的
3azone.XXX.com和3bzone.XXX.com中的zone,3azone和3bzone,
然後再去獲取 txt.3azone.XXX.com和txt.3bzone.XXX.com中對應的ServiceUrls,的數據,也就是IP地址。
這樣服務間就可以獲取到固定端口下的不同IP的機子的註冊中心服務並相互註冊
3.註冊中心相互註冊後可能會出現 unavailable-replicas的情況,出現這個主要是2個屬性造成的
要麼就使用IP註冊eureka.instance.prefer-ip-address=true,如果不使用IP註冊而使用host方式,那麼就要配置eureka.instance.hostname: 3azone.XXX.com   #非常非常重要,使用host又沒配置,就會顯示unavailable-replicas,
4.服務中心配置好後,其他client服務也只要配置對應的連接方式即可
eureka:
  instance:
    prefer-ip-address: true
    metadata-map:
      zone: 3azone  #這個是服務註冊優先歸屬於哪個區
  client:
    register-with-eureka: true
    fetch-registry: true
    region: beijing
    #開啓DNS方式獲取serviceUrl,默認爲false
    use-dns-for-fetching-service-urls: true
    #DNS域名,獲取其他信息將以該域名爲根域名
    eureka-server-d-n-s-name: XXX.com
    #eureka服務根目錄
    eureka-server-u-r-l-context: eureka
    #連接註冊中心端口
    eureka-server-port: 9999 #這裏一定註冊中心的端口,如果不想寫死就要配置環境變量來實現了


以上這些步驟只要稍加註意,即可完美的完成eureka基於DNS的方式配置分區集羣,且可以動態的添加分區和註冊中心數量和位置


















 

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