基於dns搭建eureka集群
eureka集群方案:
1.通常我們部署的eureka節點多於兩個,根據實際需求,只需要將相鄰節點進行相互註冊(eureka節點形成環狀),就達到了高可用性集群,任何一個eureka節點掛掉不會受到影響。
2.可能會有初學者和我一樣,一開始的時候沒有完全理解eureka集群的原理,直接把每個eureka節點的url寫進配置文件,期望所有的eureka節點進行相互註冊。實際上,節點間進行信息同步的時候,只會選取配置文件第一個eureka的url,除非發生url錯誤,才會依次選取有效url進行信息同步。
3.可能有的童鞋有這樣的疑問,eureka節點形成環狀以後,相隔的多個節點掛掉,eureka節點的數據就會出現不一致的情況。長話短說,要麽忍,要麽改變方案。
忍其實也是合理的,畢竟掛掉的eureka節點重新啟動後會自動同步數據。
改變方案可以把所有的eureka進行相互註冊,但把所有的eureka url都寫一遍,這個著實有點令人不爽,萬一新增節點,所有的節點都需要改一遍!!
所以我們很自然的想到了是否可以通過dns來解決上面的問題?eureka的開發者當然也想到了這種問題,並提供了基於dns的解方案。
一、搭建DNS服務器(unbutun環境)
1.ubuntu需安裝bind9軟件包來配置dns-server
apt-get install bind9
2.配置dns
2.1添加zone
vim /etc/bind/named.conf.local 加入以下配置,可參考/etc/bind/zones.frc1918中的格式
"eureka.com" { type master; file "/etc/bind/db.eureka.com"; };
2.2創建db.eureka.com文件(需要和2.1添加的file文件同名)
cp db.local db.eureka.com
2.3修改db.eureka.com
添加以下內容
txt.huabei.huabei IN TXT "huabei.eureka.com"
txt.huabei IN TXT "192.168.0.1" "192.168.0.2" "192.168.3"
2.4修改named.conf.options配置文件,這裏選用循環給出結果的方式
rrset-order { order cyclic; };
3.修改域名解析配置文件
vim /etc/resolv.conf
加入nameserver 192.168.0.1
註意nameserver頂格寫 ip可配置本機ip
4.重啟服務
/etc/init.d/bind9 restart
二、eureka集群配置
spring:
application:
name: eureka-server
server:
port: 8081
eureka:
environment: alpha
client:
region: huabei
availability-zones:
huabei: hb10
eureka-server-d-n-s-name: huabei.eureka.com
use-dns-for-fetching-service-urls: true
eureka-server-port: 8081
三、總結
筆者也是首次使用spring-cloud,網上有很多適合入門的使用文檔,但在實際項目應用中,我們需要進一步挖掘spring-cloud的特性。後續我繼續分享關於eureka的相關知識,比如如何使用region、zone等。
基於dns搭建eureka集群