Spring Cloud構建微服務架構(三)高可用服務註冊中心

前言

Spring Cloud系列文章的開始,我們就介紹了服務註冊與發現,其中,主要演示瞭如何構建和啓動服務註冊中心Eureka Server,以及如何將服務註冊到Eureka Server中,但是在之前的示例中,這個服務註冊中心是單點的,顯然這並不適合應用於線上生產環境,那麼下面在前文的基礎上,我們來看看該如何構建高可用的Eureka Server集羣。

Eureka Server的高可用

Eureka Server除了單點運行之外,還可以通過運行多個實例,並進行互相註冊的方式來實現高可用的部署,所以我們只需要將Eureke Server配置其他可用的serviceUrl就能實現高可用部署。

下面以Chapter1-1-1中的eureka-server爲基礎,對其改造,構建雙節點的服務註冊中心。

  • 創建application-peer1.properties,作爲peer1服務中心的配置,並將serviceUrl指向peer2
spring.application.name=eureka-server
server.port=1111
eureka.instance.hostname=peer1

eureka.client.serviceUrl.defaultZone=http://peer2:1112/eureka/
  • 創建application-peer2.properties,作爲peer2服務中心的配置,並將serviceUrl指向peer1
spring.application.name=eureka-server
server.port=1112
eureka.instance.hostname=peer2

eureka.client.serviceUrl.defaultZone=http://peer1:1111/eureka/
  • /etc/hosts文件中添加對peer1和peer2的轉換
127.0.0.1 peer1
127.0.0.1 peer2
  • 通過spring.profiles.active屬性來分別啓動peer1和peer2
java -jar eureka-server-1.0.0.jar --spring.profiles.active=peer1
java -jar eureka-server-1.0.0.jar --spring.profiles.active=peer2
  • 此時訪問peer1的註冊中心:http://localhost:1111/,如下圖所示,我們可以看到registered-replicas中已經有peer2節點的eureka-server了。同樣地,訪問peer2的註冊中心:http://localhost:1112/,能看到registered-replicas中已經有peer1節點,並且這些節點在可用分片(available-replicase)之中。我們也可以嘗試關閉peer1,刷新http://localhost:1112/,可以看到peer1的節點變爲了不可用分片(unavailable-replicas)。

服務註冊與發現

在設置了多節點的服務註冊中心之後,我們主需要簡單需求服務配置,就能將服務註冊到Eureka Server集羣中。我們以Chapter1-1-1中的compute-service爲基礎,修改application.properties配置文件:

spring.application.name=compute-service
server.port=2222

eureka.client.serviceUrl.defaultZone=http://peer1:1111/eureka/,http://peer2:1112/eureka/

上面的配置主要對eureka.client.serviceUrl.defaultZone屬性做了改動,將註冊中心指向了之前我們搭建的peer1與peer2。

下面,我們啓動該服務,通過訪問http://localhost:1111/http://localhost:1112/,可以觀察到compute-service同時被註冊到了peer1和peer2上。若此時斷開peer1,由於compute-service同時也向peer2註冊,因此在peer2上其他服務依然能訪問到compute-service,從而實現了高可用的服務註冊中心。

深入理解

雖然上面我們以雙節點作爲例子,但是實際上因負載等原因,我們往往可能需要在生產環境構建多於兩個的Eureka Server節點。那麼對於如何配置serviceUrl來讓集羣中的服務進行同步,需要我們更深入的理解節點間的同步機制來做出決策。

Eureka Server的同步遵循着一個非常簡單的原則:只要有一條邊將節點連接,就可以進行信息傳播與同步。什麼意思呢?不妨我們通過下面的實驗來看看會發生什麼。

  • 場景一:假設我們有3個註冊中心,我們將peer1、peer2、peer3各自都將serviceUrl指向另外兩個節點。換言之,peer1、peer2、peer3是兩兩互相註冊的。啓動三個服務註冊中心,並將compute-service的serviceUrl指向peer1並啓動,可以獲得如下圖所示的集羣效果。

訪問http://localhost:1112/,可以看到3個註冊中心組成了集羣,compute-service服務通過peer1同步給了與之互相註冊的peer2和peer3。

通過上面的實驗,我們可以得出下面的結論來指導我們搭建服務註冊中心的高可用集羣:

  • 兩兩註冊的方式可以實現集羣中節點完全對等的效果,實現最高可用性集羣,任何一臺註冊中心故障都不會影響服務的註冊與發現

【轉載自】:http://blog.didispace.com/springcloud6/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章