Eureka高可用
我们通过前边的工作已经完成了Eureka注册中心的部署以及Eureka服务注册,现在进入下一步重要的步骤——保证服务的高可用性
Eureka官网解释如下:
Eureka can be made even more resilient and available by running multiple instances and asking them to register with each other. In fact, this is the default behaviour, so all you need to do to make it work is add a valid serviceUrl to a peer
翻译为:
通过运行多个实例并要求它们彼此注册,Eureka可以变得更具弹性和可用性。实际上,这是默认行为,因此要使其正常工作,只需向对等方添加有效的serviceUrl
简单点说就是:不要把鸡蛋放在同一个篮子里
我们的服务器、网络在真实环境运行过程中有可能发生各种意外情况(尤其是分布式情况下,将各个节点部署到很多服务器上),由于这些情况导致我们的服务不能正常使用,这对于我们无疑是灾难性的。所以我们需要保证Eureka的高可用性
保证Eureka高可用性,我们第一步从Eureka注册中心开始:
因为在服务治理中心也可能单个节点出现故障,导致服务不可用。假如有两个节点,一个不可用后,另外一个节点依旧可用,这样就能保证服务可以继续正常处理业务,这就体现了高可用的特性。从高并发负载的角度而言,多个节点也有助于服务的负载均衡。
如图所示,原来product和user节点只是注册到server1上边,现在新增也注册到server2上边,这样当我们的server1或2不管哪个发生故障,另外一个依旧在勤劳的工作,不会因为一台服务器的原因导致整个服务奔溃
我们再回顾一下server1的配置代码:
spring:
application:
name: server
server:
port: 8001
eureka:
server:
instance:
hostname: localhost
environment: prod
datacenter: www.bigsoft.com
client:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: http://localhost:8001/eureka/
注意其中这样两句:
这里的含义是:
1:是否注册给服务中心 false
2: 是否检索服务 false
但是我们现在需要两个注册中心互相注册达到我们的高可用,所以要去掉这两句让他们去互相注册,我们修改并简化下server1的代码:
spring:
application:
name: server
server:
port: 8001
eureka:
server:
instance:
hostname: localhost
client:
service-url:
defaultZone: http://localhost:8002/eureka/
特别注意这个位置server-port是8001,代表当前服务从8001端口开始执行,但是defaultZone: http://localhost:8002/eureka/ 这个位置确配置的是localhost:8002,因为server2的端口是8002,也就是说我们当前8001的服务要注册到8002去
然后新建server2,配置文件和server1大体相同,主要注意端口号以及注册地址要指向server1
spring:
application:
name: server
server:
port: 8002
eureka:
server:
instance:
hostname: localhost
client:
service-url:
defaultZone: http://localhost:8001/eureka/
这里端口号为8002,defaultZone:指向的是server1的地址(http://localhost:8001/)
分别启动两个注册中心,并且进入Eureka界面我们可以看到
名字为SERVER(因为我们server1和server2中都配置了application-name:server)
并且会自动变成大写,并且属性spring.application.name保持一致都为server,这样就可以形成两个甚至是多个服务治理中心)