Spring Cloud学习笔记2 构建高可用的Eureka Server集群

在上一篇博客中我们介绍了搭建Spring Cloud注册与消费模块。但是在实际项目中,可能有较多的微服务实例,如果只搭建单台Eureka Server,这时候Eureka Server 就会承担非常高的负载压力,我们知道微服务实例是通过注册中心来查询其他实例的,所以这个单台的Eureka Server的服务器如果出现意外宕机,那么整个微服务系统将无法正常工作。
这篇博客将介绍用一台电脑模拟搭建Eureka Server集群。
本篇博客的代码在上一篇博客的基础上进行改造,上一篇博客的地址:https://blog.csdn.net/czx2018/article/details/102979527
按照上一篇博客的步骤做好以后,我们会得到这样一个项目层级结构
在这里插入图片描述
首先我们要修改本地的hosts文件,这是为了要在本地搭建Eureka Server集群而做的准备步骤,实际的线上环境并不需要做这一步。Windows系统的电脑的hosts文件在C:/windows/systems/drivers/etc/hosts,Mac系统的hosts文件在/etc/hosts。hosts文件中添加三个域名:peer1、peer2、peer3。修改后的hosts文件如下
在这里插入图片描述
EurekaServer的设计一开始就考虑了高可用问题, 在Eureka的服务注册发现设计中, 所有节点即是服务提供方, 也是服务消费方,服务注册中心也不例外。 在上一篇的单节点的配置中, 我们设置过下面这两个参数, 让服务注册中心不注册自己:

eureka: 
  client: 
    register-with-eureka: false
    fetch-registry: false 

但搭建Eureka Server集群时就需要将上面两条配置去掉。
EurekaServer的高可用实际上就是将自己作为服务向其他服务注册中心注册自己, 这样就可以形成一组互相注册的服务注册中心, 以实现服务清单的互相同步, 达到高可用的效果。 下面我们就来构建一个三节点的服务注册中心集群。

修改eureka-server的配置文件application.yml,修改后具体代码如下。

spring:
  application:
    name: eureka-server
--- #这个横线只能三个,不能多不能少,不然就会报错
spring:
  profiles: peer1
server:
  port: 8761
eureka:
  instance:
    hostname: peer1
  client:
    service-url:
      #把自己注册到另外两个eureka server上去
      default-zone: http://peer2:8762/eureka/,http://peer3:8763/eureka/
---
spring:
  profiles: peer2
server:
  port: 8762
eureka:
  instance:
    hostname: peer2
  client:
    service-url:
      #把自己注册到另外两个eureka server上去
      default-zone: http://peer1:8761/eureka/,http://peer3:8763/eureka/
---
spring:
  profiles: peer3
server:
  port: 8763
eureka:
  instance:
    hostname: peer3
  client:
    service-url:
      #把自己注册到另外两个eureka server上去
      default-zone: http://peer1:8761/eureka/,http://peer2:8762/eureka/

实际的线上环境中,在上述代码中default-zone可能是真实服务器的IP端口。

然后我们来配置idea,以启动多个springboot工程实例:
在这里插入图片描述
点击Edit Configuration。
在这里插入图片描述
1:添加 。2:随便起一个名称,建议和我一样把名称跟服务实例名一致。 3:选择启动类。 4:输入启动参数。然后点ok。
按照相同的步骤配置peer2和peer3。
配置好以后就可以将3个工程实例run起来。
这里有一个小插曲,启动第一个Eureka Server工程实例的时候,控制台会出现无法连接的异常,这是因为它要向另外两个Eureka Server发送注册信息,但是这时候另外两个工程实例还没有启动,所以就报错了。只管把另外两个Eureka Server的工程实例也启动起来就好。
启动完成之后,我们浏览器分别打开http://peer1:8761/,http://peer2:8762/,http://peer3:8763/。在这里插入图片描述
在搭建了多节点的服务注册中心之后, 服务提供方还需要做一些简单的配置才能将服务注册到Eureka Server 集群中。 我 们以eureka-client为例,修改application.yml配置文件, 如下所示:

eureka:
  client:
    service-url:
      default-zone: http://peer1:8761/eureka/,http://peer2:8762/eureka/,http://peer3:8763/eureka/
server:
  port: 8764
spring:
  application:
    name: eureka-client

上面的配置主要对eureka.client.service-url. default-zone属性做了改动,将注册中心指向了之前我们搭建的peer1、peer2与peer3。
然后将eureka-client工程启动起来,再去访问注册中心,就会看到每一个注册中心中都已经把eureka-client注册上去了。
这样一来,集群中任何一个注册中心挂掉了,消费服务仍可以通过其他注册中心节点来同步注册表信息,就实现了Eureka Server的高可用。

PS:上面启动多个工程实例我是用idea来启动的,实际的线上环境我们会将工程打成jar包然后用指令java -jar 包名 --spring.profiles.active={spring.profiles}来启动,等号后面请改为配置文件中的spring.profiles的属性。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值