1. 程式人生 > >springcloud(四)-Eureka Server集群

springcloud(四)-Eureka Server集群

主機 理解 經驗 ava 一段 生產環境 replicas pan 信息

Eureka Server的高可用

這一節我們接著上一節說。

有分布式應用開發經驗的朋友應該發現,前文編寫的單節點Eureka Server並不適合線上生產環境。Eureka Client會定時連接Eureka Server,獲取服務註冊表中的信息並緩存到本地。微服務在消費遠程API時總是使用本地緩存中的數據。因此一般來說,即使Eureka Server發生宕機,也不會影響服務之間的調用。但如果Eureka Server宕機時,某些微服務也發生了不可用的情況,Eureka Client中的緩存若不被更新,就可能會影響微服務調用,甚至影響整個應用系統的高可用性。因此,在生產環境中,通常會部署一個高可用的Eureka Server集群。

編寫高可用Eureka Server

Eureka Server可以通過運行多個實例並相互註冊的方式實現高可用部署,Eureka Server 實例會彼此增量地同步信息,從而確保所有節點數據一致。事實上,節點之間相互註冊是Eureka Server的默認行為,還記的前文我們提到過的:

  eureka.client.registerWithEureka = false

  eureka.client.fetchRegistry = false

這倆都是默認true的。

這裏我們在前文的基礎上,構建一個雙節點Eureka Server集群。

1.復制項目micrservice-discovery-eureka,將ArtifactId修改為microservice-discovery-eureka-ha。

2.配置系統的hosts,Window系統的hosts文件路徑是C:\Windows\System32\drivers\etc\hosts;Linux及Mac OS等系統的文件路徑是/etc/hosts。

    127.0.0.1 peer1 peer2

3.將application.yml修改如下,讓兩個節點的Eureka Server相互註冊。

spring:
  application:
    name: microservice-discovery-eureka-ha
---
spring:
  #指定profile=peer1
  profiles: peer1
server:
  port: 
8761 eureka: instance: #指定當profile=peer1時,主機名是peer1 hostname: peer1 client: serviceUrl: # 將自己註冊到peer2這個Eureka上面去 defaultZone: http://peer2:8762/eureka/ --- spring: profiles: peer2 server: port: 8762 eureka: instance: hostname: peer2 client: serviceUrl: defaultZone: http://peer1:8761/eureka/

如上,使用連字符(---)將該application.yml文件分為三段。第二段和第三段分別為spring.profiles指定了一個值,該值表示它所在的那段內容應用在哪個profile裏。第一段由於並未指定spring.profiles,因此這段內容會對所有profile生效。

經過以上分析,不難理解,我們定義了peer1和peer2這兩個profile。當應用以peer1這個profile啟動時,配置該Eureka Server的主機名為peer1,並將其註冊到http://peer2:8762/eureka/;反之,當應用以profile=peer2啟動時,Eureka Server會註冊到peer1節點的Eureka Server。

測試

1.打包項目,並使用以下命令啟動兩個EurekaServer節點。

java -jar microservice-discovery-eureka-ha-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer1

java -jar microservice-discovery-eureka-ha-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer2

  通過spring.profiles.active指定使用哪個profile啟動。

2.訪問http://peer1:8761,會發現“registered-replicas”中已有peer2節點;同理,訪問http://peer2:8762,也能發現其中的“registered-replicas”中有peer1節點。

最後

還沒結束,在說幾句。

我們要將應用註冊到Eureka Server集群上,我們只需要配置多個Eureka Server地址即可,例如:

defaultZone: http://peer1:8761/eureka/,http://peer2:8762/eureka/

直接用逗號隔開即可。

其實我們完全不用這樣,就只配置一個就行,因為你eureka server集群不是數據同步的嗎!!!

springcloud(四)-Eureka Server集群