【spring cloud 第二篇】构建高可用的eureka server集群


前言:
使用的是IDEA开发工具,在 eureka简介及demo的基础之上进行构建

1 直接上步骤

1.1 eureka的高可用架构图

  • 图中有两个角色,即eureka server 和 eureka client 。
  • 而eureka client 又分为application service(服务提供者) 和 application client(服务消费者)。
  • 每个区域有一个eureka集群,并且每个区域至少有一个eureka server可以处理区域故障,以防服务器瘫痪
  • eureka client向eureka server注册,将自己的客户端信息提交给eureka server。然后,eureka client通过向eureka server发送心跳(每30秒一次)来续约服务,如果某个客户端不能持续续约,那么eureka server断定该客户端不可用,该不可用的客户端将在大约90秒后从eureka server服务注册列表中删除。服务注册列表信息和服务续约信息会被复制到起群众的每个eureka server节点。来自任何区域的eureka client 都可以获取整个系统的服务注册列表信息。根据这些注册列表信息,application client 可以远程调用application service来消费服务。
  • 说明
    1、不同节点的Eureka Server通过Replicate(复制)进行数据同步
    2、Application Service为服务提供者
    3、Application Client为服务消费者
    4、Get Registry 获取注册列表
    5、Make Remote Call完成一次服务调用
    在这里插入图片描述

1.2 hosts配置

  • 找到 C:\Windows\System32\drivers\etc\hosts文件,添加如下配置
127.0.0.1 peer1
127.0.0.1 peer2
127.0.0.1 peer3

1.3 eureka-server的application.yml

eureka简介及demo的基础之上,将原来的eureka-server的application.yml配置删除或注释掉,添加 spring.profiles.active = peer1 或 = peer2 或 = peer3
指定运行的配置文件,每次打包注释掉其他两个
在这里插入图片描述

1.3.1 application-peer1.yml

  • 指定端口
  • 指定eureka实例名称
  • 配置Eureka Server交互的地址,查询服务和注册服务都需要依赖这个地址
  • 配置应用名称
server:
  port: 8761

eureka:
  instance:
    hostname: peer1
  client:
    service-url:
      defaultZone: http://peer2:8762/eureka/,http://peer3:8763/eureka/ # Eureka Server交互的地址,查询服务和注册服务都需要依赖这个地址
  server:
    enable-self-preservation: false   # 关闭自我保护机制,正常情况不推荐使用,用于测试查看关闭其他服务时在注册列表中剔除
spring:
  application:
    name: eureka-server

1.3.2 application-peer2.yml

server:
  port: 8762

eureka:
  instance:
    hostname: peer2
  client:
    service-url:
      defaultZone: http://peer1:8761/eureka/,http://peer3:8763/eureka/
  server:
    enable-self-preservation: false   # 关闭自我保护机制,正常情况不推荐使用,用于测试查看关闭其他服务时在注册列表中剔除
spring:
  application:
    name: eureka-server

1.3.3 application-peer3.yml

server:
  port: 8763

eureka:
  instance:
    hostname: peer3
  client:
    service-url:
      defaultZone: http://peer1:8761/eureka/,http://peer2:8762/eureka/
  server:
    enable-self-preservation: false   # 关闭自我保护机制,正常情况不推荐使用,用于测试查看关闭其他服务时在注册列表中剔除

spring:
  application:
    name: eureka-server

1.3.4 打包server以及访问

使用 mvn package进行依次打包,在工程目录下的target文件夹,找到对应的eureka-server-0.0.1-SNAPSHOT.jar文件,新建一个文件夹eureka-test,将jar包拷贝到eureka-test文件夹中,并依次修改jar包为:
eureka-server-0.0.1-SNAPSHOT-1.jar
eureka-server-0.0.1-SNAPSHOT-2.jar
eureka-server-0.0.1-SNAPSHOT-3.jar
双击jar包启动工程或者进入dos,使用java -jar eureka-server-0.0.1-SNAPSHOT-1.jar 来启动工程
在这里插入图片描述

访问 http://peer1:8761/

在这里插入图片描述

访问 http://peer2:8762/

在这里插入图片描述

访问 http://peer3:8763/

在这里插入图片描述
由以上三张图可以正确理解,eureka server进行了相互注册,相互复制

1.4 eureka-client 配置

注意: 客户端只向peer1 server端注册

server:
  port: 8764   #eureka-client的程序端口

eureka:
  client:
    service-url:
      DEFAULT_ZONE: http://peer1:8761/eureka/  # 服务注册地址

spring:
  application:
    name: eureka-client-4   # 程序名称

1.4.1 启动eureka-client 并重新刷新peer1,peer2,peer3

eureka-client 只向peer1 server进行注册,peer2和peer3对peer1的数据进行了同步,可以看到以下三张效果,server的注册列表中都包含 EUREKA-CLIENT-4

peer1

在这里插入图片描述

peer2

在这里插入图片描述

peer3

在这里插入图片描述

2 疑问

  • 2.1 在停用 peer1 server之后,eureka-client在peer2和peer3 server的注册列表进行了移除,重新刷新 peer2和peer3效果如下
  • 2.2 eureka-client配置多个注册地址也是一样的效果(在停用peer1之后和2.1一样),下图配置了http://peer1:8761/eureka/,http://peer2:8762/eureka/,http://peer3:8763/eureka/
    在这里插入图片描述
访问 http://peer2:8762/

在peer1宕机之后,peer2显示http://peer1:8761/eureka/,不可用,并且eureka-client也在peer2注册列表中移除了
在这里插入图片描述

访问 http://peer3:8763/

在peer1宕机之后,peer3显示http://peer1:8761/eureka/,不可用,并且eureka-client也在peer3注册列表中移除了

在这里插入图片描述

测试结果讨论

  • 看了这篇 https://blog.youkuaiyun.com/xcbeyond/article/details/81503484 xcbeyond 这位博主的文章,评论中有一位提到如下图
    在这里插入图片描述

  • 我在停掉 eureka-server1 服务之后,eureka-server2和eureka-server3注册列表中吧eureka-client给剔除掉了【eureka-client只配置了eureka.client.service-url.DEFAULT_ZONE=http://peer1:8761/eureka/ # 服务注册地址】,难道是我把eureka-server自我保护模式关闭的原因,配置了eureka.server.enable-self-preservation=false

  • xcbeyond 提到client端配置多个server,我在想,本身各个server之间是相互注册和同步了的,停掉一个server,本身是HA(high available),其他的server中的注册列表是不变的,顶多是宕机的server不可用而已

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值