注册中心高可用
集群
注册中心这么关键的服务,如果是单点话,遇到故障就是毁灭性的。在一个分布式系统中,服务注册中心是最重要的基础部分,理应随时处于可以提供服务的状态。为了维持其可用性,使用集群是很好的解决方案。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、分别用server1和server2两个配置启动两个server服务。
# 分别以 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
在idea右上角run,选择edit configrations
5、原本应该只有一个启动项,点击+号,给两个启动项都设置一下Program arguments,就是--spring.profiles.active分别设置为server1和server2,代表分别以两个不同的配置来启动项目。把两个启动项都启动起来,分别访问各自的端口
根据图可以看出 peer1 的注册中心 DS Replicas 已经有了 peer2 的相关配置信息,并且出现在 available-replicas 中。我们手动停止 peer2 来观察,发现 peer2 就会移动到 unavailable-replicas 一栏中,表示 peer2 不可用。
注意
eureka.client.register-with-eureka
和eureka.client.fetch-registry
均改为true
(默认)
配置文件中的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 的相关信息。