Spring Cloud系列-微服务篇(四) Eureka高可用集群 (2)
之前我们使用的Eureka是标准模式只有单个节点现在我们使用peer模式构建Eureka集群
更新application 配置
更新第一章我们的Eureka-Server项目 application.properites 为 application.yml (语法更为简洁)
# Portal Info
info:
app:
name: "@project.name@"
description: "@project.description@"
version: "@project.version@"
# Spring Info
spring:
application:
name: "@project.name@"
server:
port: 1000
eureka:
server:
enable-self-preservation: false # 关闭自我保护模式(缺省为打开)
eviction-interval-timer-in-ms: 5000 # 续期时间,即扫描失效服务的间隔时间(缺省为60*1000ms)
client:
fetch-registry: false
register-with-eureka: false
serviceUrl:
defaultZone: http://admin:123123@localhost:1000/eureka/
拷贝application.yml 为3份 分别命名为 application-eureka-server-0.yml, application-eureka-server-1.yml, application-eureka-server-2.yml
注: 我们要构筑3个peer eureka server,所以拷贝3份.
application-eureka-server-0.yml
# Spring Info
server:
port: 1000
eureka:
instance:
hostname: eureka-server-0
server:
enable-self-preservation: false # 关闭自我保护模式(缺省为打开)
eviction-interval-timer-in-ms: 5000 # 续期时间,即扫描失效服务的间隔时间(缺省为60*1000ms)
client:
register-with-eureka: true
fetch-registry: true
serviceUrl:
defaultZone: http://admin:123123@eureka-server-1:1001/eureka/,http://admin:123123@eureka-server-2:1002/eureka/
我们将app info等相同的信息保留在application.yml.
显示开启register-with-eureka: true 和 fetch-registry: true 否则会被application.yml 中信息覆盖.
defaultZone: http://admin:123123@eureka-server-1:1001/eureka/,http://admin:123123@eureka-server-2:1002/eureka/, 在defaultZone 处分别填写集群中除了自己的其他节点.
application-eureka-server-1.yml
# Spring Info
server:
port: 1001
eureka:
instance:
hostname: eureka-server-1
server:
enable-self-preservation: false # 关闭自我保护模式(缺省为打开)
eviction-interval-timer-in-ms: 5000 # 续期时间,即扫描失效服务的间隔时间(缺省为60*1000ms)
client:
register-with-eureka: true
fetch-registry: true
serviceUrl:
defaultZone: http://admin:123123@eureka-server-0:1000/eureka/,http://admin:123123@eureka-server-2:1002/eureka/
application-eureka-server-2.yml
# Spring Info
server:
port: 1002
eureka:
instance:
hostname: eureka-server-2
server:
enable-self-preservation: false # 关闭自我保护模式(缺省为打开)
eviction-interval-timer-in-ms: 5000 # 续期时间,即扫描失效服务的间隔时间(缺省为60*1000ms)
client:
register-with-eureka: true
fetch-registry: true
serviceUrl:
defaultZone: http://admin:123123@eureka-server-0:1000/eureka/,http://admin:123123@eureka-server-1:1001/eureka/
更新DNS (Spring Cloud 本身不认为LocalHost为一个有效域)
Windows 10 Host 文件 :C:\Windows\System32\drivers\etc\hosts
127.0.0.1 eureka-server-0
127.0.0.1 eureka-server-1
127.0.0.1 eureka-server-2
启动
使用maven 中 clean package 命令重新打包.
使用jar启动 添加参数 --spring.profiles.active=XXXX 指定启动使用哪个profile.
开启三个命令行执行下面的一条命令
java -jar wish.eureka.server-0.0.1-SNAPSHOT.jar --spring.profiles.active=eureka-server-0
java -jar wish.eureka.server-0.0.1-SNAPSHOT.jar --spring.profiles.active=eureka-server-1
java -jar wish.eureka.server-0.0.1-SNAPSHOT.jar --spring.profiles.active=eureka-server-2
第一个服务会抛出一些错误,请不用担心那是因为其余服务还没有启动.启动之后就会没有问题了.
二: 服务注册
在设置了多节点的服务注册中心之后,我们需要简单需求服务配置,就能将服务注册到Eureka Server集群中。我们以 Chapter1-3 中的user-service为基础,修改 application.yml 配置文件:
defaultZone: http://admin:123123@eureka-server-0:1000/eureka/,http://admin:123123@eureka-server-2:1002/eureka/,http://admin:123123@eureka-server-1:1001/eureka/
*注:我们也可以不更新, eureka集群自动同步更新注册信息. 但当前指定的eureka server 在集群同步之前down掉,则信息无法更新.
上面的配置主要对 eureka.client.serviceUrl.defaultZone 属性做了改动,eureka-server-1,eureka-server-2,eureka-server-3。
我们启动该服务,我们访问eureka集群各个节点都会发现刚刚注册的服务,如果其中任意一台断开并不影响服务的使用.从而实现了高可用的服务注册中心。
深入理解
Eureka Server的同步遵循着一个非常简单的原则:只要有一条边将节点连接,就可以进行信息传播与同步.
场景一:假设我们有3个注册中心,我们将peer1、peer2、peer3各自都将serviceUrl指向另外两个节点。换言之,peer1、peer2、peer3是两两互相注册的。启动三个服务注册中心,并将compute-service的serviceUrl指向peer1并启动,可以获得如下图所示的集群效果。
访问http://localhost:1000/,可以看到3个注册中心组成了集群,服务通过peer1同步给了与之互相注册的peer2和peer3。
两两注册的方式可以实现集群中节点完全对等的效果,实现最高可用性集群,任何一台注册中心故障都不会影响服务的注册与发现
Eureka Server具备单方面有指向的服务传播与同步机制,在一些对服务发现有限制的情况下,可以利用这样的机制进行服务注册与发现的的单向控制
评论已关闭