單節(jié)點注冊中心搭建
1壹店、打開網(wǎng)頁:https://start.spring.io
按Alt + 回車鍵绑警,將會生成eureka-server.zip求泰,解壓縮后得到一個maven 項目,將該項目錄入IDE计盒。
2渴频、在IDE導入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 注冊中心就已經(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
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ù)器浪藻,才能解析捐迫。
添加完一級域名后我們刷一下這個ZONE,然后設(shè)置一下本地DNS服務(wù)器
DNS域名服務(wù)器驗證通過后爱葵,我們接下來就可以在為這個域名添加我們所需要的txt?記錄了施戴。
到這里我們的準備工作就已經(jīng)基本完成了。使用Maven將注冊中心編譯成萌丈,輸出jar包赞哗。新建一個Eureka的docker鏡像,并啟動4個容器辆雾》舅瘢基于DNS的注冊中心就搭建完畢了。
你只需要對DNS記錄進行變更度迂,就可以實現(xiàn)動態(tài)的藤乙、快速擴容/縮容了。
關(guān)于如何將Eureka部署到Docker惭墓,請參考另一篇文章: