前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >利用CoreDNS设置mongo支持SRV连接

利用CoreDNS设置mongo支持SRV连接

作者头像
dhyuan
发布2022-05-30 14:31:23
1.4K0
发布2022-05-30 14:31:23
举报
文章被收录于专栏:响应式编程响应式编程

MongoDB 从3.6开始,就支持mongo+srv “DNS Seed List Connection Format”这种格式的连接串。

对客户端来说它可以隐藏后端mongo服务节点的变化,其显而易见的好处就是后端mongo节点的变化无需修改客户端连接参数,也就无需进行应用的重新部署。其工作原理主要是利用DNS对SRV/TXT记录的支持,因此为了使用mongo+srv,我们需要一个DNS服务器并在其中设置指向mongo后端节点的SRV记录。

这里以docker的方式运行CoreDNS来作为本地DNS服务器使用本地环境演示一下如何配置以支持mongo srv。

MongoDB

MongDB这部分无需特殊配置,只要把MongoDB在本地以复制集(名为rs0)安装并运行起来就好。

运行CoreDNS

运行CoreDNS容器,并把本地~/dockerSrvStorage/dockerEnv/coredns 映射为coredns容器里的/root目录。

配置CoreDNS使用容器里的/root/Corefile(对应于本地的~/dockerSrvStorage/dockerEnv/coredns/Corefile)作为配置文件。

代码语言:javascript
复制
docker run -d –name coredns –restart=always
–volume=~/dockerSrvStorage/dockerEnv/coredns/:/root/
-p 53:53/udp coredns/coredns
-conf /root/Corefile

配制CoreDNS

Corefile内容如下。其中定义了一个dns zone ‘local.env’,对应的DNS记录文件使用/root/local.env。因为上一步已经把本地的~/dockerSrvStorage/dockerEnv/coredns 映射为了容器里的/roo目录,所以在本地的这个目录创建local.env这个文件就可以了。

Corefile:

代码语言:javascript
复制
.:53 {
    forward . 8.8.8.8 114.114.114.114
    log
    errors
}


local.env:53 {
    file /root/local.env
    log
    errors
}

local.env

下面的配置表示本地机器域名设置为dev.local.env,机器名mongo.local.env是dev.local.env这个机器的别名。

假设本地运行了一个数据库DB1以两个replicaset(名字是rs0)方式运行的mongo实例,分别侦听在端口27017,27117上。下面的配置就可以提供一个mongosrv连接。

mongo+srv://DB1.mongo.local.env。

代码语言:javascript
复制
@    3600 IN    SOA dns.local.env. dhyuan.google.com. (
        2022030456 ; serial
        7200       ; refresh (2 hours)
        3600       ; retry (1 hour)
        1209600    ; expire (2 weeks)
        3600       ; minimum (1 hour)
        )


dev.local.env.    IN  A   127.0.0.1
mongo.local.env.  IN  CNAME   dev.local.env.
redis.local.env.  IN  CNAME   dev.local.env.
zk.local.env.     IN  CNAME   dev.local.env.


_mongodb._TCP.DB1.mongo.local.env. 86400 IN SRV   0        0      27017 mongo.local.env.
_mongodb._TCP.DB1.mongo.local.env. 86400 IN SRV   0        0      27117 mongo.local.env.
DB1.mongo.local.env. 86400 IN TXT   "replicaSet=rs0&authSource=DB1"

更改本地/etc/resolv.conf

把’nameserver 127.0.0.1’ 加在文件末尾,让本地的CoreDns参与解析。

验证

dig -t srv DB1.mongo.local.env

也可以通过文章https://www.mongodb.com/blog/post/mongodb-3-6-here-to-srv-you-with-easier-replica-set-connections 中 Reading SRV and TXT Records部分提供的python解析srv的代码验证。

pip3 install srvlookup

pip3 install dnspython

python3 mongodb_srv_records.py DB1.mongo.local.env

Reference:

https://dev.to/robbmanes/running-coredns-as-a-dns-server-in-a-container-1d0

https://datatracker.ietf.org/doc/html/rfc2052

https://docs.mongodb.com/manual/reference/connection-string/

https://www.mongodb.com/blog/post/mongodb-3-6-here-to-srv-you-with-easier-replica-set-connections

https://coredns.io/manual/toc/

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-03-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 响应式编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档