Eureka和Zookeeper对比
Eureka在高可用方面好一点;Zookeeper在一致性上强一点
多用于生产环境,客户端应用关联或配置注册中心服务器集群,避免注册中心单点故障
常见配置手段
如果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
这里我们注意不能勾选单例启动模式
然后启动客户端,我们会发现两个注册中心中只有一有注册信息
当我们关掉9090端口的服务器(有注册信息),过一会后,客户端会注册到9091端口的服务器上,并且该服务器会有注册信息。
高可用注册中心不但需要提供集群环境,解决单点故障的问题。同时,也优雅地处理注册中心之间信息同步的问题。
配置方式:
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
## 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是它们的公共配置信息
## 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
## 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中无值
通过启动参数-spring.profiles.active=peer1
,这样会读取application.properties
和application-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