美文网首页
使用Spring搭建Eureka两节点集群

使用Spring搭建Eureka两节点集群

作者: nzdxwl | 来源:发表于2019-12-05 01:19 被阅读0次

Eureka2的开源开发已经终止了,但现有版本还是能正常使用。由于是基础设施,搭建后如果没有问题就不怎么理会,加上开源终止导致没再怎么看,结果前些天面试问到集群,发现都忘得差不多了。这里再搭一下做些记录。

框架生成

这里我们依然使用Spring Initializer来创建项目,使用最新的Spring Boot版本和Jdk1.8,依赖项查找Eureka Server,添加它即可。
生成后导入IDE方便编辑。

相关配置

首先启动类添加@EnableEurekaServer注解,然后在src\main\resource目录下面添加application.yaml文件,具体配置信息如下:

eureka: 
  client: 
    serviceUrl:
      defaultZone: http://192.168.43.80:8762/eureka/,http://192.168.43.104:8762/eureka/

---
spring: 
  application:
    name: eurekaserver
  profiles: p104

server:
  port: 8762
  
eureka: 
  datacenter: dc1
  
  instance: 
    hostname: 192.168.43.104
    preferIpAddress: true
    
  server:
    peer-node-read-timeout-ms: 500
    waitTimeInMsWhenSyncEmpty: 1
    enableSelfPreservation: true    
  client: 
    registerWithEureka: true
    fetchRegistry: true
    
---
spring:
  application:
    name: eurekaserver
  profiles: p80

server:
  port: 8762
  
eureka: 
  datacenter: dc1
  
  instance: 
    hostname: 192.168.43.80
    preferIpAddress: true
  server:
    peer-node-read-timeout-ms: 500
    waitTimeInMsWhenSyncEmpty: 1
    enableSelfPreservation: true    
  client: 
    registerWithEureka: true
    fetchRegistry: true

配置说明:

  • 由于要以集群方式来运行EurekaServer,这里使用两个节点,上面创建了两个profile,分别是p80和p104,对应在两部主机上面的部署。
  • 两部主机分别是192.168.43.80和192.168.43.104,由于使用主机名称时,有部主机部署时提示检测不到主机名称,就改成了IP,正常在serviceUrl这部分还是应该使用域名的,这样就不会依赖于固定的IP。
  • peer-node-read-timeout-ms这个默认是200,视具体环境配置,这里改为500毫秒。

检测不到主机提示的错误是:Temporary failure in name resolution,该机器是ubuntu机器,后来发现在host里面添加对应主机信息可解决问题,例如: 192.68.43.104 主机名称,这样上面配置的ip就可以使用主机名称代替了。

打包和部署

执行mvn clean compile package进行打包,打完后可以进行测试了。
将打好的jar包复制到80和104主机上面(假设打的jar包名称为eurekaserver-1.0.jar)然后分别执行:
java -jar eurekaserver-1.0.jar --spring.profiles.active=p80
java -jar eurekaserver-1.0.jar --spring.profiles.active=p104

由于两个节点不是同时启动,在启动过程中可能会抛出异常,可以不用理会,等两个节点都完成启动后,
应该会有类似这样的提示,并且两边都不再出现异常。

Registered instance EUREKASERVER/localhost:eurekaserver:8762 with status UP (replication=true)
...
Running the evict task with compensationTime 0ms

**在浏览器打开网址(本机地址+端口),上面自定义使用8762端口而不是默认的8761端口:http://192.168.43.104:8762/,正常会进入Eureka的界面,如果正常会有下方图片中指示位置的相关信息,例如

一些知识点:

  • 当你将Eureka客户端分别部署在不同的区间(zone)时,你可能会希望这些客户端优先调用注册在所在区间的服务用例,那么你可以为服务添加以下配置:
eureka.client.preferSameZoneEureka = true
eureka.instance.metadataMap.zone = zone1

第一个参数设置同区优先调用
第二个参数设置服务实例所在区(即服务部署在哪个zone)

如果你将服务的另外个实例部署到其他主机,同时也希望其他主机上面的客户端优先调用那个实例,那么那个实例也需要做上面的配置,将zone1换成对应的zone即可。

  • 每个EurekaServer端即是服务器端又是客户端,并且需要至少一个serviceUrl配置来定位端点。单机版时配置自身,双节的时互相注册,多节点时可以将这部分单独出来作为通用部分,此次双节点就是单独将这部分拿出来,换成互相注册也是可以的。

...

官方文档

Eureka at a glance
Self Preservation Mode
Eureka REST operations
FAQ
Spring Cloud Netflix

相关文章

网友评论

      本文标题:使用Spring搭建Eureka两节点集群

      本文链接:https://www.haomeiwen.com/subject/ccprgctx.html