文章实例使用的Spring Cloud版本为Finchley.SR1,Spring Boot版本为2.0.4。
1 高可用服务注册中心
上一节服务注册与服务发现 中,我们尝试了服务注册中心的构建,但在微服务架构这样的分布式环境中,我们需要充分考虑发生故障的情况,所以在生产环境中必须对各个组件进行高可用部署,Eureka Server的高可用是通过启动多实例,并将自己作为服务向其他服务注册中心注册自己,最终形成的一组相互注册的服务注册,以实现服务清单的互相同步,达到高可用的效果。
2 双节点服务注册中心实例
2.1 修改上一节的application.properties配置文件,并增加application-peer1.properties和application-peer2.properties两个配置文件
application.properties
spring.application.name=eureka-server
#server.port=1001
#主机名
#eureka.instance.hostname=localhost
#向注册中心注册自己
eureka.client.register-with-eureka=true
#允许客户端向Eureka 注册表获取信息
eureka.client.fetch-registry=true
application-peer1.properties
server.port=1002
#主机名
eureka.instance.hostname=peer1
#实例默认通过使用域名形式注册到注册中心:false
eureka.instance.prefer-ip-address=false
#实例名
eureka.instance.instance-id=${eureka.instance.hostname}:${server.port}
#指定另一个服务注册中心的位置
eureka.client.serviceUrl.defaultZone=http://peer2:1003/eureka/
application-peer2.properties
server.port=1003
#主机名
eureka.instance.hostname=peer2
#实例默认通过使用域名形式注册到注册中心:false
eureka.instance.prefer-ip-address=false
#实例名
eureka.instance.instance-id=${eureka.instance.hostname}:${server.port}
#指定另一个服务注册中心的位置
eureka.client.serviceUrl.defaultZone=http://peer1:1002/eureka/
修改C:\Windows\System32\drivers\etc\hosts文件,添加对peer1和peer2的转换
127.0.0.1 peer1
127.0.0.1 peer2
2.2 通过设置–spring.profiles.active参数,分别加载application-peer1.properties和application-peer2.properties配置文件启动服务注册中心实例
打开http://localhost:1002/和http://localhost:1003/,可以看到peer1和peer2在服务注册中心相互注册的结果:
访问peer1的注册中心:http://localhost:1002/ ,可以看到registered-replicas中已经有peer2节点的eureka-server了。同样地,访问peer2的注册中心:http://localhost:1003/ ,能看到registered-replicas中已经有peer1节点,并且这些节点在可用分片(available-replicase)之中:
3 修改eureka-client,修改注册中心地址同时指向peer1和peer2注册中心:
#指定注册中心地址
eureka.client.serviceUrl.defaultZone=http://peer2:1002/eureka/,http://peer2:1003/eureka/