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 # 清理间隔
重启之后,成功。
如果觉得还不错的话,关注、分享、在看, 原创不易,且看且珍惜~