咱們已經介紹了1--SpringCloud的服務註冊與發現Eureka,其中,主要演示瞭如何構建和啓動服務註冊中心Eureka Server,以及如何將服務註冊到Eureka Server中,可是在以前的示例中,這個服務註冊中心是單點的,顯然這並不適合應用於線上生產環境,那麼下面在前文的基礎上,咱們來看看該如何構建高可用的Eureka Server集羣。html
若是您還不熟悉如何構建服務中心和註冊服務,請先閱讀1--SpringCloud的服務註冊與發現Eurekagit
Eureka Server除了單點運行以外,還能夠經過運行多個實例,並進行互相註冊的方式來實現高可用的部署,因此咱們只須要將Eureke Server配置其餘可用的serviceUrl就能實現高可用部署。spring
下面以中1--SpringCloud的服務註冊與發現Eureka的eureka-server爲基礎,對其改造,構建雙節點的服務註冊中心。app
建立application-peer1.properties文件微服務
做爲peer1服務中心的配置,並將serviceUrl指向peer2post
spring.application.name=eureka-server server.port=1111 eureka.instance.hostname=peer1 eureka.client.serviceUrl.defaultZone=http://peer2:1112/eureka/
建立application-peer2.properties文件url
做爲peer2服務中心的配置,並將serviceUrl指向peer1spa
spring.application.name=eureka-server server.port=1112 eureka.instance.hostname=peer2 eureka.client.serviceUrl.defaultZone=http://peer1:1111/eureka/
修改host文件3d
Windows:C:\Windows\System32\drivers\etc Linux:/etc/hosts
code
127.0.0.1 peer1
127.0.0.1 peer2
經過修改 application.properties裏面的spring.profiles.active
屬性來分別啓動peer1和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集羣中。咱們以1--SpringCloud的服務註冊與發現Eureka中的eureka-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的同步遵循着一個很是簡單的原則:只要有一條邊將節點鏈接,就能夠進行信息傳播與同步。什麼意思呢?不妨咱們經過下面的實驗來看看會發生什麼。
訪問http://localhost:1112/
,能夠看到3個註冊中心組成了集羣,eureka-service服務經過peer1同步給了與之互相註冊的peer2和peer3。
經過上面的實驗,咱們能夠得出下面的結論來指導咱們搭建服務註冊中心的高可用集羣: