1. High Availability, Zones and Regions 高可用
Eureka服务器没有后端存储,但是注册表中的服务实例都必须发送心跳来保持它们的注册是最新的(因此这可以在内存中完成)。
客户端还有一个Eureka注册的内存缓存(这样他们就不必每次向服务请求时都去注册中心)。
默认情况下,每个Eureka服务器也是一个Eureka客户机,需要(至少一个)服务URL来定位对等点(locate a peer)。如果您不提供它,服务就会运行并正常工作,但是它会给您的日志带来很多关于无法向对等方注册的影响。
有关Zones、Regions的客户端Ribbon支持的详细信息,请参见Ribbon的介绍。
2. Standalone Mode 单机模式
两个缓存(客户机和服务器)和心跳的组合使一个独立的Eureka服务器能够相当灵活地应对失败,只要有某种类型的监视器或弹性运行时(如云计算)保持它的活力。在独立模式下,您可能更喜欢关闭客户端行为,这样它就不会一直尝试,也不会失败。
registerWithEureka: false
fetchRegistry: false
下面的例子展示了如何关闭客户端行为:
application.yml (Standalone Eureka Server).
server:
port: 8761
eureka:
instance:
hostname: localhost
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
3. Peer Awareness 对等意识
通过运行多个实例并要求它们相互注册,Eureka可以变得更加灵活和可用。实际上,这是一种默认行为,所以要使其正常工作,您所需要做的就是向对等服务器添加一个有效的serviceUrl.
而ZooKeeper是通过leader选举实现高可用,其中一个master进程会被选举为leader,其他的master会被指定为standby模式。(具体可参考https://blog.csdn.net/JSON_ZJS/article/details/80686460)
如下面的示例所示:
application.yml (Two Peer Aware Eureka Servers).
---
spring:
profiles: peer1
eureka:
instance:
hostname: peer1
client:
serviceUrl:
defaultZone: http://peer2/eureka/
---
spring:
profiles: peer2
eureka:
instance:
hostname: peer2
client:
serviceUrl:
defaultZone: http://peer1/eureka/
注意:
1.在本地运行时,会报错 Cannot execute request on any known server
解决办法:在本机要在hosts文件 配loclhost peer1 peer2
2.去掉Eureka账号密码
解决办法:注释掉对应依赖即可 如下:
<!-- <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency> -->
---------------------------------------------------------------------------
配置示例:
application.yaml
spring:
application:
name: EUREKA-HA
---
server:
port: 8761
spring:
profiles: peer1
eureka:
instance:
hostname: peer1
client:
serviceUrl:
defaultZone: http://peer2:8762/eureka/,http://peer3:8763/eureka/
---
server:
port: 8762
spring:
profiles: peer2
eureka:
instance:
hostname: peer2
client:
serviceUrl:
defaultZone: http://peer1:8761/eureka/,http://peer3:8763/eureka/
---
server:
port: 8763
spring:
profiles: peer3
eureka:
instance:
hostname: peer3
client:
serviceUrl:
defaultZone: http://peer1:8761/eureka/,http://peer2:8762/eureka/