在微服务架构这样的分布式环境中,我们需要充分考虑发生故障的情况,所以在生产环境中必须对各个组件进行高可用部署,对于微服务如此,对于服务注册中心也一样.
Eureka Server的设计一开始就考虑了高可用问题,在eureka的服务治理设计中,所有节点既是服务提供方,也是服务消费方,注册中心也不例外.
我们之前有设置过,让注册中心不注册自己,而高可用,实际上就是将自己作为服务,向服务注册中心注册自己,这样就可以形成一组互相注册的服务注册中心,以实现服务清单的互相同步,达到高可用的效果
搭建高可用服务注册中心
我们在之前创建的那个eureka-server的工程基础上去做
增加配置文件
首先,需要增加两个配置文件,先创建application-peer1.yml,作为peer1的服务中心的配置,将serviceUrl指向peer2,如下1
2
3
4
5
6
7
8server:
port: 1111
eureka:
instance:
hostname: peer1
client:
service-url:
defaultZone: http://peer2:1112/eureka/
再创建application-peer2.yml,作为peer2的服务中心的配置,将serviceUrl指向peer1,如下:1
2
3
4
5
6
7
8server:
port: 1112
eureka:
instance:
hostname: peer2
client:
service-url:
defaultZone: http://peer1:1111/eureka/
修改host文件
为了peer1和peer2能够被正确访问到,我们需要在host文件中加入以下内容:1
2127.0.0.1 peer1
127.0.0.1 peer2
运行项目
先打包,执行mvn package
,打包完成之后,以jar包的方式来执行这个项目,分别启动peer1和peer2.1
2java -jar eureka-server-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer1
java -jar eureka-server-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer2
执行完成以后,我们的注册中心就启动了两个了,如图
我们可以看到,在peer1的节点的DS replicas我们已经可以看到peer2节点了,在peer2的DS replicas中我们也可以看到peer1节点了.
直到这里,多节点的服务注册中心就搭建好了.
服务提供方的配置
服务提供方(就是我们之前的eureka-client)还需要做一些简单的配置,才能将服务注册到Eureka Server集群中.
在eureka-client项目中,修改application.yml1
2
3
4eureka:
client:
service-url:
defaultZone: http://peer1:1111/eureka/,http://peer2:1112/eureka/
就是在serviceUrl中添加了两个注册中心的地址,用逗号隔开,修改好之后,启动项目
通过访问localhost:1111 和 localhost:1112可以发现,eureka-client在两个服务中心都被注册了
至此,一个高可用的服务注册中心就完成了.
然后,我们来思考这样一个问题,如果在client端的service-url,只配置了peer1的注册中心地址的话, 那peer2还会被注册嘛?
答案是会的,因为eureka可以通过在各个节点进行复制来共享服务清单, 但是如果peer1挂掉的情况下,就不会注册到peer2中,也就达不到高可用的目的.