上一篇文章介绍了如何使用Eureka搭建微服务注册与发现中心,这篇博文简单介绍下如何搭建多节点高可用的服务注册中心。
Eureka Server的设计一开始就考虑了高可用问题,在Eureka的服务治理设计中,所有服务节点既是服务提供方也是服务消费方,服务注册中心也不例外。上节的单节点配置中,我们设置过以下参数,让注册中心不注册自己:
eureka.client.register-with-eureka=false eureka.client.fetch-registry=false
Eureka Server的高可用实际上就是将自己作为服务向其他服务注册中心注册自己,这样就可以形成一组互相注册的服务注册中心,以实现服务清单的互相同步,达到高可用的效果。下面我们来尝试搭建高可用服务注册中心的集群。在上一节的程序上进行扩展,搭建双节点的服务注册中心集群。
(一)创建application-peer1.properties配置文件,作为peer1服务中心的配置,并将serviceUrl指向peer2:
server.port=1111 server.application.name=eureka-server eureka.instance.hostname=peer1 spring.application.name=peer1-service eureka.client.serviceUrl.defaultZone=http://peer2:1112/eureka/
(二)创建application-peer2.properties配置文件,作为peer2服务中心的配置,并将serviceUrl指向peer1:
server.port=1112 server.application.name=eureka-server eureka.instance.hostname=peer2 spring.application.name=peer2-service eureka.client.serviceUrl.defaultZone=http://peer1:1111/eureka/
(三)在本地hosts文件中添加配置,让上面的域名能够被访问到:
127.0.0.1 peer1 127.0.0.1 peer2
(四)删除或者注释掉单机版的以下配置,防止节点不注册自己:
eureka.client.register-with-eureka=false eureka.client.fetch-registry=false
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和peer2的面板http://localhost:1111/、http://localhost:1112/可以看到,Instances currently registered with Eureka中已经有两个注册进来的服务了。
在设置了多节点的注册中心之后,服务提供方还需要做一些简单的配置才能将服务注册到Eureka Server集群之中,以hello-service为例,修改application.properties配置文件中的eureka.client.serviceUrl.defaultZone配置,将注册中心指向我们前面搭建的peer1和peer2:
spring.application.name=hello-service eureka.client.serviceUrl.defaultZone=http://peer1:1111/eureka/,http://peer2:1112/eureka/
现在我们启动hello-service,可以观察到hello-service被同时注册到了peer1和peer2当中。此时如果peer1挂掉,我们在peer2上依然能够访问到hello-service,从而实现了注册中心的高可用。