基于DNS搭建高可用Eureka注冊中心

單節(jié)點注冊中心搭建

1壹店、打開網(wǎng)頁:https://start.spring.io

start.spring.io

按Alt + 回車鍵绑警,將會生成eureka-server.zip求泰,解壓縮后得到一個maven 項目,將該項目錄入IDE计盒。

2渴频、在IDE導入Maven項目

導入maven項目

我們首先來看一下pom文件,可以看出項目中引用了spring-cloud-starter-netflix-eureka-server, 并且springboot 的版本號為:2.1.2.RELEASE, Spring Cloud的版本號為:Greenwich.RC2RC2 表示還沒有正式發(fā)布北启,只是第二個Release Candidate卜朗。
接下來我們只需要兩個步驟,
a咕村、修改EurekaServerApplication, 在@SpringBootApplication的注解上面场钉,加入一個新的注解:@EnableEurekaServer
b、在resources 目錄中加入application.yml 文件懈涛, 并配置以下信息:

spring:
? application:
? ? name: Eureka-Server
server:
? port: 8761

第一臺Eureka中心

一個簡單的Eureka 注冊中心就已經(jīng)可以使用了逛万,我們運行一下這個spring boot 應(yīng)用,找開瀏覽器:localhost:8761批钠,即可看到我們的注冊中心就已經(jīng)運行啟來了宇植。并且EUREKA-SERVER也注冊到自己的注冊中心了。


Eureka注冊中心的高可用集群配置

單節(jié)點的注冊中心已經(jīng)搭建完畢埋心,但單節(jié)點的注冊中心存在單點故障的可能指郁,不能用于生產(chǎn)環(huán)境。生產(chǎn)環(huán)境的Eureka一般采用集群方式進行部署踩窖。

一坡氯、典型的集群配置

spring:
? application:
? ? name: Eureka-Server
server:
? port: 8761
eureka:
? instance:
? ? hostname: host1
? ? healthCheckUrlPath: /health
? ? preferIpAddress: false
? ? instance-id: ${spring.cloud.client.ip-address}:${server.port}
? client:
? ? region: default
? ? serviceUrl:
? ? ? defaultZone: http://host2:8762/eureka/,http://host3:8763/eureka/,http://host4:8764/eureka/
? ? eurekaServerURLContext: eureka
? ? registerWithEureka: true
? ? fetchRegistry: true

通過client.serviceUrl.defaultZone配置多個peer節(jié)點晨横,因為是在單機上測試洋腮,所以修改了host文件,并且使用不同的端口號來啟動注冊中心手形。正式的生產(chǎn)環(huán)境請根據(jù)自己的實際情況進行配置啥供,比如:第一臺Eureka的IP地址為:192.168.0.100,則defaultZone配置其他三臺注冊中心http://192.168.0.101:8761/eureka/,http://192.168.0.102:8761/eureka/,http://192.168.0.103:8761/eureka/
依次啟動4臺注冊中心,打開網(wǎng)頁:http://localhost:8764

高可用注冊中心

可以看到其它三臺注冊中心已經(jīng)出現(xiàn)在已注冊的replicas和可用的replicas列表里邊。

典型集群方案的幾個缺點

1.?無法快速擴容

典型注冊中心集群方案

如上圖所示伐庭,4臺注冊中心悲幅,每臺注冊中心需要配置其他三臺服務(wù)器臭蚁,以Eureka 1為例鳍烁,其配置如下:

defaultZone: http://172.18.10.2:8761/eureka/,http://172.18.10.3:8761/eureka/,http://172.18.10.4:8761/eureka/?

注冊中心是本應(yīng)該是無狀態(tài)的暑竟,可以橫向擴展棺克。但由于每臺注冊中心的配置都不一樣唉侄,所以擴展起來比較麻煩咒吐,需要修改配置文件,這樣就無法做到快速的擴容属划。

2.違反開閉原則(Open Close Principle)

微服務(wù)客戶端需要配置注冊中心的地址恬叹,使用的是如下的配置:

defaultZone:http://172.18.10.1:8761/eureka/,http://172.18.10.2:8761/eureka/,http://172.18.10.3:8761/eureka/,http://172.18.10.4:8761/eureka/

由于配置的是固定的IP地址,如果我們要擴容注冊中心同眯,增加新的注冊中心節(jié)點绽昼,那我們就需要修改微服務(wù)客戶端的配置文件,將新的注冊中心節(jié)點進入的服務(wù)器列表中须蜗。試想一下硅确,如果有幾十個微服務(wù),每個微服務(wù)有4個節(jié)點明肮,那將會要修改上百個配置文件疏魏。很顯然這種方式不太可取,從軟件設(shè)計角度來說晤愧,違反了開閉原則大莫。



Eureka天生就是云原生應(yīng)用

其實Eureka?注冊中心還有另一種高可用配置方式,基于DNS官份。Eureka天生就可以部署在像AWS這樣的公有云上只厘,并且可以跨Region,跨Available Zone部署舅巷。雖然我們不用部署在云端羔味,依然可以利用這一特性,我們可以把Region看作我們數(shù)據(jù)中心的機房钠右,Avaiable Zone?看作是機房中的網(wǎng)絡(luò)區(qū)域赋元,結(jié)合內(nèi)部DNS服務(wù)來實現(xiàn)高可用的注冊中心。

