在微服務架構這樣的分布式環境中,我們需要充分考慮發生故障的情況,所以在生產環境中必須對各個組件進行高可用部署,對與微服務和服務注冊中心都需要高可用部署,Eureka 高可用實際上就是將自己作為服務向其他服務注冊中心注冊自己,這樣就可以形成一組互相注冊的服務注冊中心,已實現服務清單的互相同步,達到高可用效果,下面的示例構建一個服務注冊中心集群,在配置單個服務注冊中心的基礎上進行擴展,示例代碼如下:
-
創建 application-server1.properties 作為服務注冊中心集合的 server1 注冊中心,並將 serviceUrl 指向 server2 注冊中心,配置如下:
server.port=1111
spring.application.name=eureka-server
eureka.instance.hostname=eurekaserver1
eureka.client.service-url.defaultZone=http://eurekaserver2:1112/eureka
-
創建 application-server2.properties 作為服務注冊中心集合的server2 注冊中心,並將serviceUrl指向server1 注冊中心,配置如下:
server.port=1112
spring.application.name=eureka-server
eureka.instance.hostname=eurekaserver2
eureka.client.service-url.defaultZone=http://eurekaserver1:1111/eureka
-
在 /etc/hosts 文件中添加對 eurekaserver1 和 eurekaserver2 的域名解析,代碼如下:
127.0.0.1 eurekaserver1
127.0.0.1 eurekaserver2
-
通過 spring.profiles.active 屬性來分別啟動 eurekaserver1 和 eurekaserver2:
java -jar eureka-server-1.0.0.jar --spring.profiles.active=server1
java -jar eureka-server-1.0.0.jar --spring.profiles.active=server2
啟動之后訪問 http://localhost:1111 ,可以看到 registered-replicas 中已經有 eurekaserver2 的注冊中心,如下圖所示:
-
在設置了多節點的服務注冊中心之后,服務提供方還需要做一些簡單的配置才能將服務注冊到 Eureka Server 集群中,在前面的 hello-service 為例,修改 application.properties 配置文件,如下所示:
spring.application.name=hello-service
eureka.client.service-url.defaultZone=http://eurekaserver1:1111/eureka/,http://eurekaserver2:1112/eureka
上面的配置主要對 eureka.client.service-url.defaultZone 屬性進行了修改,將注冊中心指向了之前我們搭建的服務注冊中心集群,啟動服務后,可以看到在 eurekaserver1 和 eurekaserver2 都進行了注冊。
