zoukankan      html  css  js  c++  java
  • springcloud(四)-Eureka Server集群

    Eureka Server的高可用

    这一节我们接着上一节说。

    有分布式应用开发经验的朋友应该发现,前文编写的单节点Eureka Server并不适合线上生产环境。Eureka Client会定时连接Eureka Server,获取服务注册表中的信息并缓存到本地。微服务在消费远程API时总是使用本地缓存中的数据。因此一般来说,即使Eureka Server发生宕机,也不会影响服务之间的调用。但如果Eureka Server宕机时,某些微服务也发生了不可用的情况,Eureka Client中的缓存若不被更新,就可能会影响微服务调用,甚至影响整个应用系统的高可用性。因此,在生产环境中,通常会部署一个高可用的Eureka Server集群。

    编写高可用Eureka Server

    Eureka Server可以通过运行多个实例并相互注册的方式实现高可用部署,Eureka Server 实例会彼此增量地同步信息,从而确保所有节点数据一致。事实上,节点之间相互注册是Eureka Server的默认行为,还记的前文我们提到过的:

      eureka.client.registerWithEureka = false

      eureka.client.fetchRegistry = false

    这俩都是默认true的。

    这里我们在前文的基础上,构建一个双节点Eureka Server集群。

    1.复制项目micrservice-discovery-eureka,将ArtifactId修改为microservice-discovery-eureka-ha。

    2.配置系统的hosts,Window系统的hosts文件路径是C:WindowsSystem32driversetchosts;Linux及Mac OS等系统的文件路径是/etc/hosts。

        127.0.0.1 peer1 peer2

    3.将application.yml修改如下,让两个节点的Eureka Server相互注册。

    spring:
      application:
        name: microservice-discovery-eureka-ha
    ---
    spring:
      #指定profile=peer1
      profiles: peer1
    server:
      port: 8761
    eureka:
      instance:
        #指定当profile=peer1时,主机名是peer1
        hostname: peer1
      client:
        serviceUrl:
          # 将自己注册到peer2这个Eureka上面去
          defaultZone: http://peer2:8762/eureka/
    ---
    spring:
      profiles: peer2
    server:
      port: 8762
    eureka:
      instance:
        hostname: peer2
      client:
        serviceUrl:
          defaultZone: http://peer1:8761/eureka/

    如上,使用连字符(---)将该application.yml文件分为三段。第二段和第三段分别为spring.profiles指定了一个值,该值表示它所在的那段内容应用在哪个profile里。第一段由于并未指定spring.profiles,因此这段内容会对所有profile生效。

    经过以上分析,不难理解,我们定义了peer1和peer2这两个profile。当应用以peer1这个profile启动时,配置该Eureka Server的主机名为peer1,并将其注册到http://peer2:8762/eureka/;反之,当应用以profile=peer2启动时,Eureka Server会注册到peer1节点的Eureka Server。

    测试

    1.打包项目,并使用以下命令启动两个EurekaServer节点。

    java -jar microservice-discovery-eureka-ha-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer1

    java -jar microservice-discovery-eureka-ha-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer2

      通过spring.profiles.active指定使用哪个profile启动。

    2.访问http://peer1:8761,会发现“registered-replicas”中已有peer2节点;同理,访问http://peer2:8762,也能发现其中的“registered-replicas”中有peer1节点。

    最后

    还没结束,在说几句。

    我们要将应用注册到Eureka Server集群上,我们只需要配置多个Eureka Server地址即可,例如:

    defaultZone: http://peer1:8761/eureka/,http://peer2:8762/eureka/

    直接用逗号隔开即可。

    其实我们完全不用这样,就只配置一个就行,因为你eureka server集群不是数据同步的吗!!!

  • 相关阅读:
    一个有趣的js现象
    根相对路径的简单例子
    几道简单有趣的js题(一)
    js流程控制题——如何实现一个LazyMan
    HTML5 十大新特性(十)——Web Socket
    HTML5 十大新特性(九)——Web Storage
    HTML5 十大新特性(八)——Web Worker
    HTML5 十大新特性(七)——拖放API
    HTML5 十大新特性(六)——地理定位
    HTML5 十大新特性(五)——SVG绘图
  • 原文地址:https://www.cnblogs.com/fengyuduke/p/10685459.html
Copyright © 2011-2022 走看看