引言:上一节 Eureka初探中我们介绍了Eureka服务端以及客户端的基本搭建方法,那么考虑如果Eureka所在的服务器挂掉了,就相当于所以客户端的通讯连接断了。这一节将介绍如何降低出现这种问题的概率。
“在微服务架构这样的分布式环境中, 我们需要充分考虑发生故障的情况, 所以在生产环境中必须对各个组件进行高可用部署, 对于微服务如此, 对于服务注册中心也一样。 但是到本节为止,我们一直都在使用单节点的服务注册中心,这在生产环境中显然并不合适,我们需要构建高可用的服务注册中心以增强系统的可用性。”——《Spring Cloud微服务实战》1
看过上一节 Eureka初探的内容可以看到,在搭建Eureka服务端的时候加了配置registerWithEureka: false
和fetchRegistry: false
意思是不让服务中心注册自己。现在要解决单点故障风险,我们需要做一个Eureka注册中心集群,需要让服务中心集群相互注册。以两个节点为例,配置如下:
- 新建application-peer1.yml
server:
port: 11111
spring:
application:
name: eureka-server
eureka:
instance:
hostname: peer1
client:
serviceUrl:
defaultZone: http://peer2:22222/eureka/
- 新建application-peer2.yml
server:
port: 22222
spring:
application:
name: eureka-server
eureka:
instance:
hostname: peer2
client:
serviceUrl:
defaultZone: http://peer1:11111/eureka/
- 配置IP与主机名映射模拟集群环境
打开编辑C:\windows\system32\drivers\etc\hosts
,加入如下内容保存
127.0.0.1 peer1
127.0.0.1 peer2
- 打包运行
使用Maven Install生成eureka.jar文件,命令行分别执行java -jar eureka.jar --spring.profiles.active=peer1
和java -jar eureka.jar --spring.profiles.active=peer2
- 查看运行状态
打开浏览器输入http://localhost:11111
和http://localhost:22222
- 客户端配置
修改上一节 Eureka初探中提到的客户端配置application.yml,目的是把hello-service注册到两个服务注册中心中
server:
port: 80
eureka:
client:
serviceUrl:
defaultZone: http://peer1:11111/eureka/,http://peer2:22222/eureka/
spring:
application:
name: hello-service
打包运行客户端,再打开浏览器输入http://localhost:11111
和http://localhost:22222
,发现hello-service已经同时注册到了两个服务中心中,这时如果其中一个服务中心故障,其它客户端可以从另一个服务中心获取到hello-service提供的服务
如我们不想使用主机名来定义注册中心的地址,也可以使用IP地址的形式, 但是需要在配置文件中增加配置参数eureka.instance.prefer江p-address= true, 该值默认为false ——《Spring Cloud微服务实战》
- 《Spring Cloud微服务实战》第3章 高可用注册中心中描述的内容 ↩