Eureka Server進行互相注冊的方式來實現高可用的部署,所以我們只需要將Eureke Server配置其他可用的serviceUrl就能實現高可用部署
- 創建
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/
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)。
服務注冊與發現
pring.application.name=compute-service server.port=2222 eureka.client.serviceUrl.defaultZone=http://peer1:1111/eureka/,http://peer2:1112/eureka/
如何配置serviceUrl來讓集群中的服務進行同步
Eureka Server的同步遵循着一個非常簡單的原則:只要有一條邊將節點連接,就可以進行信息傳播與同步
場景一
假設我們有3個注冊中心,我們將peer1、peer2、peer3各自都將serviceUrl指向另外兩個節點。換言之,peer1、peer2、peer3是兩兩互相注冊的。啟動三個服務注冊中心,並將compute-service的serviceUrl指向peer1並啟動,可以獲得如下圖所示的集群效果。
訪問http://localhost:1112/
,可以看到3個注冊中心組成了集群,compute-service服務通過peer1同步給了與之互相注冊的peer2和peer3
總結:
- 兩兩注冊的方式可以實現集群中節點完全對等的效果,實現最高可用性集群,任何一台注冊中心故障都不會影響服務的注冊與發現