[菜鸟SpringCloud入门]第三章:将Eureka改造为高可用集群

[菜鸟SpringCloud入门]第三章:将Eureka改造为高可用集群
题图html

前言

欢迎来到菜鸟SpringCloud入门实战系列(SpringCloudForNoob),该系列经过层层递进的实战视角,来一步步学习和理解SpringCloud。git

本系列适合有必定Java以及SpringBoot基础的同窗阅读。程序员

每篇文章末尾都附有本文对应的Github源代码,方便同窗调试。github

Github仓库地址:面试

https://github.com/qqxx6661/springcloud_for_noob算法

菜鸟SpringCloud入门实战系列

你还能够经过如下两种途径查看菜鸟SpringCloud入门实战系列:spring

  • 关注个人公众号:Rude3Knife 点击公众号下方:技术推文——SpringCloud
  • 菜鸟SpringCloud实战专栏导航页(CSDN)

前文回顾:后端

  • [菜鸟SpringCloud入门]第一章:构建多模块的Maven项目+建立注册中心Eureka子模块
  • [菜鸟SpringCloud入门]第二章:建立服务提供者并在Eureka进行注册

实战版本

  • SpringBoot:2.0.3.RELEASE
  • SpringCloud:Finchley.RELEASE

-----正文开始-----

将Eureka改造为高可用集群安全

单机Eureka Server的致命缺陷微信

简单的服务注册中心Eureka Server与服务提供者Eureka Client的网络拓扑图
[菜鸟SpringCloud入门]第三章:将Eureka改造为高可用集群
在这里插入图片描述

这种配置方式有如下致命缺陷:

  • 当成千上万的服务提供者都向它单节点的服务注册中心进行注册时,它的负载是很是高的。
  • 一旦这个单节点的服务注册中心挂掉,则全部服务提供者的注册信息都将变得不可用。

建立eureka-ha子模块(high available的缩写)

为了方便学习集群eureka,咱们建立单独的子模块eureka-ha

修改其application.yml

---
# 高可用节点1的配置
server:
  port: 8771
spring:
  # 节点1的标签
  profiles: peer1
  # 服务名保持一致
  application:
    name: eureka-ha
eureka:
  instance:
    hostname: peer1
  client:
    # 进行注册(高可用配置、默认配置)
    # registerWithEureka: true
    # 获取注册信息(高可用配置、默认配置)
    # fetchRegistry: true
    serviceUrl:
      # 节点1向节点2/3进行服务注册
      defaultZone: http://localhost:8772/eureka/,http://localhost:8773/eureka/

---
# 高可用节点2的配置
server:
  port: 8772
spring:
  # 节点2的标签
  profiles: peer2
  # 服务名保持一致
  application:
    name: eureka-ha
eureka:
  instance:
    hostname: peer2
  client:
    # 进行注册(高可用配置、默认配置)
    # registerWithEureka: true
    # 获取注册信息(高可用配置、默认配置)
    # fetchRegistry: true
    serviceUrl:
      # 节点2向节点1/3进行服务注册
      defaultZone: http://localhost:8771/eureka/,http://localhost:8773/eureka/

---
# 高可用节点3的配置
server:
  port: 8773
spring:
  # 节点3的标签
  profiles: peer3
  # 服务名保持一致
  application:
    name: eureka-ha
eureka:
  instance:
    hostname: peer3
  client:
    # 进行注册(高可用配置、默认配置)
    # registerWithEureka: true
    # 获取注册信息(高可用配置、默认配置)
    # fetchRegistry: true
    serviceUrl:
      # 节点3向节点1/2进行服务注册
      defaultZone: http://localhost:8771/eureka/,http://localhost:8772/eureka/

代码重点:

  • 在yml文件中,经过---来区分多个文件,减小配置文件个数。
  • 高可用配置中的节点,每一个节点的端口号不一样
  • 高可用配置中的节点,全部节点的服务名相同,即spring.application.name相同
  • 高可用配置中的节点,默认状况下,registerWithEureka: true、fetchRegistry: true
  • 高可用配置中的节点,须要向除本身以外的节点进行服务注册
  • 高可用配置中,设置了每一个节点的标签spring.profiles,经过此标签来区分到底启动哪一个配置页。

修改EurekaHaApplication启动类

和eureka一养,添加@EnableEurekaServer

启动三节点Eureka

由于是集群,因此要启动三个端口不一样的实例,端口已经在yml文件中进行了设置。

在Run configuration里自行设置三个运行配置,分别对应三个配置文件,注意图中箭头的设置。
[菜鸟SpringCloud入门]第三章:将Eureka改造为高可用集群
在这里插入图片描述

你也可使用复制配置按钮:
[菜鸟SpringCloud入门]第三章:将Eureka改造为高可用集群
在这里插入图片描述

若是你发现Run configuration里没有eureka-ha,请手动添加:
[菜鸟SpringCloud入门]第三章:将Eureka改造为高可用集群
在这里插入图片描述

最后,分别运行三个eureka-ha:
[菜鸟SpringCloud入门]第三章:将Eureka改造为高可用集群
在这里插入图片描述

