(三)springcloud从入门到放弃-Eureka的高可用与实战

Eureka的高可用与实战

Eureka高可用原理

由于Eureka是基于部署在Amazon的背景下设计的,因此其原生支持了Amazon的Region和AvailabilityZone

  • Region

默认情况下资源在Region之间是不会复制的,不过Eureka Client提供了 fetch-remote-regions-registry配置,
这个配置在dataCenterInfo是Amazon时生效
作用是拉取远程的Region的注册信息到本地

  • AvailabilityZone

默认Eureka Client的eureka.client.prefer-same-zone-eureka配置为true
表示在拉取serviceUrl的时候,优先选取与实例处于同一Zone的Eureka Server列表

eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
    region: region-east
    service-url:
      zone1: http://localhost:10086/eureka/
      zone2: http://localhost:10010/eureka/
    availability-zones:
      region-east: zone1,zone2
  instance:
    metadataMap.Zone: zone1

比如以上配置中,client端配置了一个region,该region下面有两个zone,而该应用实例中的metadataMap信息中zone为zone1,即该应用实例会选取service-url.zone这个server列表来进行注册及查询等操作,如果eureka.client.prefer-same-zone-eureka配置为false,则默认返回的ZoneOffset为0,即取availZones的第一个

client端的高可用
  • 在client启动之前,如果没有EurekaServer,则可以通过配置eureka.client.backup-registry-impl从备份registry读取关键服务的信息
  • 在client端启动之后,若运行时出现Eureka Server全部挂掉的情况,本地内存有localRegion之前获取的数据,在EurekaServer都不可用的情况下,从Server端定时拉取注册信息的操作会失败,本地的localRegion信息不回被更新
  • client启动之后,出现Eureka Server部分挂掉,可以通过配置文件剔除挂掉的Eureka Server地址,但是一般不这么做
Server端的高可用

由于Eureka Server采用的peer to peer架构模式,所以也就没什么server端的高可用了,主要的高可用都在client端处理
不过Server端也支持了跨region基本的高可用,通过配置remoteRegionUrlsWithNames来支持拉取远程region的实例信息,如果档期region要访问的实例都挂了,那么server端就会fallback到远程的region的该服务实例
另外就是 Server的自我保护模式,前面已经说过

Eureka故障
Eureka Server全部不可用
  • 应用服务启动前不可用

    如果Eureka Server在服务启动前挂掉或者没有启动,可以启动,但是会报错,ClientHandlerException,
    由于连不上Eureka Server,自然访问不了注册信息,不能和其他服务交互,这时候就用上了前面提到的eureka.client.backup-registry-impl,在EurekaServer访问不到的时候,从这个back registry读取服务注册信息

简单实例

在原有的eureka注册中心我们新建两个配置文件分别是application-peer1.yml和application-peer2.yml,内容如下
在这里插入图片描述
在这里插入图片描述
关于这两个配置文件

第一个配置,应用的名称,既然是简单的高可用注册中心对外肯定保持一致
然后把两个注册中心相互注册

  • 打包项目
    • 进入项目根目录,运行mvn clean compile
      在这里插入图片描述
    • 完成之后,在运行mvn clean package
    • 打包完成,生成的jar包
      在这里插入图片描述
    • 接下来,通过命令行分别以两个配置文件启动实例
      在这里插入图片描述
      在这里插入图片描述
    • 然后我们访问localhost:10086和localhost:10010
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

    可以看到双方互相注册了,这里要注意的是需要在本地域名解析的hosts文件中加上

    127.0.0.1 peer1
    127.0.0.1 peer2
    
    • 接下来我们把前面的server1启动,启动前需要修改配置文件在两个Server节点上注册服务
spring:
  application:
    name: service-one
eureka:
  client:
    service-url:
      defaultZone: http://peer1:10086/eureka,http://peer2:10010/eureka

可以看到service-1也注册上来了
在这里插入图片描述
接下来我们模拟故障,停掉其中一个节点
在这里插入图片描述
在这里插入图片描述
可以看到另一节点仍然可用,依然可以进行服务注册与发现,这样就实现了建议的高可用注册中心
如果配置更多节点的Server 集群,只需要在其他的注册中心注册自己,原理是一样的

总结

本章的源码在springcloud源码,点击获取,欢迎讨论
当然演示中的打包可以使用idea工具的打包,更为方便
如果不想使用主机名进行访问注册中心,也可以使用ip 但是需要先添加一条配置,该值默认false
eureka.instance.prefer-ip-address=true
值得注意的是在实际生产中最好是用ip注册,不然会有无法鉴别的问题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值