1. 程式人生 > >SpringCloud實戰四:Spring Cloud Eureka 高可用

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個節點能提供服務