zoukankan      html  css  js  c++  java
  • eureka集群的两种配置方式:配置文件方式与DNS方式

    eureka client获取serviceUrls(eureka server地址)列表的过程:

    • 1. 根据use-dns-for-fetching-service-urls属性判断是从dns还是从config获取region和zone以及serviceUrl相关信息
    • 2. 获取过程首先从配置中获取应用所在region,通过region属性设置
    • 3. 根据region获取所有zone信息,dns与config获取方式不一样
      • 3.1. dns会请求dns服务器获取指定region的所有zone列表,如果没有查询到则抛出异常.使用该方式需要设定 eureka-server-d-n-s-name,eureka-server-u-r-l-context,eureka-server-port属性,具体配置可参考另一篇文章《eureka集群基于DNS配置方式
      • 3.2. config则从配置文件的availabilityZones列表获取,如果没有配置,则返回defaultZone.使用该方式需要配置availability-zones(Map<region:zone>),service-url(Map<zone:serviceUrls>)
    • 4. 获取zone列表成功后需要对列表进行排序,排序根据prefer-same-zone-eureka而不同,该属性意为是否将相同名称的zone作为注册首选
      • 4.0. 这里有一个客户端zone的概念,该zone为availabilityZones的第一个zone,如果没有设置则为defaultZone
      • 4.1. 如果设置true,则查询zone列表,找到与客户端zone同名的元素,并将其之前元素转移到列表最后
      • 4.2. 如果设置false,则查找zone列表,找到第一个与客户端zone不同名的zone,并将其之前的元素转移到列表最后
    • 5. 然后循环获取所有zone对应的serviceUrls并按顺序追加到一个列表中
      • 5.1. 如果是配置方式,获取某个zone的serviceUrls为空则返回defaultZone的serviceUrl,而DNS方式不会进行任何处理

    通过以上步骤可以获取到region对应的zone的serviceUrls.

    这里出现了region,zone,serviceUrl这几个概念,可以简单理解为region包含多个zone,zone包含多个serviceUrl.但需要注意的是,zone可以出现在多个region中,serviceUrl可以出现在多个zone中,也就是说他们三个概念两两之间的关系是多对多而非一对多.

    #基于DNS的配置
    eureka:
      client:
        #DNS域名,获取其他信息将以该域名为根域名
        eureka-server-d-n-s-name: relinson.com
        #开启DNS方式获取serviceUrl,默认为false
        use-dns-for-fetching-service-urls: true
        #当前应用所在区域,默认为us-east-1
        region: region1
        #eureka服务根目录
        eureka-server-u-r-l-context: eureka
        #服务所在端口
        eureka-server-port: 9999
        #获取serviceUrl时候是否优先获取相同zone的列表(如果获取为空则获取所在region第一个zone),如果为false则优先获取不在相同zone的列表
        prefer-same-zone-eureka: true
        #是否获取注册信息到本地
        fetch-registry: true
        #是否将自己注册到eureka
        register-with-eureka: true
    #基于CONFIG的配置
    eureka:
      client:
        #开启DNS方式获取serviceUrl,默认为false
        use-dns-for-fetching-service-urls: false
        #当前应用所在区域,默认为us-east-1
        region: region1
        #获取serviceUrl时候是否优先获取相同zone的列表(如果获取为空则获取所在region第一个zone),如果为false则优先获取不在相同zone的列表
        #client所在zone为availabilityZones的第一个zone,如果未配置,则为defaultZone
        prefer-same-zone-eureka: true
        #是否获取注册信息到本地
        fetch-registry: true
        #是否将自己注册到eureka
        register-with-eureka: true
        #与DNS获取的方式相同,这里需要手工配置包含哪些region以及zone(Map类型),如果没有给相关的region配置zone,则默认返回defaultZone
        availability-zones:
          region1: zone1-2,zone1-2,zone2-2
          region2: zone2-2,zone2-2,zone2-3
        #与DNS获取数据方式类似,这里需要手工配置每个zone包含哪些URL,如果应用所在区域没有zone,则默认返回defaultZone的数据
        service-url:
          zone1-1: http://xxx,http://xxx2 
          zone1-2: http://xxx,http://xxx2
          zone2-1: http://xxx,http://xxx2
          zone2-2: http://xxx,http://xxx2
  • 相关阅读:
    总结下目前维护团队中用到的一些技术和工具
    一次修改时间导致的ORACLE 实例崩溃
    ruby 用watir 登录 CU的代码
    最近好烦.真的好烦
    Lucene.Net学习
    项目上线了,心情好爽
    轻松掌握XMLHttpRequest对象[转]
    微软发布3款SQL Injection攻击检测工具
    Domino开发
    用在JavaScript的RequestHelper [转]
  • 原文地址:https://www.cnblogs.com/relinson/p/eureka_ha_config_properties_and_dns.html
Copyright © 2011-2022 走看看