eureka.instance.hostname=peer2
eureka.client.serviceUrl.defaultZone=http://peer1:1111/eureka/
- 在
/etc/hosts
文件中添加对peer1和peer2的转换
127.0.0.1 peer1
127.0.0.1 peer2
- 通过
spring.profiles.active
属性来分别启动peer1和peer2
java -jar eureka-server-1.0.0.jar --spring.profiles.active=peer1
java -jar eureka-server-1.0.0.jar --spring.profiles.active=peer2
- 此时访问peer1的注册中心:
http://localhost:1111/
,如下图所示,我们可以看到registered-replicas
中已经有peer2节点的eureka-server了。同样地,访问peer2的注册中心:http://localhost:1112/
,能看到registered-replicas
中已经有peer1节点,并且这些节点在可用分片(available-replicase)之中。我们也可以尝试关闭peer1,刷新http://localhost:1112/
,可以看到peer1的节点变为了不可用分片(unavailable-replicas)。
服务注册与发现
在设置了多节点的服务注册中心之后,我们主需要简单需求服务配置,就能将服务注册到Eureka Server集群中。我们以Chapter1-1-1中的compute-service为基础,修改application.properties
配置文件:
spring.application.name=compute-service
server.port=2222
eureka.client.serviceUrl.defaultZone=http://peer1:1111/eureka/,http://peer2:1112/eureka/
上面的配置主要对eureka.client.serviceUrl.defaultZone
属性做了改动,将注册中心指向了之前我们搭建的peer1与peer2。
下面,我们启动该服务,通过访问http://localhost:1111/
和http://localhost:1112/
,可以观察到compute-service同时被注册到了peer1和peer2上。若此时断开peer1,由于compute-service同时也向peer2注册,因此在peer2上其他服务依然能访问到compute-service,从而实现了高可用的服务注册中心。
深入理解
虽然上面我们以双节点作为例子,但是实际上因负载等原因,我们往往可能需要在生产环境构建多于两个的Eureka Server节点。那么对于如何配置serviceUrl来让集群中的服务进行同步,需要我们更深入的理解节点间的同步机制来做出决策。
Eureka Server的同步遵循着一个非常简单的原则:只要有一条边将节点连接,就可以进行信息传播与同步。什么意思呢?不妨我们通过下面的实验来看看会发生什么。
- 场景一:假设我们有3个注册中心,我们将peer1、peer2、peer3各自都将serviceUrl指向另外两个节点。换言之,peer1、peer2、peer3是两两互相注册的。启动三个服务注册中心,并将compute-service的serviceUrl指向peer1并启动,可以获得如下图所示的集群效果。
访问http://localhost:1112/
,可以看到3个注册中心组成了集群,compute-service服务通过peer1同步给了与之互相注册的peer2和peer3。
- 场景二:依然假设我们有3个注册中心,我们将peer1的serviceUrl指向peer2,peer2的指向peer3,peer3的指向peer1,此时peer1、peer2、peer3通过单向边形成环。分别启动peer1、peer2、peer3,并访问信息页面,我们可以找到下面的规律,peer1成为了peer2的分片节点,peer2成为了peer3的分片节点,peer3则成为了peer1的分片节点,再将compute-service的serviceUrl指向peer1并启动。放别访问peer1、peer2、peer3的信息页面,可以发现compute-service均被peer2和peer3同步过去了,所以单向边也能进行服务的传播与同步。此时,我们断开peer2,可以看到peer3中的compute-service消失了。重新开启peer2并断开peer3,可以看到peer2依然能同步到compute-service。所以我们可以得出结论,Eureka Server的传播与同步是具备方向性的。
通过上面的实验,我们可以得出下面的两点结论来指导我们搭建服务注册中心的高可用集群:
- 两两注册的方式可以实现集群中节点完全对等的效果,实现最高可用性集群,任何一台注册中心故障都不会影响服务的注册与发现
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
1200页Java架构面试专题及答案
小编整理不易,对这份1200页Java架构面试专题及答案感兴趣劳烦帮忙转发/点赞
百度、字节、美团等大厂常见面试题
[外链图片转存中…(img-bZluOVTF-1711957165764)]
[外链图片转存中…(img-N3BNemxc-1711957165764)]
百度、字节、美团等大厂常见面试题
[外链图片转存中…(img-HBmnWQ1c-1711957165765)]