Spring Cloud (三)、高可用注册中心

        在微服务架构这样的分布式环境中,所有的微服务都要注册到注册中心中,那么如果这侧中心发生了故障,结果整个系统都将无法使用,这就需要构建高可用的注册中心。

        构建高可用的服务注册中心以增强系统的可用性:在Eureka的服务治理设计中,所有节点既是服务提供方,也是服务消费方,服务注册中心也不例外。

       Eureka Server的高可用实际上就是将自己作为服务向其他服务注册中心注册自己,这样就可以形成一组互相注册的服务注册中心,以实现服务注册清单的互相同步,达到高可用的效果。

       还记得我们在搭建单节点的服务注册中心时,在application.properties中配置了下面两个参数,让服务注册中心不注册自己:

       eureka.client.register-with-eureka=false

       eureka.client.fetch-registry=false

模拟高可用的服务注册中心,我们来构建一个双节点的服务注册中心集群:

一、在/etc/hosts文件中添加对peer1和peer2的转换,让下面配置的host形式的serviceUrl能在本地访问到(Windows系统路径为C:\Windows\System32\drivers\etc\hosts):

127.0.0.1 peer1

127.0.0.1 peer2

二、打开我们之前所搭建的注册中心的项目

       在src\main\resources\目录下创建application-peer1.properties作为peer1服务中心的配置,并将server-url指向peer2:

#应用名
spring.application.name=eureka-server
#提供服务端口1111
server.port=1111
#提供服务的域名,这里在hosts文件中修改了
eureka.instance.hostname=peer1
#向peer2注册中心注册自己
eureka.client.service-url.defaultZone=http://peer2:1112/eureka/

       在src\main\resources\目录下创建application-peer2.properties作为peer2服务中心的配置,并将server-url指向peer1:    

#应用名称与第一个注册中心一样
spring.application.name=eureka-server
#提供服务端口1112
server.port=1112
#提供服务的域名,这里在hosts文件中修改了
eureka.instance.hostname=peer2
#向第一个注册中心注册自己
eureka.client.service-url.defaultZone=http://peer1:1111/eureka/

三、将应用打为jar包:使用mvn package命令

 

出现以下BUILD SUCCESS字样,证明打包成功:

打好的jar包位于target目录下:

四、通过命令参数的方式启动peer1和peer2:spring-profiles-active

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

首先我们要先进入到target目录下:cd target

通过java -jar eureka-server-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer1命令来启动peer1:

再次以同样的方式来启动peer2。

五、访问注册中心

       访问peer1的注册中心:http://localhost:1111/,如下图所示,我们可以看到,registered-replicas中已经有peer2节点的eureka-server了。并且该节点在可用分片之中(available-replicase)。

        访问peer1的注册中心:http://localhost:1112/,如下图所示,我们可以看到,registered-replicas中已经有peer1节点的eureka-server了。并且该节点在可用分片之中(available-replicase)。   

 

      我们可以尝试关闭peer1,在appication-peer1.properties中添加:

     eureka.client.register-with-eureka=false

     eureka.client.fetch-registry=false

     再次刷新http://localhost:1112/,可以看到peer1的节点变为了不可用分片(unabliable-replicase):

 

六、服务提供方也要做一些简单的配置才能将服务注册到Eureka Server集群中,上一篇文章中的hello-service为例,修改application.properties配置文件:

#为服务命名
spring.application.name=hello-service
#指定服务注册中心地址,多个注册中心以,隔开
eureka.client.service-url.defaultZone=http://peer1:1111/eureka/,http://peer2:1112/eureka/,

      上面的配置主要对eureka.client.service-url.defaultZone属性做了改动,将注册中心指向了之前我们搭建的peer1和peer2。

      启动服务提供者和peer1、peer2,访问http://localhost:1111/和http://localhost:1112/,可以观察到hello-service服务同时被注册到了peer1和peer2上。

       这时,如果我们断开了peer1,由于hello-service同时也向peer2注册,因此在peer2上的其他服务依然可以访问到hello-service,从而实现了服务注册中心的高可用。

注意:如果我们不想使用主机名来定义注册中心,也可以使用IP地址的形式,但是需要在配置文件中增加配置参数eureka.instance.prefer-ip-address=true,改值默认为false。

猜你喜欢

转载自blog.csdn.net/hdn_kb/article/details/92359363
今日推荐