如何實現(xiàn)基于DNS的高可用注冊中心

第一步飒房、修改配置文件

spring:
????application:
????name: Eureka-Server
server:
????port: 8761
eureka:
????instance:
????????healthCheckUrlPath: /health
????????preferIpAddress: true
????????instance-id: ${spring.cloud.client.ipAddress}:${server.port}
????client:?
? ? ? ? region: default
????????eurekaServerPort: 8761
????????useDnsForFetchingServiceUrls: true
????????eurekaServerDNSName: eureka.txzq.com.cn?
????????eurekaServerURLContext: eureka
????????registerWithEureka: true
????????fetchRegistry: true

畫重點:
a.?region: default搁凸,配置地區(qū)
b. useDnsForFetchingServiceUrls,表示基于DNS獲取服務(wù)信息
c. eurekaServerDNSName: eureka.txzq.com.cn狠毯,配置域名服務(wù)器名稱

第二步护糖、在域名服務(wù)器上增加 txt?記錄

鍵:txt.default.eureka.txzq.com.cn 值:shenzhen.eureka.txzq.com.cn
鍵:txt.shenzhen.eureka.txzq.com.cn 值:172.18.10.1?172.18.10.2?172.18.10.3?172.18.10.4

第一條記錄表示,default?區(qū)域嚼松,包含了哪些可用區(qū)嫡良,我們用shenzhen表示是深圳機房锰扶,txt記錄的值就設(shè)置為:shenzhen.eureka.txzq.com.cn
第二第記錄表示 , shenzhen機房有哪些服務(wù)器,多臺服務(wù)器使用空格格開寝受。
如果在本地測試坷牛,需要搭建一臺自己的DNS服務(wù)器,可以參考我的另一篇文章:基于Docker快速搭建DNS Server

BIND DNS Server?主界面
添加Client View

Client View是指DNS服務(wù)應(yīng)用到哪一個網(wǎng)段很澄,比如:172.18.10.0/24網(wǎng)段的IP連接到BIND服務(wù)器漓帅,才會解析指定的域名。

添加頂級域名

在添加域名的時候痴怨,需要指定Client View忙干,這里我們選擇我們剛剛創(chuàng)建的View_172.18.10.0,指的是只有在這個網(wǎng)段的IP訪問這臺DNS服務(wù)器浪藻,才能解析捐迫。

添加www一級域名

添加完一級域名后我們刷一下這個ZONE,然后設(shè)置一下本地DNS服務(wù)器

設(shè)置本地DNS服務(wù)器
驗證域名解析

DNS域名服務(wù)器驗證通過后爱葵,我們接下來就可以在為這個域名添加我們所需要的txt?記錄了施戴。

添加TXT記錄

到這里我們的準備工作就已經(jīng)基本完成了。使用Maven將注冊中心編譯成萌丈,輸出jar包赞哗。新建一個Eureka的docker鏡像,并啟動4個容器辆雾》舅瘢基于DNS的注冊中心就搭建完畢了。

你只需要對DNS記錄進行變更度迂,就可以實現(xiàn)動態(tài)的藤乙、快速擴容/縮容了。

關(guān)于如何將Eureka部署到Docker惭墓,請參考另一篇文章:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末坛梁,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子腊凶,更是在濱河造成了極大的恐慌划咐,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件钧萍,死亡現(xiàn)場離奇詭異褐缠,居然都是意外死亡,警方通過查閱死者的電腦和手機划煮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門送丰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來缔俄,“玉大人弛秋,你說我怎么就攤上這事器躏。” “怎么了蟹略?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵登失,是天一觀的道長。 經(jīng)常有香客問我挖炬,道長揽浙,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任意敛,我火速辦了婚禮馅巷,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘草姻。我一直安慰自己钓猬,他們只是感情好,可當我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布撩独。 她就那樣靜靜地躺著敞曹,像睡著了一般。 火紅的嫁衣襯著肌膚如雪综膀。 梳的紋絲不亂的頭發(fā)上澳迫,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天,我揣著相機與錄音剧劝,去河邊找鬼橄登。 笑死,一個胖子當著我的面吹牛讥此,可吹牛的內(nèi)容都是我干的示绊。 我是一名探鬼主播,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼暂论,長吁一口氣:“原來是場噩夢啊……” “哼面褐!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起取胎,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤展哭,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后闻蛀,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體匪傍,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年觉痛,在試婚紗的時候發(fā)現(xiàn)自己被綠了役衡。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡薪棒,死狀恐怖手蝎,靈堂內(nèi)的尸體忽然破棺而出榕莺,到底是詐尸還是另有隱情,我是刑警寧澤棵介,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布钉鸯,位于F島的核電站,受9級特大地震影響邮辽,放射性物質(zhì)發(fā)生泄漏唠雕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一吨述、第九天 我趴在偏房一處隱蔽的房頂上張望岩睁。 院中可真熱鬧,春花似錦揣云、人聲如沸笙僚。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽肋层。三九已至,卻和暖如春翎迁,著一層夾襖步出監(jiān)牢的瞬間栋猖,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工汪榔, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蒲拉,地道東北人。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓痴腌,卻偏偏與公主長得像雌团,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子士聪,可洞房花燭夜當晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容