欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SpringCloud - (八)Eureka高可用服务注册中心

程序员文章站 2022-07-12 23:27:09
...

服务注册中心单实例搭建

SpringCloud - (一)Eureka服务注册与发现

服务注册中心高可用集群搭建

新建一下单个项目:

  • es-eureka-server-master(注册中心)
  • es-eureka-server-node1(注册中心节点一)
  • es-eureka-server-node2(注册中心节点二)

修改hosts文件, 文件路径: C:\Windows\System32\drivers\etc,新增以下配置

127.0.0.1 peer1
127.0.0.1 peer2

es-eureka-server-master配置文件如下:

# 配置服务端口
server.port=10000

spring.application.name=es-eureka-server

eureka.instance.hostname=localhost

// 分别向其他的注册中心注册
eureka.client.service-url.defaultZone=http://peer1:10010/eureka/,http://peer2:10020/eureka/

es-eureka-server-node1配置文件如下:

# 配置服务端口
server.port=10010

spring.application.name=es-eureka-server

eureka.instance.hostname=peer1

// 分别向其他的注册中心注册
eureka.client.service-url.defaultZone=http://localhost:10000/eureka/,http://peer2:10020/eureka/

es-eureka-server-node2配置文件如下:

# 配置服务端口
server.port=10020

spring.application.name=es-eureka-server

eureka.instance.hostname=peer2

// 分别向其他的注册中心注册
eureka.client.service-url.defaultZone=http://localhost:10000/eureka/,http://peer1:10010/eureka/

分别启动三个项目,启动过程中可能有报错,这是由于三个项目互相注册的原因,不用过多关注
以es-eureka-server-master项目为例,访问http://localhost:10000/看到如下:

SpringCloud - (八)Eureka高可用服务注册中心

  • DS Replicas : 分片副本
  • registered-replicas : 注册的分片副本
  • unavailable-replicas : 不可用分片副本
  • available-replicas 可用分片副本

特别注意
配置文件中一定不要添加如下配置:

# 表示是否将自己注册的注册中心, 默认是true
eureka.client.register-with-eureka=false
# 表示是否从注册中心获取注册信息, 默认是true
eureka.client.fetch-registry=false

如果添加了这两个配置,将会导致分片副本不可用, 如下:

修改es-eureka-server-master配置文件如下:

# 配置服务端口
server.port=10000

spring.application.name=es-eureka-server

eureka.instance.hostname=localhost

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

eureka.client.service-url.defaultZone=http://peer1:10010/eureka/,http://peer2:10020/eureka/

访问es-eureka-server-node1,http://localhost:10010/, 如下图:

SpringCloud - (八)Eureka高可用服务注册中心

此时localhost分片不可用

注册服务

此时创建es-keyword-service-master项目, 向注册中心注册, 配置文件如下:

server.port=11000

spring.application.name=es-keyword-service

# 向注册中心注册
eureka.client.service-url.defaultZone=http://localhost:10000/eureka/,http://peer1:10010/eureka/,http://peer2:10020/eureka/

此时三个注册中心项目都能查看到此服务

架构图如下:

SpringCloud - (八)Eureka高可用服务注册中心

两两注册的方式可以实现集群中节点完全对等的效果,实现最高可用性集群,任何一台注册中心故障都不会影响服务的注册与发现

关于注册中心的传播与同步的方向性问题

服务配置信息:

server.port=11000

spring.application.name=es-keyword-service

// 只向注册中心集群中的一个节点注册服务
eureka.client.service-url.defaultZone=http://peer1:10010/eureka/

注册中心配置信息:

# 配置服务端口
server.port=10000

spring.application.name=es-eureka-server

eureka.instance.hostname=localhost

eureka.client.service-url.defaultZone=http://peer2:10020/eureka/
# 配置服务端口
server.port=10010

spring.application.name=es-eureka-server

eureka.instance.hostname=peer1

eureka.client.service-url.defaultZone=http://localhost:10000/eureka/
# 配置服务端口
server.port=10020

spring.application.name=es-eureka-server

eureka.instance.hostname=peer2

eureka.client.service-url.defaultZone=http://peer1:10010/eureka/

SpringCloud - (八)Eureka高可用服务注册中心

  • 此时若每一个注册中心节点都是正常运行的,则所有注册中心都可以同步到服务注册信息
  • 若此时一个节点发生故障, 比如port:10000这个节点发生了故障, 则节点10020这个节点不能同步到服务注册信息
  • Eureka Server具备单方面有指向的服务传播与同步机制,在一些对服务发现有限制的情况下,可以利用这样的机制进行服务注册与发现的的单向控制