Spring Cloud Eureka 集群使用DNS方式进行服务分区

Eureka注册中心的配置方式有几种
网上常见的配置方式分为
一、使用defaultZone,这种没有分区的概念,就一个区,所有的服务都会使用defaultZone配置的serverUrl进行服务注册发现。网上有很多文章这里不再赘述
二、集群的配置方式有两种一种是配置文件的方式,一种是DNS的方式
这里面还要提到一个分区的概念 Region和Zone,这里 芋道源码 http://www.iocoder.cn/Eureka/eureka-client-init-second/?sf&2017-11-01和周立http://www.itmuch.com/spring-cloud-1/的文章里都有描述,
二、1.第一种配置文件的方式,这种也是网上文件介绍比较全面的一种
SpringCloudEureka进行服务分区:https://www.jianshu.com/p/2ca32773b3e5  和 
eureka集群的两种配置方式:配置文件方式和Dns方式http://www.cnblogs.com/relinson/p/eureka_ha_config_properties_and_dns.html
这两篇文章也介绍的比较清楚
重点是配置region, 配置availability-zones,这个要注意节点的顺序前后,还有就是配置service-url,基本上也可以实现了,但是这种方式都是需要提前写死的,对于动态增加注册中心进行分区调整都要调整每个eurekaclient的配置,说白了就是每个服务都要修改相应的配置项,所以就引申出DNS的配置方式
二、2.Dns方式配置Eureka集群
这种方式网上介绍的也有,比如这篇文章https://www.cnblogs.com/relinson/p/eureka_ha_use_dns.html
前半部分介绍的也很清晰,也有那么几个重点的配置项,
use-dns-for-fetching-service-urls: true使用dns方式配置 
eureka-server-d-n-s-name: XXX.com DNS根域名
region: beijing
eureka-server-u-r-l-context: eureka    配置中心的eureka目录
eureka-server-port: 9999   映射其他eurekaServer的端口,这里注意采用这种方式 server.port和这个端口最好一致
因为dns是控制地址的变化,端口不变,所以不像前面的哪些配置方式可以自己定义url和port。所以每个IP都是用的相同的port进行注册中心服务的部署
这些也是文章中说的比较清楚的配置方式,但是踩坑的过程中发现这些只是讲解了前半部分,后面还有若干细节从网上如何都找不到。下面就来说一说
1、首先EurekaServer和EurekaClient都要设置DNS地址,也就是说注册中心,和其他注册到注册中心的服务,都要现在运行的服务机器上配置私有的DNS服务地址,使得机器能够采用相同的DNS服务地址,本地windows调试就去网络适配器里改IPv4里的DNS即可
2、要配置DNS服务器,以windows的DNS服务器为例,首先建一个域 XXX.com,也就是对应着
eureka-server-d-n-s-name

其次要建一个region例如beijing,然后里面要建一个txt类型的文本,填入3azone.XXX.com   3bzone.XXX.com,相当于一个region下有2个分区
然后还要在region的同级目录建2个域一个3azone,一个3bzone,区域的划分可根据自己的情况命名和划分

3azone里面建一个txt文件输入对应的serviceurl例如192.168.1.1 192.168.1.2,2台机子归属于3azone

3b内也建类似的配置,这样就完成了dns的配置,通过查看Eureka的源码,他的实现是通过寻找
txt.beijing.XXX.com(txt.region.eureka-server-d-n-s-name)这样的方式获取到的
3azone.XXX.com和3bzone.XXX.com中的zone,3azone和3bzone,
然后再去获取 txt.3azone.XXX.com和txt.3bzone.XXX.com中对应的ServiceUrls,的数据,也就是IP地址。
这样服务间就可以获取到固定端口下的不同IP的机子的注册中心服务并相互注册
3.注册中心相互注册后可能会出现 unavailable-replicas的情况,出现这个主要是2个属性造成的
要么就使用IP注册eureka.instance.prefer-ip-address=true,如果不使用IP注册而使用host方式,那么就要配置eureka.instance.hostname: 3azone.XXX.com   #非常非常重要,使用host又没配置,就会显示unavailable-replicas,
4.服务中心配置好后,其他client服务也只要配置对应的连接方式即可
eureka:
  instance:
    prefer-ip-address: true
    metadata-map:
      zone: 3azone  #这个是服务注册优先归属于哪个区
  client:
    register-with-eureka: true
    fetch-registry: true
    region: beijing
    #开启DNS方式获取serviceUrl,默认为false
    use-dns-for-fetching-service-urls: true
    #DNS域名,获取其他信息将以该域名为根域名
    eureka-server-d-n-s-name: XXX.com
    #eureka服务根目录
    eureka-server-u-r-l-context: eureka
    #连接注册中心端口
    eureka-server-port: 9999 #这里一定注册中心的端口,如果不想写死就要配置环境变量来实现了


以上这些步骤只要稍加注意,即可完美的完成eureka基于DNS的方式配置分区集群,且可以动态的添加分区和注册中心数量和位置


















 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值