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:\Windows\System32\drivers\etc\hosts 的文件下加上这两个主机名 (因为用的是同一台机器,所以需要绑定一下两个主机名)

  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来让集群中的服务同步,我们需要更深入的理解节点间的同步机制。

posted @ 2018-01-19 11:04  po~  阅读(385)  评论(0编辑  收藏  举报