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
(0)

相关推荐