前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >自我加戏,在自闭的边缘尝试高可用的Eureka

自我加戏,在自闭的边缘尝试高可用的Eureka

作者头像
JathonKatu
发布2020-10-27 14:35:36
2900
发布2020-10-27 14:35:36
举报
文章被收录于专栏:JathonKatu

微服务架构这样的分布式环境中,必须充分考虑故障的发生,所以生产环境中必须对各个组件进行高可用部署,对于微服务如此,对于服务注册中心也是如此。

在Eureka的服务治理设计中,节点即是服务提供方,也是服务消费方,服务注册中心也不例外。

Eureka的高可用实际上就是将自己作为服务向其他服务注册中心注册自己,这样就可以形成一组互相注册的服务注册中心,以实现服务清单的互相同步,达到高可用的效果。

看到这里,我们知道了服务注册中心是可以共享资源的。但是我们不信,正所谓纸上得来终觉浅,我们要自己尝试。

首先,用到上次做初始Eureka的Server端和Client端(如果删掉了出门左转start.spring.io)

我们copy出两个差不多的properties文件。

分别命名为application-peer1.properties

代码语言:javascript
复制
server.port=1111
spring.application.name=eureka-server
eureka.instance.hostname=peer1
eureka.client.serviceUrl.defaultZone=http://peer2:1112/eureka/
eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true

application-peer2.properties

代码语言:javascript
复制
server.port=1112
spring.application.name=eureka-server
eureka.instance.hostname=peer2
eureka.client.serviceUrl.defaultZone=http://peer1:1111/eureka/
eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true

两边的spring.application.name必须保持一致,否则也不能互相注册。

看起来很简单,我们就测试高可用这一个功能,不需要太多花里胡哨的代码。

进入C:\Windows\System32\drivers\etc,用管理员身份打开hosts,增加如下:(不加直接用localhost的话,会导致两边都无法互相注册,这个问题的原因就留给以后看源码的我)

代码语言:javascript
复制
127.0.0.1 peer1
127.0.0.1 peer2

然后用maven install 打包,找到包所在路径。

在地址栏打开cmd(两次)

以下两行指令分别在不同的cmd输入。

代码语言:javascript
复制
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

启动的两个Erueka服务浏览地址分别是:

代码语言:javascript
复制
http://peer1:1111/
http://peer2:1112/

这里启动之前的客户端,客户端只放properties文件:

代码语言:javascript
复制
server.port=8080
spring.application.name = eureka-client
eureka.instance.hostname=eureka-client
spring.application.name=eureka-client
#下面是之前注册的Eureka服务端地址
eureka.client.serviceUrl.defaultZone=http://peer1:1111/eureka/
#,http://peer2:1112/eureka/

我们做个测试,将客户端注册到peer1服务器,然后启动服务端peer2和客户端,查看服务端2结果如下

可以明显看到既没有peer1,也没有客户端的注册信息。

这个时候我们启动服务端peer1和peer2,关闭客户端。

可以看到只能观察出互相注册的信息。与上图不同的是peer从unavailable-replicas到了available-replicas。

接下来我们启动客户端,刷新peer2页面

可以看到我们的HelloController所在的服务器Eureka-Client已经跃然于名单。

总结,Eureka可以通过互相注册的方式,共享彼此的服务。

在搭建过程中,因为书上用的是比较老的版本,而我在spring官网生成的springboot比较新,所以就用了maven仓库里最新的erueka版本:

https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-eureka-client/2.2.2.RELEASE

过程中遇到一些坑,是新版和老版的差异或者书上没有道尽的东西,其中一个问题参考了下面这个链接:

https://www.jianshu.com/p/59c54ccc6ba6

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-04-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JathonKatu 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
微服务引擎 TSE
微服务引擎(Tencent Cloud Service Engine)提供开箱即用的云上全场景微服务解决方案。支持开源增强的云原生注册配置中心(Zookeeper、Nacos 和 Apollo),北极星网格(腾讯自研并开源的 PolarisMesh)、云原生 API 网关(Kong)以及微服务应用托管的弹性微服务平台。微服务引擎完全兼容开源版本的使用方式,在功能、可用性和可运维性等多个方面进行增强。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档