Spring Cloud-3-高可用注册中心

在微服务架构这样的分布式环境中,我们需要充分考虑发生故障的情况,所以在生产环境中必须对各个组件进行高可用部署,对于微服务如此,对于服务注册中心也一样.

Eureka Server的设计一开始就考虑了高可用问题,在eureka的服务治理设计中,所有节点既是服务提供方,也是服务消费方,注册中心也不例外.
我们之前有设置过,让注册中心不注册自己,而高可用,实际上就是将自己作为服务,向服务注册中心注册自己,这样就可以形成一组互相注册的服务注册中心,以实现服务清单的互相同步,达到高可用的效果

搭建高可用服务注册中心

我们在之前创建的那个eureka-server的工程基础上去做

增加配置文件

首先,需要增加两个配置文件,先创建application-peer1.yml,作为peer1的服务中心的配置,将serviceUrl指向peer2,如下

1
2
3
4
5
6
7
8
server:
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
8
server:
port: 1112
eureka:
instance:
hostname: peer2
client:
service-url:
defaultZone: http://peer1:1111/eureka/

修改host文件

为了peer1和peer2能够被正确访问到,我们需要在host文件中加入以下内容:

1
2
127.0.0.1 peer1 
127.0.0.1 peer2

运行项目

先打包,执行mvn package,打包完成之后,以jar包的方式来执行这个项目,分别启动peer1和peer2.

1
2
java -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

执行完成以后,我们的注册中心就启动了两个了,如图
image
image
我们可以看到,在peer1的节点的DS replicas我们已经可以看到peer2节点了,在peer2的DS replicas中我们也可以看到peer1节点了.

直到这里,多节点的服务注册中心就搭建好了.

服务提供方的配置

服务提供方(就是我们之前的eureka-client)还需要做一些简单的配置,才能将服务注册到Eureka Server集群中.

在eureka-client项目中,修改application.yml

1
2
3
4
eureka:
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中,也就达不到高可用的目的.