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

时间:2022-07-28
本文章向大家介绍自我加戏,在自闭的边缘尝试高可用的Eureka,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

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

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

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

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

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

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

分别命名为application-peer1.properties

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

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:WindowsSystem32driversetc,用管理员身份打开hosts,增加如下:(不加直接用localhost的话,会导致两边都无法互相注册,这个问题的原因就留给以后看源码的我)

127.0.0.1 peer1
127.0.0.1 peer2

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

在地址栏打开cmd(两次)

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

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服务浏览地址分别是:

http://peer1:1111/
http://peer2:1112/

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

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