集群版Eureka构建—SpringCloud(H版)微服务学习教程(9)

Java技术 潘老师 3年前 (2021-03-23) 1286 ℃ (0) 扫码查看

一、为什么要搭建Eureka集群

如果我们只配置一个Eureka服务端,那么如果这个服务端崩溃,那么所有服务都无法获取,这肯定不是我们不期望的。所以为了保证高可用性,我们需要搭建Eureka集群。

二、Eureka集群实现原理

Eureka Server注册中心集群中每个节点都是平等的,集群中的所有节点同时对外提供服务的发现和注册等功能。同时集群中每个Eureka Server节点又是一个微服务,也就是说,每个节点都可以在集群中的其他节点上注册当前服务。又因为每个节点都是注册中心,所以节点之间又可以相互注册当前节点中已注册的服务,并发现其他节点中已注册的服务。

简单地说就是:每个Eureka Server节点之间相互注册,相互守望

补充:
CAP理论指出,一个分布式系统不可能同时满足C(一致性)、A(可用性)和P(分区容错性)。
由于分布式系统中必须保证分区容错性,因此我们只能在A和C之间进行权衡。
Zookeeper保证的是CP, 而Eureka则是保证AP。

因此,我们搭建Eureka服务注册中心集群,主要是实现负载均衡+故障容错
集群版Eureka构建—SpringCloud(H版)微服务学习教程(9)

三、Eureka集群环境搭建

第1步:设置主机名

由于我们学习都是使用单台电脑开搭建集群的,所以我们需要修改映射配置添加进hosts文件,hosts文件目录为C:\Windows\System32\drivers\etc,新增映射如下(我们这里搭建3个节点的集群):

127.0.0.1 eureka7001.com
127.0.0.1 eureka7002.com
127.0.0.1 eureka7003.com

第2步:创建Module

我们参考cloud-eureka-server7001的创建过程创建cloud-eureka-server7002cloud-eureka-server7003

第3步:修改yml

1)cloud-eureka-server7001的yml:

server:
  port: 7001
eureka:
  instance:
    hostname: eureka7001.com #eureka服务端实例名称
  client:
    #false表示不像注册中心注册自己
    register-with-eureka: false
    #false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
    fetch-registry: false
    service-url:
      #集群版eureka server 相互注册,相互守望 多个用逗号隔开
      defaultZone: http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/

1)cloud-eureka-server7002的yml:

server:
  port: 7002
eureka:
  instance:
    hostname: eureka7002.com #eureka服务端实例名称
  client:
    #false表示不像注册中心注册自己
    register-with-eureka: false
    #false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
    fetch-registry: false
    service-url:
      #集群版eureka server 相互注册,相互守望 多个用逗号隔开
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7003.com:7003/eureka/

3)cloud-eureka-server7003的yml:

server:
  port: 7003
eureka:
  instance:
    hostname: eureka7003.com #eureka服务端实例名称
  client:
    #false表示不像注册中心注册自己
    register-with-eureka: false
    #false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
    fetch-registry: false
    service-url:
      #集群版eureka server 相互注册,相互守望 多个用逗号隔开
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/

第4步:测试

1)启动着3个eureka server ,浏览器分别访问eureka7001.com:7001eureka7002.com:7002eureka7003.com:7003,我们发现他们相互注册了:
集群版Eureka构建—SpringCloud(H版)微服务学习教程(9)

集群版Eureka构建—SpringCloud(H版)微服务学习教程(9)

集群版Eureka构建—SpringCloud(H版)微服务学习教程(9)

四、发布至集群

接下来我们将订单80和支付8001两个模块发布到Eureka集群,我们只需要修改他们的yml配置的defaultZone指向Eureka集群即可,具体如下:
1)cloud-consumer-order80application.yml

server:
  port: 80

spring:
  application:
    name: cloud-order-service

eureka:
  client:
    #表示是否将自己注册进eureka服务中心,默认true
    register-with-eureka: true
    #表示是否从EurekaServer抓取已有注册信息,默认true。单节点无所谓,集群必须设置true才能配合ribbon使用负载均衡
    fetch-registry: true
    service-url:  #指向eureka集群
      defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka,http://eureka7003.com:7003/eureka

2)cloud-provider-payment8001application.yml

server:
  port: 8001

spring:
  application:
    name: cloud-payment-service
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/dbcloud?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=false
    username: root
    password: 123456

mybatis:
  mapperLocations: classpath:mapper/*.xml
  type-aliases-package: com.panziye.springcloud.entities

eureka:
  client:
    #表示是否将自己注册进eureka服务中心,默认true
    register-with-eureka: true
    #表示是否从EurekaServer抓取已有注册信息,默认true。单节点无所谓,集群必须设置true才能配合ribbon使用负载均衡
    fetch-registry: true
    service-url:  #指向eureka集群
      defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka,http://eureka7003.com:7003/eureka

3)测试
我们先启动3个Eureka Server模块,再启动支付8001和订单80两个模块,测试如下:
1)分别访问http://eureka7001.com:7001http://eureka7002.com:7002http://eureka7003.com:7003,如下(发现两个模块在3个注册中心都注册了):
集群版Eureka构建—SpringCloud(H版)微服务学习教程(9)

集群版Eureka构建—SpringCloud(H版)微服务学习教程(9)

集群版Eureka构建—SpringCloud(H版)微服务学习教程(9)
2)测试请求
集群版Eureka构建—SpringCloud(H版)微服务学习教程(9)


版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/java/2664.html
喜欢 (0)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】