eureka---各个server的地址配置不全导致服务找不到

1、eureka集群理论:

搭建eureka集群这个都会(网上一堆demo) ,比如有3台server,分别为server1、server2、server3;

理论上server1需要配置 server2、server3的地址;

server2需要配置 server1、server3的地址;

server3需要配置 server1、server2的地址;

eureka集群高可用的原理是各个server互相通信,向其他server发送本server收到的客户端的心跳,每个server端都保存全部的client信息,即所谓的peer to peer。这样不论client不论向那台server请求都能找到对应的服务,即使一台server挂了也没关系。从而保存eureka集群的高可用,

2、下面假设一种场景:

server1需要配置 server2地址;

server2需要配置 server1的地址;

server3需要配置 server1、server2的地址;

会出现什么情况呢?

答案:server1和server2上客户端信息都是全量的;server3上客户端信息不停地在变化;

server3上客户端信息不停地在变化:

原因是server3收到客户端的注册信息后,30s(eureka默认值,可修改)内若客户端是向server1或server2发送心跳,没有向server3发送心跳,server1和server2也没有配置server3的地址肯定也不会同步收到的心跳信息给server3,那么这时候server3会认为服务下线了,即把客户端从注册中心给移除掉。

server1和server2上客户端信息都是全量的:

因为server3配置了server1和server2的地址,它收到客户端的注册或心跳信息,都会同步给server1和server2的,所以server1和server2上客户端信息都是全量的。

2.1 问题:一旦按上面配置,会出现什么问题呢?

a客户端通过"服务名"去eureka注册中心找服务,请求打到server1或server2肯定能找到对应的服务地址信息,但是请求打到server3,则找不到地址信息直接报错,这时候ribbon不会去其他eureka服务重新找(ribbon找到多个地址信息后才会有负载策略)。

现象:a客户端有时候能寻址成功(2/3的概率),有时候寻址失败(1/3的概率)。

2.2 解决办法

2.2.1 eureka服务端地址配置全量的地址信息

如上:server1上配置server2、server3的地址;

server2上配置server1、server3的地址;

server3上配置server1、server2的地址;

2.2.2 ribbon源码修改,

增加一层负载均衡策略,当一台eureka服务端不可用或找不到服务的时候,可以自动去其他eureka服务端寻址。这样只要有一台eureka服务端上有全量的注册信息,也能被寻到地址信息。

相关推荐
tangdou36909865511 小时前
1分钟搞懂K8S中的NodeSelector
云原生·容器·kubernetes
Lansonli12 小时前
云原生(四十一) | 阿里云ECS服务器介绍
服务器·阿里云·云原生
Dylanioucn13 小时前
【分布式微服务云原生】掌握分布式缓存:Redis与Memcached的深入解析与实战指南
分布式·缓存·云原生
later_rql14 小时前
k8s-集群部署1
云原生·容器·kubernetes
大G哥19 小时前
记一次K8S 环境应用nginx stable-alpine 解析内部域名失败排查思路
运维·nginx·云原生·容器·kubernetes
feng_xiaoshi19 小时前
【云原生】云原生架构的反模式
云原生·架构
程序那点事儿21 小时前
k8s 之动态创建pv失败(踩坑)
云原生·容器·kubernetes
叶北辰CHINA1 天前
nginx反向代理,负载均衡,HTTP配置简述(说人话)
linux·运维·nginx·http·云原生·https·负载均衡
Lansonli1 天前
云原生(四十八) | Nginx软件安装部署
nginx·云原生·ecs服务器
唐大爹1 天前
项目实战:k8s部署考试系统
云原生·容器·kubernetes