eureka伺服器搭建
1. 【微服務】- SpringBoot Admin
目錄:
Spring Boot Admin 用於管理和監控一個或者多個Spring Boot應用, Spring Boot Admin 分為Server端和Client端,Client通過http向Server端注冊, 也可以結合Spring Cloud 的服務注冊組件Eureka 進行注冊。
SpringAdmin 的監測詳細信息有如下:
本文的所有工程的Spring Boot版本為2.2.2.RELEASE,SpringBootAdmin版本為2.2.1。
這樣Admin Server就創建好了。
到此,SpringBoot-Admin-Client 工程創建完成。
啟動Admin-Server,Admin-Client兩個工程,在瀏覽器上輸入localhost:8769 ,瀏覽器顯示的界面如下:
查看wallboard:
更多監控信息,自己體驗。
eureka-server搭建完畢。
到此admin-server 搭建完成。
到此,Eureka-Server,Admin-Server-Eureka-Client,Admin-Client-Eureka-Cleint 三個工程搭建完成
啟動三個工程,在瀏覽器上訪問localhost:8769,瀏覽器會顯示和上一小節一樣的界面。
在2.1.0版本中去掉了hystrix dashboard,登錄界面默認集成到了spring security模塊,只要加上spring security就集成了登錄模塊。
重啟啟動工程,在瀏覽器上訪問: http://localhost:8769/ ,會被重定向到登錄界面,登錄的用戶名和密碼為配置文件中配置的,分別為admin和admin,界面顯示如下:
源碼: https://github.com/lbshold/springboot/tree/master/Spring-Boot-Admin-Demo
2. 基於DNS搭建高可用Eureka注冊中心
按Alt + 回車鍵,將會生成eureka-server.zip,解壓縮後得到一個maven 項目,將該項目錄入IDE。
我們首先來看一下pom文件,可以看出項目中引用了spring-cloud-starter-netflix-eureka-server, 並且springboot 的版本號為:2.1.2.RELEASE, Spring Cloud的版本號為:Greenwich.RC2RC2 表示還沒有正式發布,只是第二個Release Candidate。
接下來我們只需要兩個步驟,
a、修改EurekaServerApplication, 在@SpringBootApplication的註解上面,加入一個新的註解:@EnableEurekaServer
b、在resources 目錄中加入application.yml 文件, 並配置以下信息:
一個簡單的Eureka 注冊中心就已經可以使用了,我們運行一下這個spring boot 應用,找開瀏覽器:localhost:8761,即可看到我們的注冊中心就已經運行啟來了。並且EUREKA-SERVER也注冊到自己的注冊中心了。
單節點的注冊中心已經搭建完畢,但單節點的注冊中心存在單點故障的可能,不能用於生產環境。生產環境的Eureka一般採用集群方式進行部署。
通過client.serviceUrl.defaultZone配置多個peer節點,因為是在單機上測試,所以修改了host文件,並且使用不同的埠號來啟動注冊中心。正式的生產環境請根據自己的實際情況進行配置,比如:第一台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台注冊中心,打開網頁:http://localhost:8764
可以看到其它三台注冊中心已經出現在已注冊的replicas和可用的replicas列表裡邊。
如上圖所示,4台注冊中心,每台注冊中心需要配置其他三台伺服器,以Eureka 1為例,其配置如下:
注冊中心是本應該是無狀態的,可以橫向擴展。但由於每台注冊中心的配置都不一樣,所以擴展起來比較麻煩,需要修改配置文件,這樣就無法做到快速的擴容。
微服務客戶端需要配置注冊中心的地址,使用的是如下的配置:
由於配置的是固定的IP地址,如果我們要擴容注冊中心,增加新的注冊中心節點,那我們就需要修改微服務客戶端的配置文件,將新的注冊中心節點進入的伺服器列表中。試想一下,如果有幾十個微服務,每個微服務有4個節點,那將會要修改上百個配置文件。很顯然這種方式不太可取,從軟體設計角度來說,違反了開閉原則。
其實Eureka 注冊中心還有另一種高可用配置方式,基於DNS。Eureka天生就可以部署在像AWS這樣的公有雲上,並且可以跨Region,跨Available Zone部署。雖然我們不用部署在雲端,依然可以利用這一特性,我們可以把Region看作我們數據中心的機房,Avaiable Zone 看作是機房中的網路區域,結合內部DNS服務來實現高可用的注冊中心。
畫重點:
a. region: default,配置地區
b. useDnsForFetchingServiceUrls,表示基於DNS獲取服務信息
c. eurekaServerDNSName: eureka.txzq.com.cn,配置域名伺服器名稱
鍵: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 區域,包含了哪些可用區,我們用shenzhen表示是深圳機房,txt記錄的值就設置為:shenzhen.eureka.txzq.com.cn
第二第記錄表示 , shenzhen機房有哪些伺服器,多台伺服器使用空格格開。
如果在本地測試,需要搭建一台自己的DNS伺服器,可以參考我的另一篇文章: 基於Docker快速搭建DNS Server
Client View是指DNS服務應用到哪一個網段,比如:172.18.10.0/24網段的IP連接到BIND伺服器,才會解析指定的域名。
在添加域名的時候,需要指定Client View,這里我們選擇我們剛剛創建的View_172.18.10.0,指的是只有在這個網段的IP訪問這台DNS伺服器,才能解析。
添加完一級域名後我們刷一下這個ZONE,然後設置一下本地DNS伺服器
DNS域名伺服器驗證通過後,我們接下來就可以在為這個域名添加我們所需要的txt 記錄了。
到這里我們的准備工作就已經基本完成了。使用Maven將注冊中心編譯成,輸出jar包。新建一個Eureka的docker鏡像,並啟動4個容器。基於DNS的注冊中心就搭建完畢了。
你只需要對DNS記錄進行變更,就可以實現動態的、快速擴容/縮容了。
關於如何將Eureka部署到Docker,請參考另一篇文章:
3. SpringCloud 集成 Eureka服務 部署阿里雲伺服器
將SpringCloud集成Eureka服務部署在阿里雲伺服器。
項目在上一篇博客講過在本地測試SpringCloud集成Eureka服務,博客地址:
https://www.jianshu.com/p/78e8797ea804 ,現在將3個項目部署在阿里雲伺服器,環境是CentOS7,Tomcat 9。
在pom.xml文件里設置打包方式:
在啟動Application類添加:
在application.properties配置文件修改:
直接把項目lean下,再package:
打包後的war包在target目錄下:
修改pom.xml依賴:
程序入口application類修改:
消費者的api請求路徑修改:
application.properties修改
直接對項目lean,再package:
3.Eureka Client項目demo打包跟1類似,這就不重復寫了;
3個項目打包好的包名:springcloud-eureka.war,springcloud-eureka-client-one.war,springcloud-eureka-client-one.war:
4.將3個war部署阿里雲伺服器
登錄阿里雲的白塔控制面板,將3個包上傳到Tomcat的webapps文件夾下:
或者通過xftp工具上傳也可以;
上傳完後,重啟Tomcat,等一會,就可以在瀏覽器里訪問:
相關鏈接:
成功截圖: