SpringCloud實戰四:Spring Cloud Eureka 高可用
高可用HA(High Availability)是分散式系統架構設計中必須考慮的因素之一,它通常是指:通過設計減少系統不能提供服務的時間。
假設系統一直能夠提供服務,我們說系統的可用性是100%,如果系統每執行100個時間單位,會有1個時間單位無法提供服務,我們說系統的可用性是99%,很多公司的高可用目標是4個9,也就是99.99%,這就意味著,系統的年停機時間為8.76個小時。
舉個高可用的栗子,Redis的高可用方案,從最開始的主從模式到sentinel模式,sentinel是一個獨立的程序,監控redis master-slave叢集,發現master宕機後能進行自動切換,從而達到高可用。
回到正題, eureka 註冊中心怎麼高可用?答案是:對等複製,即 Peer to Peer 模式,副本之間不分主從,任何副本都可以接收寫操作,然後每個副本之間相互進行資料更新。
1.程式碼實踐,建立一個 eureka-server-ha 高可用註冊中心服務端,客戶端只要向多個服務端註冊即可,大部分程式碼和 eureka-server 一樣,配置檔案不一樣了,需要多個配置檔案結合,啟動 eureka-server-ha 專案時,指定使用那個配置檔案。
-
假設為了達到高可用,我們需要啟動3個 eureka-server 節點,3個節點的例項名分別是 peer1、peer2、peer3,它們之間相互註冊,如:peer1向peer2、peer3註冊,peer2向peer1、peer3註冊,peer3向peer1、peer2註冊來達到高可用
-
建立一個 bootstrap.properties,在啟動專案時,它裡面的配置會優先載入,它裡面配置security的帳號密碼
-
peer1 使用10025埠,對應application-peer1.properties
-
peer2 使用10026埠,對應application-peer2.properties
-
peer3 使用10027埠,對應application-peer3.properties
-
windwos 下 peer 需要修改 C:\Windows\System32\drivers\etc\hosts 檔案,在裡面新增peer1-3的對映
127.0.0.1 peer1
127.0.0.1 peer2
127.0.0.1 peer3
這裡分別貼出各配置檔案程式碼:
#bootstrap.properties 配置登入的使用者名稱和密碼
spring.security.user.name=zy
spring.security.user.password=zy123
# application-peer1.properties
server.port=10025
spring.application.name=eureka-server-ha
spring.profiles.active=peer1
eureka.instance.hostname=peer1
eureka.client.registerWithEureka=true
# peer1 向 peer2、peer3註冊
eureka.client.serviceUrl.defaultZone=http://zy: [email protected]:10026/eureka/,http://zy:[email protected]:10027/eureka/
#application-peer2.properties
server.port=10026
spring.application.name=eureka-server-ha
spring.profiles.active=peer2
eureka.instance.hostname=peer2
eureka.client.registerWithEureka=true
# peer2 向 peer1、peer3註冊
eureka.client.serviceUrl.defaultZone=http://zy:[email protected]:10025/eureka/,http://zy:[email protected]:10027/eureka/
#application-peer3.properties
server.port=10027
spring.application.name=eureka-server-ha
spring.profiles.active=peer3
eureka.instance.hostname=peer3
eureka.client.registerWithEureka=true
# peer3 向 peer1、peer2註冊
eureka.client.serviceUrl.defaultZone=http://zy:[email protected]:10025/eureka/,http://zy:[email protected]:10026/eureka/
然後通過IDEA的maven工具,雙擊 package 把專案打包成jar檔案,再通過 java -jar xxx.jar 命令啟動
cd 打包目錄,否則會找不到jar,cmd啟動命令如下:
java -jar eureka-server-ha-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer1
java -jar eureka-server-ha-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer2
java -jar eureka-server-ha-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer3
2.eureka-client 只需修改註冊中心的地址即可,配置如下:
server.port=9600
spring.application.name=eureka-client
eureka.instance.prefer-ip-address=true
#eureka 註冊中心高可用配置
eureka.client.serviceUrl.defaultZone=http://zy:[email protected]:10025/eureka/,http://zy:[email protected]:10026/eureka/,http://zy:[email protected]:10027/eureka/
然後啟動 eureka-client
因啟動了3個 eureka-server節點 ,因此可以訪問3個註冊中心:http://localhost:10025/ ,http://localhost:10026/ ,http://localhost:10027/,進入後,可以看到 DS Replicas 區域有另外2個註冊中心,Instances 區域有 eureka-server-ha,後面顯示有3個埠,最下面有個available-replicas
OK,註冊中心的高可用已經完成,3個節點,掛掉一個並沒有影響,還有2個節點能提供服務