springcloud_config教程(6)--高可用的注册中心

    现在的config-server集群只有一个注册中心,如果注册中心蹦了,将无法正常运行,所以需要搭建高可用的注册中心集群。

    现在开始在本机搭建eureka-server集群,使用之前的工程server1。

    一.搭建注册中心

    1.运行3个server1的实例,无需创建三个工程,在本机搭建集群:

    在server1工程中,创建3个配置文件,并且把applicaiton.properties内容注释掉:

    三个配置文件端口号分别是:

 
# 注册到eureka-server的服务名,三个文件必须相同
spring.application.name=server1
# 表示三个配置文件的端口号
server.port=9761/9762/9763
# 表示是否注册自身到eureka服务器,集群下为true,默认值
eureka.client.register-with-eureka=true
# 是否从eureka上获取注册信息,集群下为true,默认值
eureka.client.fetch-registry=true
# 表示三个配置文件的hostname
eureka.instance.hostname=server1/server2/server3
# 提供服务的路径
eureka.client.serviceUrl.defaultZone=http://server2:9762/eureka/,http://server1:9761/eureka/,http://server3:9763/eureka/

    修改host文件,用127.0.0.1来对应server1 / server2 / server3:

    注意:此处是在本机上演示,需要修改Hosts和设置eureka.instance.hostname,如果是在不同的主机上,只需设置:

eureka.instance.prefer-ip-address=true

eureka.instance.instance-id=${spring.cloud.client.ipAddress}:${server.port}

    无需修改hosts文件和设置eureka.instance.hostname。

 

    在idea工具中,选择菜单:

    创建三个springboot,都是从server1创建,active profile分别是1,2,3,对应之前创建的配置文件:

    现在创建好了三个server1工程的副本,分别是server1-1,server1-2,server1-3:

    启动这3个工程,然后前往http://localhost:9761/,http://localhost:9762/,http://localhost:9763/ 的任意一个,都可以看到已经注册了三个服务,并且DS Replicas,available-replicas,registered-replicas都是集群中除去自己的另外两个,表示副本,因为eureka-server集群的原理就是相互注册,并且互相复制达到同步配置,所以集群中的一个节点的副本就是除自己之外的其他节点。如果配置文件中将eureka.client.register-with-eureka和eureka.client.fetch-registry的值设置为false,那么服务本身将不会注册到设定的地址,并且available-replicas的内容将会变到unavailable-replicas去,节点之间将无法通信,失去了集群的意义,如下图第三张:

 

    二.config-server集群注册到eureka-server集群

    1.改造config-server和config-server2的配置文件,将 eureka.clent.serviceUrl.defaultZone=http://localhost:8761/eureka/

 改为 eureka.client.serviceUrl.defaultZone=http://server1:9761/eureka/,http://server2:9762/eureka/,http://server3:9763/eureka/ ,将服务注册到eureka-server集群。

    2. 此时启动config-server 和 config-server2工程,在http://localhost:9761/,http://localhost:9762/,http://localhost:9763/ 的任意一个都可以看到,两个config-server的服务已经被注册到注册中心:

    三.验证config-client获取配置

    1.改造config-client 和 config-client2的配置文件,和config-server的改造方式一样,不再赘述。

    2. 启动config-client 和 config-client2工程,在http://localhost:9761/,http://localhost:9762/,http://localhost:9763/ 的任意一个都可以看到,两个客户端已经注册到注册中心:

    3. 调用config-client 或者 config-client2的接口,获取到了配置,得到的结果如下,:

    4.此时关闭掉2个注册中心,仅剩下server1-1,由于eureka-server的配置中,默认开启了保护模式,所以网页上的管理界面中依旧还有3个server1,但是实际上只有server1-1:

    5.修改git中的配置:

    6.在rabbitmq开启的情况下,调用任意客户端的/bus/refresh接口:

    7.调用config-client 和 config-client2的接口,发现配置都已经更新了:

    8.此时将server1-1也关闭,然后调用config-client 和 config-client2的接口,发现依旧可以正常获取到结果,因为config-client中缓存了配置。但此时无法调用接口更新配置,因为注册中心已经全部关闭了,config-server无法再注册。

    9.此时开启server1-2工程,保持server1-1和server1-3关闭,打开http://localhost:9762/,另外两个注册中心都到了unavailable-replicas,界面如下:

    10.此时再次修改git中的配置:

    11.调用config-client 或者 config-client2任意一个的/bus/refresh接口更新配置:

    12.访问config-client 和 config-client2 的接口,发现配置已经更新:

    至此,实现了注册中心的高可用,只要有一个注册中心还在运行状态,就可以实现服务的注册和发现,当所有的注册中心都崩掉的时候,无法注册和发现服务,但配置已经缓存下来,项目依旧可以运行;此时再开启至少一个注册中心,又可以注册和发现服务了。

你可能感兴趣的:(springcloud_config教程(6)--高可用的注册中心)