高可用原理
eureka.client.register-with-eureka=true(默认为true)
eureka.client.fetch-registry=true(默认为true)
Eureka的高可用,实际上是将自己作为服务向其他服务注册中心注册自己,形成一组相互注册的服务注册中心,同步服务清单。
搭建步骤
- 准备两份application-{profiles}.properties
application-peer1.properties作为peer1服务中心的配置,将serviceUrl指向peer2
application-peer2.properties作为peer2服务中心的配置,将serviceUrl指向peer1
#peer1配置示例
spring.application.name=eureka-server
server.port=1111
eureka.instance.hostname=peer1
eureka.client.serviceUrl.defaultZone=http://peer2:1112/eureka - 修改本地hosts,让host形式配置的servieUrl能在本地正确访问
windows系统路径为C:\Windows\System32\drivers\etc\hosts
127.0.0.1 peer1
123.0.0.1 peer2 - 启动服务注册中心
java -jar xx.jar –spring.profles.active=peerxx
启动peer1,访问localhost:1111可以看到分片信息(此时为不可用)
启动peer2,刷新localhost:1111,可以看到peer2作为服务注册到peer1,且分片可用
其他
多节点集群
原理:peer1向peer2注册,peer2向peer3注册,peer3向peer1注册,形成闭环
1. host文件添加127.0.0.1 peer3
2. peer1配置示例(peer1注册到peer2)
spring.application.name=eureka-server
eureka.instance.hostname=peer1
server.port=1111
eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true
eureka.client.serviceUrl.defaultZone=http://peer2:1112/eureka
eureka.server.enable-self-preservation=false
3. 打成jar(会有一些报错),用java -jar xx.jar –spring.profiles.active=peerxx分别启动三个注册中心
4. 观察
- 访问localhost:1111,发现peer2与peer3是注册在peer1的,而peer1自己则向peer2注册
- 访问localhost:1112,发现peer1与peer3是注册在peer2的,而peer2自己则向peer3注册
- 访问localhost:1113,一定会发现peer1和peer2注册在peer3,peer3又向peer1注册
分片不可用
检查
1. eureka.client.serviceUrl.defaultZone不能使用localhost(可以在host文件配置ip和主机名)
2. 两边的spring.application.name或eureka.instance.appname要一致
3. eureka.client.register-with-eureka和eureka.client.fetch-registry要设置为true(默认true)