Eureka集群配置
如果注册中心是单点的话,遇到故障就是毁灭性的。在一个分布式系统中,服务注册中心是最重要的基础部分,理应随时处于可以提供服务的状态。为了维持其可用性,使用集群是很好的解决方案。Eureka 通过互相注册的方式来实现高可用的部署,所以我们只需要将 Eureke Server 配置其他可用的 service-url 就能实现高可用部署。
目录
- 双节点注册中心
- 集群
双节点注册中心
首先我们尝试一下双节点的注册中心的搭建。
1、我们将之前的 application.yml 复制一份并命名为 application-peer1.yml,作为 peer1 服务中心的配置,并将 service-url 指向 peer2
spring:
application:
name: eureka-server
server:
port: 7001
eureka:
instance:
hostname: peer1
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://peer2:7002/eureka/
2、将之前的 application-peer1.yml 复制一份并命名为 application-peer2.yml,作为 peer2 服务中心的配置,并将 service-url 指向 peer1
spring:
application:
name: eureka-server
server:
port: 7002
eureka:
instance:
hostname: peer2
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://peer1:7001/eureka/
3、配本地 host:
在 hosts 文件中加入如下配置
127.0.0.1 peer1 peer2
4、打包启动
依次执行下面命令
#打包
mvn clean package -Dmaven.test.skip=true
#分别以 peer1 和 peer2 配置信息启动 Eureka
java -jar target/eureka-server-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer1
java -jar target/eureka-server-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer2
在刚启动 peer1 的时候,启动完成后会在控制台看到一些异常信息,大致就是拒绝连接、请求超时这一类的,这个不用管,启动 peer2 后就好了。
依次启动完成后,访问 http://localhost:7001/,效果如下
根据图可以看出 peer1 的注册中心 DS Replicas 已经有了 peer2 的相关配置信息,并且出现在 available-replicas 中。我们手动停止 peer2 来观察,发现 peer2 就会移动到 unavailable-replicas 一栏中,表示 peer2 不可用。
到此双节点的配置已经完成。
注意事项
- 在搭建 Eureka Server 双节点或集群的时候 ,要把
eureka.client.register-with-eureka
和eureka.client.fetch-registry
均改为true
(默认)。否则会出现实例列表为空,且 peer2 不在available-replicas 而在 unavailable-replicas的情况(这时其实只是启动了两个单点实例)。如果是像我这样图省事把之前的单节点配置和双节点的配置放在一个工程里,双节点的配置里要显示设置以上两个参数,直接删除是用不了默认配置的 ——Spring profile 会继承未在子配置里设置的父配置(application.yml)中的配置。 - 在注册的时候,配置文件中的 spring.application.name 必须一致,否则情况会是这样的
Eureka 集群使用
在生产中我们可能需要三台或者大于三台的注册中心来保证服务的稳定性,配置的原理其实都一样,将注册中心分别指向其它的注册中心。这里只介绍三台集群的配置情况,其实和双节点的注册中心类似,每台注册中心分别又指向其它两个节点即可。
application-peer1.yml
spring:
application:
name: eureka-server
server:
port: 7001
eureka:
instance:
hostname: peer1
client:
service-url:
defaultZone: http://peer2:7002/eureka/,http://peer3:7003/eureka/
application-peer2.yml
spring:
application:
name: eureka-server
server:
port: 7002
eureka:
instance:
hostname: peer2
client:
service-url:
defaultZone: http://peer1:7001/eureka/,http://peer3:7003/eureka/
application-peer3.yml
spring:
application:
name: eureka-server
server:
port: 7003
eureka:
instance:
hostname: peer3
client:
service-url:
defaultZone: http://peer1:7001/eureka/,http://peer2:7002/eureka/
修改 hosts 文件中的配置,添加 peer3
127.0.0.1 peer1 peer2 peer3
分别以 peer1、peer2、peer3 的配置参数启动 Eureka 注册中心
java -jar target/eureka-server-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer1
java -jar target/eureka-server-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer2
java -jar target/eureka-server-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer3
依次启动完成后,访问 http://localhost:7001/,效果如下
可以在 peer1 中看到了 peer2、peer3 的相关信息,至此 Eureka 集群也已经完成了。
还没有评论,来说两句吧...