zoukankan      html  css  js  c++  java
  • 高可用的Eureka Server

    Eureka Server即服务的注册中心,在刚才的案例中,我们只有一个EurekaServer(Eureka Server是一个web应用,可以启动多个实例),事实上EurekaServer也可以是一个集群,形成高可用的Eureka中心。eureka-server模块只有一个,配置只有一个,通过在VMoptions中配置不同的port和defaultZone来实现集群。

    多个Eureka Server之间也会互相注册为服务,也会相互发现其他服务。如果有三个Eureka,则每一个EurekaServer都需要注册到其它几个Eureka服务中,例如:有三个分别为10086、10087、10088,则:

    10086要注册到10087和10088上

    10087要注册到10086和10088上

    10088要注册到10086和10087上

    服务提供者和消费者注册到Eureka Server集群中的某个节点时,该节点会把服务的信息同步给集群中的每个节点,从而实现数据同步。因此,无论客户端访问到Eureka Server集群中的任意一个节点,都可以获取到完整的服务列表信息。

    客户端(服务消费方和提供方)需要把信息注册到每个Eureka中,即服务的提供方和消费方不仅在http://127.0.0.1:10087/还在http://127.0.0.1:10086/

    我们假设要搭建两台EurekaServer的集群,端口分别为:10086和10087

    1、修改原来的EurekaServer的port和defaultZone配置,配置不同的端口避免冲突。

    ${port:10086}表示当提供了一个参数为port,就用提供的,如果没有提供,就用10086,相当于提供了一个默认值;

    ${port:http://127.0.0.1:10086/eureka }表示当提供了defaultZone,则用它提供的参数值,如果没有提供就用后面的值,相当于提供了一个默认值。${}中变量名称defaultZone可以在VMoptions中自定义,即不用跟冒号前的defaultZone保持一致,但是你指定了什么变量,这里就就写什么变量。

    Eureka注册到另一个Eureka服务器的地址要是对方的服务地址,当没有集群的时候是注册本身的地址。

    现在要做eureka-server集群,应该把自己当做一个服务注册到eureka server,把register-with-eureka和fetch-registry注释掉即可,因为默认为true。

    server:
      port: ${port:10086}
    spring:
      application:
        name: eureka-server
    eureka:
      client:
        service-url:
          defaultZone: ${defaultZone:http://127.0.0.1:10086/eureka}
    #    fetch-registry: false #默认为true
    #    register-with-eureka: false #默认为true

    知识点:

    所谓的高可用注册中心,其实就是把EurekaServer自己也作为一个服务,注册到其它EurekaServer上,这样多个EurekaServer之间就能互相发现对方,从而形成集群。因此我们做了以下修改:

      1)、 VM options中把service-url的值改成了另外一台EurekaServer的地址,而不是自己

    -Dport=10086 -DdefaultZone=http://127.0.0.1:10087/eureka:表示本机端口为10086,要注册到端口为10087这台机器上。可以不指定-Dport=10086,因为有默认值

    -Dport=10087 -DdefaultZone=http://127.0.0.1:10086/eureka:表示本机端口为10087,要注册到端口为10086的机器上。可以不指定-DdefaultZone=http://127.0.0.1:10086/eureka,因为有默认值。

      2)、把register-with-eureka和fetch-registry修改为true(注释掉也行,默认为true)

    在上述配置文件中的${}表示在jvm启动时候若能找到对应port或者defaultZone参数则使用,若无则使用后面的默认值

    2、另外一台在启动的时候可以指定端口port为10087和defaultZone配置为-DdefaultZone=http://127.0.0.1:10086/eureka。

    3、启动测试;同时启动两台eureka server

    4、客户端(服务提供方和服务消费方)注册服务到Eureka Server集群

    因为EurekaServer不止一个,因此 user-service 项目注册服务或者 consumer-demo 获取服务的时候,service-url参数需要修改为如下:

    eureka:
      client:
        service-url:
          defaultZone:  http://127.0.0.1:10086/eureka,http://127.0.0.1:10087/eureka

    为了保证注册服务高可用,要配多个地址,多个地址以逗号分隔。这样如果10086宕机了,仍然可以使用10087.如果10087宕机了,可以使用10086.

  • 相关阅读:
    TCP/IP协议栈概述及各层包头分析
    Maven:Non-resolvable parent POM: Failure to find错误
    mysql alter 用法,修改表,字段等信息
    PowerDesigner16 设置导出sql文件的编码
    linux iptables开放/关闭端口命令
    Enterprise Architect 13 : 需求建模 自动命名并计数
    Enterprise Architect 13 : 将绘制的图形导出成图片 或者 拷贝到剪贴板中
    Enterprise Architect 13 : 设置默认代码环境
    使用MyBatis查询 返回类型为int,但是当查询结果为空NULL,报异常的解决方法
    PowerDesigner16 修改表或表的字段Name的时候不让Code不自动跟着变
  • 原文地址:https://www.cnblogs.com/zwh0910/p/14456339.html
Copyright © 2011-2022 走看看