您的位置:首页 > 编程语言 > Java开发

【夯实Spring Cloud】Spring Cloud中使用Eureka集群搭建高可用服务注册中心

2018-12-25 20:22 761 查看
版权声明:尊重博主原创文章,转载请注明出处 https://blog.csdn.net/eson_15/article/details/85252697

本文属于【夯实Spring Cloud】系列文章,该系列旨在用通俗易懂的语言,带大家了解和学习Spring Cloud技术,希望能给读者带来一些干货。系列目录如下:

【夯实Spring Cloud】Dubbo沉睡5年,Spring Cloud开始崛起!
【夯实Spring Cloud】Spring Cloud中基于maven的分布式项目框架的搭建
【夯实Spring Cloud】Spring Cloud中的Eureka服务注册与发现详解
【夯实Spring Cloud】Spring Cloud中如何完善Eureka中的服务信息
【夯实Spring Cloud】Spring Cloud中使用Eureka集群搭建高可用服务注册中心
【夯实Spring Cloud】Spring Cloud中的Eureka和Zookeeper的区别在哪?
【夯实Spring Cloud】Spring Cloud中使用Ribbon实现负载均衡详解(上)
【夯实Spring Cloud】Spring Cloud中使用Ribbon实现负载均衡详解(下)
【夯实Spring Cloud】Spring Cloud中自定义Ribbon负载均衡策略
【夯实Spring Cloud】Spring Cloud中使用Feign实现负载均衡详
【夯实Srping Cloud】Spring Cloud中使用Hystrix实现断路器原理详解(上)
【夯实Srping Cloud】Spring Cloud中使用Hystrix实现断路器原理详解(下)
【夯实Spring Cloud】Spring Cloud中使用Zuul实现路由网关详解
【夯实Spring Cloud】Spring Cloud分布式配置中心详解
【夯实Spring Cloud】未完待续

前面两节,对 Spring Cloud 中 Eureka 服务注册和发现做了详细的分析,并且完善了 Eureka 中的服务信息,做到人性化。这一节主要介绍一下如何搭建一个高可用的 Eureka 集群。

1. 分布式和集群有啥区别?

可能有很多人对分布式和集群这两个概念有点混淆。我先用通俗易懂的话给大家解释下:

分布式:一个业务分拆多个子业务,部署在不同的服务器上
集群:同一个业务,分别部署在不同的服务器上

所以分布式的每一个节点,完成的是不同的业务,一个节点挂了,那么这个业务功能就无法访问了,甚至可能会影响到其他业务。而集群是一个比较有组织的架构,正因为有组织性,一个服务节点挂了,其他服务节点可以顶上来,从而保证了服务的健壮性。

所以说,集群可以理解为:你中有我,我中有你,手拉手肩并肩,一起保证服务的健壮性

2. Eureka集群逻辑

在搭建 Eureka 集群之前,先来回顾一下前面搭建的单个 Eureka 服务,看下 yml 配置文件:

server:
port: 7001

eureka:
instance:
#eureka服务端的实例名称
hostname: eureka01
client:
# false表示不向注册中心注册自己
register-with-eureka: false
# false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
fetch-registry: false
service-url:
#设置与Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址(单机)。
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

这是一个 Eureka 服务,名称是 eureka7001, 注册中心是它自己的。那么我们如何去搭建一个 Eureka 集群呢?假设现在有三个 Eureka 服务:eureka7001、eureka7002 和 eureka7003。

为了体现出集群的你中有我,我中有你,不难想象,eureka7001 中应该挂上 eureka7002 和 eureka7003;eureka7002 中应该挂上 eureka7001 和 eureka7003;eureka7003 中应该挂上 eureka7001 和 eureka7002。如下图所示:

这样就搭建好了一个 Eureka 集群了,那么我们如何去实现呢?接下来就落实到具体实现方式。

3. Eureka7001的改造

由上面的分析可知,Eureka7001 需要挂上 Eureka7002 和 Eureka7003,所以在 Eureka7001 的配置文件中需要重新配置一下 defaultZone,如下:

server:
port: 7001

eureka:
instance:
#eureka服务端的实例名称
hostname: eureka01
client:
# false表示不向注册中心注册自己
register-with-eureka: false
# false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
fetch-registry: false
service-url:
defaultZone: http://eureka02.com:7002/eureka/,http://eureka03.com:7003/eureka/

OK,defaultZone 配置好了 eureka7002 和 eureka 7003。

4. 搭建Eureka7002

以同样的方式,拷贝一份 Eureka7001 的工程,修改其配置文件:

server:
port: 7002

eureka:
instance:
#eureka服务端的实例名称
hostname: eureka02
client:
# false表示不向注册中心注册自己
register-with-eureka: false
# false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
fetch-registry: false
service-url:
defaultZone: http://eureka01.com:7001/eureka/,http://eureka03.com:7003/eureka/

可以看出,在 eureka7002 中,把 eureka7001 和 eureka7003 挂进来。

5. 搭建Eureka7003

以相同的方式,把 eureka7003 也搭建好。

server:
port: 7003

eureka:
instance:
#eureka服务端的实例名称
hostname: eureka03
client:
# false表示不向注册中心注册自己
register-with-eureka: false
# false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
fetch-registry: false
service-url:
defaultZone: http://eureka01.com:7001/eureka/,http://eureka02.com:7002/eureka/

ok,现在三个 eureka 注册中心都搭建好了,最后别忘了在本地 hosts 文件中将 eureka7001、eureka7002 和 eureka7003 映射到 127.0.0.1。

6. 修改订单服务

我们首先来回忆下,之前的订单服务提供方的配置文件是怎么写的:

# 客户端注册进eureka服务列表里
eureka:
client:
service-url:
defaultZone: http://eureka01:7001/eureka/
instance:
instance-id: 书籍订单服务-8001  # 人性化显示出服务的信息
prefer-ip-address: true    # 访问路径可显示ip地址

是将订单服务注册到 eureka7001 中,因为之前就这一个 eureka 注册中心,那么现在有三个了,我们需要修改下配置,将订单服务注册到三个 eureka 中。

# 客户端注册进eureka服务列表里
eureka:
client:
service-url:
defaultZone: http://eureka01:7001/eureka/,http://eureka02:7002/eureka/,http://eureka03:7003/eureka/
instance:
instance-id: 书籍订单服务-8001  # 人性化显示出服务的信息
prefer-ip-address: true    # 访问路径可显示ip地址

7. 测试效果

OK,所有搭建步骤都完成了,接下来分别启动一下 eureka7001、eureka7002 和 eureka7003,再启动下订单提供服务。然后我们可以分别访问下三个 eureka 注册中心,看一下结果。我以访问 eureka7001 为例,可以看到该服务中心挂着 eureka7002 和 eureka7003,而且订单服务也成功注册到该注册中心。

源码下载地址:https://gitee.com/eson15/springcloud_study
更多优质文章请关注我的微信公众号【程序员私房菜】,更多编程和架构等学习资源等你来获取。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: