Spring Cloud Eureka 集群使用DNS方式进行服务分区
Eureka注册中心的配置方式有几种网上常见的配置方式分为一、使用defaultZone,这种没有分区的概念,就一个区,所有的服务都会使用defaultZone配置的serverUrl进行服务注册发现。网上有很多文章这里不再赘述二、集群的配置方式有两种一种是配置文件的方式,一种是DNS的方式这里面还要提到一个分区的概念 Region和Zone,这里 芋道源码 http://www.ioco...
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)