Docker-compose部署Eureka高可用

在项目中,分布式环境下微服务的治理要充分考虑发生故障的情况,单台Eureka实例是不足以增强系统的可用性的,Eureka是支持高可用集群部署的,Eureka所有的节点即是服务提供方,也是服务消费方,通过如下两个参数配置,默认是true

eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true

Eureka Server的高可用实际上是将自己作为服务向相邻的节点注册自己,形成一组相互注册的服务注册中心,以实现服务清单的相互同步

下面我们用docke-compose搭建eureka集群,这里搭建三个eureka server节点,遵循两两注册原则

application.yml

spring:
  application:
    name: chu-eureka-ha
management:
  security:
    enabled: false
security:
  basic:
    enabled: true
  user:
    password: chu
    name: chu
---
spring:
  profiles: peer1
server:
  port: 8761
eureka:
  server:
    enable-self-preservation: false  # 开发环境关掉保护机制,快速发现已经挂掉的服务,生产环境需要设置为true提升服务稳定性
  instance:
    hostname: peer1
    prefer-ip-address: true
    instance-id: ${spring.application.name}:${spring.cloud.client.ipAddress}:${spring.application.instance_id:${server.port}}
  client:
    serviceUrl:
      defaultZone: http://chu:chu@peer2:8762/eureka/,http://chu:chu@peer3:8763/eureka/
    register-with-eureka: true
---
spring:
  profiles: peer2
server:
  port: 8762
eureka:
  server:
    enable-self-preservation: false  # 开发环境关掉保护机制,快速发现已经挂掉的服务,生产环境需要设置为true提升服务稳定性
  instance:
    hostname: peer2
    prefer-ip-address: true
    instance-id: ${spring.application.name}:${spring.cloud.client.ipAddress}:${spring.application.instance_id:${server.port}}
  client:
    serviceUrl:
      defaultZone: http://chu:chu@peer1:8761/eureka/,http://chu:chu@peer3:8763/eureka/
    register-with-eureka: true
---
spring:
  profiles: peer3
server:
  port: 8763
eureka:
  server:
    enable-self-preservation: false  # 开发环境关掉保护机制,快速发现已经挂掉的服务,生产环境需要设置为true提升服务稳定性
  instance:
    hostname: peer3
    prefer-ip-address: true
    instance-id: ${spring.application.name}:${spring.cloud.client.ipAddress}:${spring.application.instance_id:${server.port}}
  client:
    serviceUrl:
      defaultZone: http://chu:chu@peer1:8761/eureka/,http://chu:chu@peer2:8762/eureka/
    register-with-eureka: true

docker-compose.yml

version: "2"
services:
  peer1:      # 默认情况下,其他服务可以使用服务名称连接到该服务。因此,对于peer2的节点,它需要连接http://peer1:8761/eureka/,因此需要配置该服务的名称是peer1。
    image: chu-eureka-ha:2.0.0-SNAPSHOT
    networks:
      - eureka-net
    ports:
      - "8761:8761"
    environment:
      - spring.profiles.active=peer1
  peer2:
    image: chu-eureka-ha:2.0.0-SNAPSHOT
    hostname: peer2
    networks:
      - eureka-net
    ports:
      - "8762:8762"
    environment:
      - spring.profiles.active=peer2
  peer3:
    image: chu-eureka-ha:2.0.0-SNAPSHOT
    hostname: peer3
    networks:
      - eureka-net
    ports:
      - "8763:8763"
    environment:
      - spring.profiles.active=peer3
networks:
  eureka-net:
    driver: bridge

运行 docker-compose up -d

他们之间相互维护一个心跳,若开启了Eureka Server自我保护机制,Eureka Server会将服务信息保存起来,让这些实例不会过期,尽可能的保护这些注册信息,当客户端向eureka集群注册时,发现有其他节点出现故障,会出现在不可用分片(unavailable-replicas,)但仍会向另一个正常工作的节点注册,等故障的两个节点排查好问题重新上线,正常的eureka会将客户端注册的请求转发给与它相连的其他注册中心,从而实现注册中心之间服务的同步,

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值