Eureka 集群搭建与踩坑

刚刚跑起来,趁着热,就写进了博客,记录下再这个过程踩过的坑:

官方的文档指出配置HA关键:


By default every Eureka server is also a Eureka client and requires (at least one) service URL to locate a peer. If you don’t provide it the service will run and work, but it will shower your logs with a lot of noise about not being able to register with the peer.


是时候展现英语功底的时候了(开玩笑的,英语不怎么太好的童鞋,可以粘贴到google翻译),主要意思就是:Eureka Server同时也是Eureka Client,配置对等节点时,只需要像我们注册服务时,配置个serviceUrl指向对等节点地址即可。

下面开始动手,我是在1台机器起了2个实例,我的配置文件:

---
spring:
  application:
    name: discovery
    version: 1.0.0
    env: test

server:
  port: ${PORT:8761}

eureka:
  environment: ${ENV:test}
  datacenter: ${DATACENTER:master}
  instance:
    hostname: 127.0.0.1
    leaseRenewalIntervalInSeconds: ${LEASE-TTL:30}
  client:
    registerWithEureka: true
    fetchRegistry: true
    serviceUrl:
      defaultZone: http://127.0.0.1:8762/eureka/
  server:
    waitTimeInMsWhenSyncEmpty: 0
    enable-self-preservation: false # 关闭安全模式
    eviction-interval-timer-in-ms: 60000 # 清理间隔
    
---
spring:
  application:
    name: discovery
    version: 1.0.0
    env: test

server:
  port: ${PORT:8762}

eureka:
  environment: ${ENV:test}
  datacenter: ${DATACENTER:master}
  instance:
    hostname: 127.0.0.1
    leaseRenewalIntervalInSeconds: ${LEASE-TTL:30}
  client:
    registerWithEureka: true
    fetchRegistry: true
    serviceUrl:
      defaultZone: http://127.0.0.1:8761/eureka/
  server:
    waitTimeInMsWhenSyncEmpty: 0
    enable-self-preservation: false # 关闭安全模式
    eviction-interval-timer-in-ms: 60000 # 清理间隔

成功启动后,只有8762端口上能看到DS Replicas,8761端口没有DS Replicas,我怀疑HA没有搭建成功,果然:

8762上服务正在evict,显然两个实例没有正常通信,两个实例使用的hostname都是127.0.0.1,修改主机名:

127.0.0.1   node1 node2

 重新修改配置:

spring:
  application:
    name: discovery
    version: 1.0.0
    env: test

server:
  port: ${PORT:8761}

eureka:
  environment: ${ENV:test}
  datacenter: ${DATACENTER:master}
  instance:
    hostname: node1
    leaseRenewalIntervalInSeconds: ${LEASE-TTL:30}
  client:
    registerWithEureka: true
    fetchRegistry: true
    serviceUrl:
      defaultZone: http://node2:8762/eureka/
  server:
    waitTimeInMsWhenSyncEmpty: 0
    enable-self-preservation: false # 关闭安全模式
    eviction-interval-timer-in-ms: 60000 # 清理间隔
    
---
spring:
  application:
    name: discovery
    version: 1.0.0
    env: test

server:
  port: ${PORT:8762}

eureka:
  environment: ${ENV:test}
  datacenter: ${DATACENTER:master}
  instance:
    hostname: node2
    leaseRenewalIntervalInSeconds: ${LEASE-TTL:30}
  client:
    registerWithEureka: true
    fetchRegistry: true
    serviceUrl:
      defaultZone: http://node1:8761/eureka/
  server:
    waitTimeInMsWhenSyncEmpty: 0
    enable-self-preservation: false # 关闭安全模式
    eviction-interval-timer-in-ms: 60000 # 清理间隔

重启之后,成功。


如果觉得还不错的话,关注、分享、在看, 原创不易,且看且珍惜~

posted on 2021-12-10 14:13  XuHe1  阅读(77)  评论(0编辑  收藏  举报