SpringCloud Eureka 高可用

版权声明:欢迎转载,转载请指明出处 https://blog.csdn.net/yjw123456/article/details/83066363

Spring Cloud Eureka 高可用

Eureka和Zookeeper对比
Eureka在高可用方面好一点;Zookeeper在一致性上强一点

高可用客户端(HA Client)

多用于生产环境,客户端应用关联或配置注册中心服务器集群,避免注册中心单点故障

常见配置手段

  • 多注册中心主机
  • 注册中心DNS
  • 广播(Dubbo)

Spring Cloud Eureka Client

如果Eureka客户端应用配置多个Eureka注册服务器,那么默认情况只有第一台可用的服务器存在注册信息。如果第一台可用的Eureka服务器Down掉了,那么Eureka客户端应用将会选择下一台可用的Eureka服务器。

配置方式:

eureka.client.serviceUrl.defaultZone=http://${eureka.server1.host}:${eureka.server1.port}/
eureka,${eureka.server2.host}:${eureka.server2.port}/eureka

应用元信息

# 调整获取所有应用元信息间隔时间
eureka.client.registryFetchIntervalSeconds = 5

# 调整应用元信息间隔时间
eureka.client.instanceInfoReplicationIntervalSeconds = 5

这个时间调的越小的话,信息一致性越强,CPU消耗也越高

实例

客户端配置

# 客户端应用名称
spring.application.name=spring-cloud-eureka-client

# 客户端服务端口,随机可用
server.port=0

# 管理端口安全关闭
management.security.enabled=false

# 客户端注册到Eureka服务器,配置多个注册中心,以","分隔
eureka.client.serviceUrl.defaultZone = http://localhost:9090/eureka,http://localhost:9091/eureka

服务器配置

# 服务器应用名称
spring.application.name=spring-cloud-eureka-server

# 服务器服务端口
server.port=9090

# 管理端口安全关闭
management.security.enabled=false

## Eureka 服务器作为注册中心,不需要再注册到其中注册中心去
## 同时也不需要获取客户端信息

##  取消向注册中心注册
eureka.client.register-with-eureka=false

## 取消向注册中心获取注册信息(服务、实例信息)
eureka.client.fetch-registry=false

为了启动多个注册中心,我们可以通过启动参数指定不同的端口,这里我们多指定一个9091

在这里插入图片描述

这里我们注意不能勾选单例启动模式

扫描二维码关注公众号,回复: 4425062 查看本文章

然后启动客户端,我们会发现两个注册中心中只有一有注册信息

当我们关掉9090端口的服务器(有注册信息),过一会后,客户端会注册到9091端口的服务器上,并且该服务器会有注册信息。

高可用注册中心(HA Registry Center)

高可用注册中心不但需要提供集群环境,解决单点故障的问题。同时,也优雅地处理注册中心之间信息同步的问题。

配置方式:

eureka.server.host1 : eureka.client.serviceUrl.defaultZone=http://${eureka.server2.host}:${eureka.server2.port}/eureka

eureka.server.host2 : eureka.client.serviceUrl.defaultZone=http://${eureka.server1.host}:${eureka.server1.port}/eureka

实例

在这里插入图片描述

由客户端高可用转变为 服务器高可用

服务器配置

在server工程中修改application.properties,并添加application-peer1.properties和application-peer2.properties

  • application.properties:
## peer1和peer2公用配置

## 定义 应用名称
spring.applicaiton.name = spring-cloud-eureka-server

## 管理端安全失效
management.security.enabled = false

## 公用 Eureka 配置
### 向注册中心注册
eureka.client.register-with-eureka = true
### 向获取注册信息(服务、实例信息)
eureka.client.fetch-registry = true

application.properties是它们的公共配置信息

  • application-peer1.properties
## peer1配置

## peer1 端口 9091
## peer2 端口 9092
## 服务器服务端口
server.port=9091

eureka.instance.hostname=peer1

## peer2主机: peer2,端口: 9092
peer2.server.host = peer2
peer2.server.port = 9092

## 向 peer2 注册中心注册
eureka.client.serviceUrl.defaultZone = http://${peer2.server.host}:${peer2.server.port}/eureka
  • application-peer2.properties
## peer2配置

## peer1 端口 9091
## peer2 端口 9092
## 服务器服务端口
server.port=9092

eureka.instance.hostname=peer2

## peer1主机: peer1,端口: 9091
peer1.server.host = peer1
peer1.server.port = 9091

## 向 peer1 注册中心注册
eureka.client.serviceUrl.defaultZone = http://${peer1.server.host}:${peer1.server.port}/eureka

这里面的peer1和peer2指的是高可用系统中的两台主机,它们之间可以同步信息。
同时需要修改hosts文件 添加 127.0.0.1 peer1 127.0.0.2 peer2
这里向注册中心注册的地址不能是localhost,不然available-replicas中无值

  • 启动peer1 Eureka服务器

通过启动参数-spring.profiles.active=peer1,这样会读取application.propertiesapplication-peer1.properties

在这里插入图片描述

同理,启动peer2

peer1看到的页面:

在这里插入图片描述

peer2看到的页面:

在这里插入图片描述

客户端配置

# 客户端应用名称
spring.application.name=spring-cloud-eureka-client

# 客户端服务端口,随机可用
server.port=0

# 管理端口安全关闭
management.security.enabled=false

# 客户端注册到Eureka服务器,配置多个注册中心,以","分隔
eureka.client.serviceUrl.defaultZone = http://localhost:9091/eureka,http://localhost:9092/eureka

客户端主要改下注册中心地址就好了

项目地址

https://gitee.com/safika/springcloud-learn

猜你喜欢

转载自blog.csdn.net/yjw123456/article/details/83066363