打开网页,输入 http://localhost:8771/http://localhost:8772/http://localhost:8773/

能够看到,Instances里有了三个注册的实例
[菜鸟SpringCloud入门]第三章:将Eureka改造为高可用集群
在这里插入图片描述

你觉得大功告成了,然而,你发现有一个问题,全部的服务显示在了unavailable-replicas之下。

通过搜索,看见了以下解释,

参考:Eureka高可用,节点均出如今unavailable-replicas下:

https://www.jianshu.com/p/59c54ccc6ba6

eureka.client.serviceUrl.defaultZone配置项的地址,不能使用localhost,要使用域名,DNS解析请自行配置。

因为咱们在yml文件里设置了相似defaultZone: http://localhost:8771/eureka/,http://localhost:8772/eureka/, 符合上述问题, 因此这里的注册url不能设置为localhost

看来,仍是须要本身搞定DNS,对应我Windows的环境,也就是要修改host设置。

修改HOST请自行谷歌,在host文件下添加三行:

127.0.0.1    peer1
127.0.0.1    peer2
127.0.0.1    peer3

从新启动三个实例,大功告成:
[菜鸟SpringCloud入门]第三章:将Eureka改造为高可用集群
在这里插入图片描述

高可用服务测试

咱们新建子模块eureka-hi-ha,用来做为高可用集群下的服务提供者

修改application.yml,设置为8783端口

# 服务地址
server:
  port: 8783
# 服务名称
spring:
  application:
    name: service-hi-ha
eureka:
  client:
    serviceUrl:
      # 这里只须要执行其中一个服务注册中心节点便可
      defaultZone: http://peer1:8771/eureka/

这里只须要执行其中一个服务注册中心节点便可,其余两个eureka会自动收到来自peer1的客户端记录信息,进行同步。

启动eureka-hi-ha,同时刚才的三个eureka server 不要关闭
[菜鸟SpringCloud入门]第三章:将Eureka改造为高可用集群
在这里插入图片描述

查看网页: http://localhost:8771/http://localhost:8772/http://localhost:8773/

能够看到,8773也成功显示了服务。
[菜鸟SpringCloud入门]第三章:将Eureka改造为高可用集群
在这里插入图片描述

咱们来实验让一个节点停机,咱们关闭peer1的进程

注意:

  • peer1节点并无当即从服务列表中消失,这是由于服务注册中心经过心跳来检测服务是否存活。
  • 服务宕机以后,服务并不会立刻从服务注册中心注销。
  • 只有当超过规定时间还未检测到服务时,才会注销服务。
  • 虽然peer1节点挂掉了,可是eureka-hi-ha的注册信息在其余注册中心节点仍是存在的。

高可用的服务注册中心Eureka Server与服务提供者Eureka Client的网络拓扑图,能够总结以下:
[菜鸟SpringCloud入门]第三章:将Eureka改造为高可用集群
在这里插入图片描述

当前其中任意节点宕机以后,其余节点上还保存着全部的服务注册信息。

本章代码

https://github.com/qqxx6661/springcloud_for_noob/tree/master/03-eureka-ha-eureka-hi-h

参考

springcloud(二):注册中心Eureka:

http://www.ityouknow.com/springcloud/2017/05/10/springcloud-eureka.html

Spring-Cloud笔记03:服务注册中心Eureka Server的简单配置、访问控制配置以及高可用配置

https://blog.csdn.net/hanchao5272/article/details/80561199

-----正文结束-----

全复习手册文章导航:经过如下两种途径查看

  • 关注个人公众号:Rude3Knife 点击公众号下方:技术推文——SpringCloud
  • 菜鸟SpringCloud实战专栏(CSDN)

关注我

我是蛮三刀把刀,后端开发。

主要关注后端开发,数据安全,爬虫等方向。

来微信和我聊聊:yangzd1102

Github我的主页:

https://github.com/qqxx6661

原创博客主要内容

  • Java知识点复习全手册
  • Leetcode算法题解析
  • 剑指offer算法题解析
  • Python爬虫相关技术实战
  • 后端开发相关技术实战
  • SpringCloud入门实战

同步更新公众号及如下博客

  1. Csdn

http://blog.csdn.net/qqxx6661

拥有专栏:

  • Leetcode题解(Java/Python)
  • Python爬虫实战
  • Java程序员知识点复习手册
  • SpringCloud入门实战
    1. 知乎

https://www.zhihu.com/people/yang-zhen-dong-1/

拥有专栏:

  • Java程序员面试复习手册
  • LeetCode算法题详解与代码实现
  • 后台开发实战
    1. 掘金

https://juejin.im/user/5b48015ce51d45191462ba55

  1. 简书

https://www.jianshu.com/u/b5f225ca2376

我的公众号:Rude3Knife

[菜鸟SpringCloud入门]第三章:将Eureka改造为高可用集群
我的公众号:Rude3Knife

若是文章对你有帮助,不妨收藏起来并转发给您的朋友们~

相关文章
相关标签/搜索