SpringCloud - 服务注册与发现组件Eureka的使用详解3(构建高可用注册中心)
在之前文章中我们都是使用单节点的服务注册中心,这个在生产环境下显然并不合适,本文接着介绍如何构建高可用的服务注册中心以增强系统的可用性。
(2)创建 application-peer1.properties,作为 peer1 服务中心(第一个节点)的配置,并将 service-url 指向 peer2:
(3)创建 application-peer2.properties,作为 peer2 服务中心(第二个节点)的配置,并将 service-url 指向 peer1:
(4)在本机 hosts 文件中增加如下配置,确保上面配置的 host 形式的 service-url 能在本地正确访问到:
(5)最后将项目打成 jar 包,然后执行如下两条命令分别启动 peer1 和 peer2:

(2)启动项目,通过访问 http://localhost:1111/ 和 http://localhost:1112/ 可以看到这个服务被同时注册到 peer1 和 peer2 上。若此时断开 peer1,由于该服务同时也向 peer2 注册,因此在 peer2 上的其他服务依然能访问到这个服务,从而实现服务注册中心到高可用。
三、构建高可用注册中心
1,Eureka Server 的高可用
- Eureka Server 在设计的时候就考虑了高可用设计,在 Eureka 服务治理设计中,所有节点既是服务的提供方,也是服务的消费方,服务注册中心也不例外。
- Eureka Server 的高可用实际上就是将自己做为服务向其他服务注册中心注册自己,这样就可以形成一组互相注册的服务注册中心,以实现服务清单的互相同步,达到高可用的效果。
2,构建步骤
(1)首先我们参考之前的文章实现一个服务注册中心,随后我们将在此基础上进行扩展,构建一个双节点的服务注册中心集群:
注意:原来 application.properties 里面配置的内容都要删除,因为这个是之前单节点的配置,删除防止干扰。
spring.application.name=eureka-server
server.port=1111
eureka.instance.hostname=peer1
eureka.client.service-url.defaultZone=http://peer2:1112/eureka
(3)创建 application-peer2.properties,作为 peer2 服务中心(第二个节点)的配置,并将 service-url 指向 peer1:
spring.application.name=eureka-server
server.port=1112
eureka.instance.hostname=peer2
eureka.client.service-url.defaultZone=http://peer1:1111/eureka
(4)在本机 hosts 文件中增加如下配置,确保上面配置的 host 形式的 service-url 能在本地正确访问到:
127.0.0.1 peer1 127.0.0.1 peer2
(5)最后将项目打成 jar 包,然后执行如下两条命令分别启动 peer1 和 peer2:
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
3,访问测试
(1)访问 peer1 的注册中心 http://localhost:1111/,可以看到 registered-replicas 中已经有 peer2 节点的 eureka-server 了,并且该节点在可用分片(available-replicas)之中。
同样访问 peer2 的注册中心 http://localhost:1112/,可以看到 registered-replicas 中已经用 peer1 节点的 eureka-server 了,并且该节点在可用分片(available-replicas)之中。

(2)我们关闭 peer2,再次刷新 http://localhost:1111/,可以看到 peer2 的节点变为不可用分片(unavailable-replicas)了。

附:服务提供方配置
在设置了多节点的服务注册中心之后,服务提供方还需要做一些简单的配置才能将服务注册到 Eureka Server 集群中。
(1)这里我们以上文的一个服务为例(点击查看),修改 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/
(2)启动项目,通过访问 http://localhost:1111/ 和 http://localhost:1112/ 可以看到这个服务被同时注册到 peer1 和 peer2 上。若此时断开 peer1,由于该服务同时也向 peer2 注册,因此在 peer2 上的其他服务依然能访问到这个服务,从而实现服务注册中心到高可用。
