eureka 1.9.8 采用dns 发现 serviceurl 或 peer

eureka 1.9.8 采用dns 发现 serviceurl 或 peer

最近在使用eureka 进行服务的动态注册和发现,eureka 是一个AP特性的注册中心,非常适合用于服务的动态注册和发现。

eureka 集群发现各peer有两种模式:1.通过在配置文件中配置defaultZone 的service url列表来完成。2.通过DNS方式

第1中方式相对来说比较简单。考虑到eureka 上线后的动态扩容,那如果基于第一种方式的话,手动配置service url列表将是一件非常痛苦的事,所以本文主要介绍基于DNS 方式来配置发现。

  1. 自己找台linux 服务器搭建DNS服务,我这里采用的是 coredns 1.2.6版本,要支持TXT类型。coredns的安装非常简单,需要自己配置一个名字为 Corefile 的配置文件,内容如下:

    .:53 {
        whoami
        log stdout
        errors stdout
        

        etcd eureka.com {
        
            stubzones
            path /eurekaserviceurl
            endpoint http://127.0.0.1:2379
            upstream 8.8.8.8:53 8.8.4.4:53
        }
    }  大概意思就是这台dns server 监听53端口对外提供服务,DNS的默认端口也是53,然后配置了一个eureka.com的域名,stubzones 代表支持子域名,
    path 代表数据保存在etcd 的path,
    endpoint 代表 etcd的地址,
    upstream代表它处理不了的请求转发给其他DNS来处理。

  2. 搭建etcd cluster,如果只是为了测试eureka 的基于dns 的发现能力,etcd 可以启动单台就够了,etcd 需要 V3.X版本,我这里用的是 etcd-v3.3.10版本,etcd 启动后就可以了,这里就不详细说明了。

  3. 启动etcd,这里就不详细说明如何启动etcd了。

  4. 启动coredns,在Linux 服务器对应的coredns 解压目录下执行 ./coredns --conf ./Corefile 启动,启动完成后如果正常如下图所示:说明它正在监听53端口的域名解析请求。

  5. eureka 在 springcloud 对应的配置文件中的核心配置如下(这里主要体现的是从DNS获取peer的配置,这里没有区分zone,用的defaultZone,其他的忽略了):
    eureka:
        client:
    ​​​​​​         eureka-server-port: 8761
             eureka-server-d-n-s-name: eureka.com
             use-dns-for-fetching-service-urls: true
  6. coredns 只支持读取etcd v3 api 存取的数据,所以需要先在shell 中执行 export  ETCDCTL_API=3。 
  7. 然后在coredns 上配置域名数据。这里需要切换到etcd 的解压目录下,执行 ./etcdctl put /eurekaserviceurl/com/eureka/us-east-1/txt '{"text":"defaultZone.eureka.com"}' ,然后执行
    dig +short txt.us-east-1.eureka.com TXT @localhost 查看数据是否正确。如图所示:
  8. 接着在coredns 上配置子域名txt.defaultZone.eureka.com的TXT数据。

    ./etcdctl put /eurekaserviceurl/com/eureka/defaultzone/txt '{"text":"1.1.1.1 1.1.1.2 1.1.1.3 1.1.1.4"}'  这里的IP 改为自己真实环境的IP地址即可。如果开启了spring security,配置格式为./etcdctl put /eurekaserviceurl/com/eureka/defaultzone/txt '{"text":"admin:vkzeus!369@127.0.0.1"}' 多个IP 中间用空格隔开。红色部分 defaultzone 必须是小写,大写并不能写入数据,可能是与我使用的DNS有关系。执行 dig +short txt.defaultZone.eureka.com TXT @localhost 查看结果,如下图所示:

  9. 还可以接续配合更多的子域名数据,例如:

    ./etcdctl put /eurekaserviceurl/com/eureka/us-east-1c/txt '{"text":"2.2.2.2 2.2.2.2 2.2.2.3 2.2.2.4"}'

    dig +short txt.us-east-1c.eureka.com TXT @localhost  如下图所示:

  10. 接这启动你的eureka server,注意可能要修改你的DNS IP 为 Linux coredns 运行服务器的IP。你会发现eureka server 正常启动,可以正确获取到peer url.

  11. 在这里我也主要参考了三篇文章:https://github.com/coredns/coredns/tree/master/plugin/etcd  与 https://github.com/Netflix/eureka/wiki/Deploying-Eureka-Servers-in-EC2 与 https://github.com/spring-cloud/spring-cloud-netflix/issues/213

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值