zoukankan      html  css  js  c++  java
  • spring-cloud-part 10 : spring cloud 高可用的服务注册中心

      

          之前都是将服务注册到单点的eureka-server上,但是在实际生产系统中是不适用的,因为如果这个节点宕机了的话,就会造成依赖这个服务的整个微服务都会出现故障,所以需要一个高可用的注册中心来弥补这种缺陷。

    实现思路:

      Eureka 通过 “ 伙伴 ” 机制实现高可用 。每一台eureka在配置中都需要指定另一台eureka的地址作为其伙伴,eureka在启动时,都会向自己的伙伴节点获取当前已经存在的注册列表,这样在向eureka集群中新加机器时就不需要担心注册列表不完整了。

      同时,eureka还支持 Region 和 Zone 的概念,其中一个 Region 可以包含多个zone。Eureka在启动时需要指定一个Zone名, 即指明当前的eureka属于哪个Zone , 如果没有指定,则归属到default Zone;client也需要指定zone,当 client (与ribbon 配置使用时)向 server 获取注册列表时会优先向和自己在同zone的eureka server 发请求,当且仅当与自己同zone的所有的eureka server 都宕机才会调用别的 zone 的 eureka server。Region 和 Zone 就像现实生活中的大区和机房,比如华南地区有20个机房,华北地区有30个机房,明确指定eureka的Region和Zone可以避免跨区调用。同一个地区的eureka坏掉不会导致整个地区的服务都不可用。

    * 高可用的服务注册中心:
    一 集群环境的搭建
    1. 新建两个eureka-server 服务,分别名为:eureka-register-service-master,eureka-register-service-backup;
    2. 两个application.yml的配置如下:
    master的eureka-server配置如下:

    server: port: 7998 spring: application: name: eureka-server eureka: instance: hostname: master # 配置主机名 client: fetch-registry: false register-with-eureka: false service-url: defaultZone: http://backup:7999/eureka/ # 配置的是backup的地址 
    backup 的 eureka-server 的yml配置文件如下:

    server: port: 7999 spring: application: name: eureka-server eureka: instance: hostname: backup # 配置主机名 client: fetch-registry: false register-with-eureka: false service-url: defaultZone: http://master:7998/eureka/ # 配置的是 master 的地址
      3. 在C:WindowsSystem32driversetchosts 的文件下加上这两个主机名 (因为用的是同一台机器,所以需要绑定一下两个主机名)

      4.在idea中新加 master 和 backup 这两个服务----设置spring.profiles.active。

        1)点击Edit Configurations;

        2)点击左上角的“+”;

        3)分别设置 master 和 backup

      注意:

        a)Name分别为 master 和 backup 。

        b)Main class为eureka-service服务中的启动类的类全名(包名+类名)。

        c)参数设置在 Program arguments,参数前面的两个“-”不能缺省。

        d)Use classpath of Module为eureka-register-service-backup / master。

      5   在两个server服务的程序的主入口类上分别加上@EnableEurekaServer注解;

      6   分别运行 http://localhost:7998  和  http://localhost:7999

      (此时  还没有写service-hi 服务,请忽略)

      在仅仅开启两个注册服务的时候,可以看到,master 服务和 backup 服务分别已经注册到对方的服务注册中心了。

               端口7998是matser它的registered-replicas指向了 http://backup:7999/eureka/

              端口7999是backup它的registered-replicas指向了 http://master:7998/eureka/

     注:有人会问为什么unavailable-replicas :http://backup:7999/eureka/或者 http://master:7999/eureka/ 那是因为我的配置,如果把eureka.client.register-with-eureka设置成false 改成true就可以了;
     
    二  写注册服务  service - client
      只需要修改:application.yml的eureka.client.service-url.defaultZone:http://master:7998/eureka/,http://backup:7999/eureka/  
      (也可以只写一个注册地址)
    server:
      port: 8988
    
    spring:
      application:
        name: service-hi
    
    eureka:
      client:
        service-url:
          #defaultZone: http://master:7998/eureka/,http://backup:7999/eureka/
          defaultZone: http://master:7998/eureka/
    

      发现,无论注册地址写一个还是两个,service-hi都注册到了两个eureka-server 服务注册中心,这说明,如果其中一个服务注册中心宕机了,也能保证这个服务的正常调用。

    总结:

      eureka 是支持 亚马逊的AWS 的Region 和 Zone 理念的,一个Region 底下可以包含多个Zone,每一个eureka-server都要指定zone的(如果没有指定,就会归属于默认的defaultZone);这里的两个eureka-server和service-hi 默认属于同一个Region的指定的zone,service-hi 同时注册到了由master和backup这两个注册中心构成的集群里的每一个server上,避免了单点故障。

    三   集群理解

      在实际开发中,因负载等原因,我们往往需要创建不止两个eureka-server节点,此时问题来了:如何配置serviceURL来让集群中的服务同步,我们需要更深入的理解节点间的同步机制。

  • 相关阅读:
    【算法】HashMap相关要点记录
    【算法】二叉树、N叉树先序、中序、后序、BFS、DFS遍历的递归和迭代实现记录(Java版)
    SpringCloud Openfeign Get请求服务传递对象的报400 Post not support的错误解决办法
    掌握 Promise 的逻辑方法
    JavaScript的执行上下文,真没你想的那么难
    一套标准的ASP.NET Core容器化应用日志收集分析方案
    在IIS中部署前后端应用,多么痛的领悟!
    吐槽一下Abp的用户和租户管理模块
    ant-design-vue中tree增删改
    微服务下的注册中心如何选择
  • 原文地址:https://www.cnblogs.com/zdj-/p/8304892.html
Copyright © 2011-2022 走看看