大家好,又见面了,我是你们的朋友全栈君。
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,而且订单服务也成功注册到该注册中心。
原文链接:http://blog.itpub.net/31558358/viewspace-2375380/
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/132376.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...