美文网首页
使用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