Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >基于腾讯云自建高可用DNS方案实践

基于腾讯云自建高可用DNS方案实践

原创
作者头像
Rocky-QQ
发布于 2022-03-04 11:42:07
发布于 2022-03-04 11:42:07
7.8K00
代码可运行
举报
运行总次数:0
代码可运行

本篇主要介绍如何在腾讯云平台下自建高可用DNS环境,来满足企业在云上的内外网域名解析的需求。这里主要介绍两种方案的实现方式,方案一: 基于Centos 系统自带的Bind软件构建智能解析方案; 方案二:基于CoreDNS与ETCD来构建CoreDNS高可用方案,在阐述两个方案实现的前,咱们一起回顾下DNS的基础概念及原理。

1.DNS基础概念

1.1.DNS 概述

DNS是一个层次化的分布式数据库,其全称为域名系统(Domain Name System),它存储用于互联网主机名与IP地址相互映射的信息,及其它互联网所用到的数据。DNS系统是由柏克大学发展的BIND软件(Berkeley Internet Name Domain)所提供。现目前的BIND的为9.x,现网上大多数都简称叫BIND9 ;BIND9 软件分发包括了一个名字服务器,named,和量和解析库,liblwres和libbind。如果想了解更多或下载更高的版本,可到此站点去查询与下载:http://www.isc.org/software/bind

BIND与DNS区别:DNS是一种因特网的通信协议名称,BIND这是提供这个DNS服务的软件;在TCP/IP网络中有非常重要的地位,能够提供域名与IP地址的解析服务。

1.2.DNS工作原理

域名系统DNS是类似于一个树状数据结构,树中的每个节点实质都是负责某个特定区域的一台服务器,通过这些节点,对整个域名空间进行划分,成为一个层次结构,这种结构类似与UNIX文件系统的层次结构,根的名字“.”来表示,并称之为根域名(root domain)根域的下一级是顶级域名,顶级域名又分为两种划分方法,地理域和通用域,地理域则是为了世界上每个国家或地区等设置的,如中国是cn,日本jp,美国us,台湾tw。等等。通用域则是通过不同的机构类别设置的顶级域名,如org、edu 等等。如下图:

1.3.常见的顶级域名列表

名称

代表含义

备注

edu

教育机构

org

非商业组织、机构

gov

政府机构

net

网络、通信

mil

军事

com

公司、企业

最早根下以上只有6大类域名

cn

中国

us

美国

tw

台湾

随着网络快速增长,后来就出现了,以国家或地区区分的Domain name。

1.4.域名服务的解析原理和过程

  • Step-1:用户提出域名请求,并将请求发送给本地域名服务器
  • Step-2:当本地域名服务器收到请求后,先查询本地的缓存,如果有该记录信息,则本地的域名服务器就直接把查询的结果返回给用户端
  • Step-3:如果本地的缓存中没有该记录,则本地域名服务器就直接把请求发给根域名服务器,然后让根域名服务器返回给本地域名服务器一个所查询域(根的子域,如cn)的主域名服务器的地址
  • Step-4:本地服务器再向上一步骤中所返回的域名服务器发送请求,然后收到该请求的域名服务器查询其缓存,返回与此请求所对应的记录或相关的夏季的域名股武器的地址,本地域名服务器将返回的结果保存到缓存
  • Step-5:重复第4步,直到找到正确的记录
  • Step-6:本地域名服务器把返回的结果保存到缓存,以备下一次使用,同时还将结果返回客户端 DNS解析示例

Step-1:客户端请求解析www.sina.com.cn的报文

Step-2:本地的域名服务器收到请求后,查看本地缓存是否有该www.sina.com.cn的解析记

录,若有则反馈给客户端,若没有,就像上图一样,从根域名服务器进行查询

Step-3: “.” 根域名服务器收到请求后,判断此域名属于.cn域,查询到NS记录及相应的A记录告

Step-4:本地DNS服务器收到相关信息后,先缓存起来,再向其.cn的域名之一的DNS服务

器发送请求解析域名www.sina.com.cn的报文

Step-5:.cn域名服务器收到请求后,判断该域名属于.com.cn域,开始查询本地的记录,找到6条NS记录及相应的A记录后,将其结果反馈给本地DNS服务器

Step-6:本地DNS服务器收到反馈信息后,先缓存起来,再向其.com.cn域名服务器进行查

询,请求解析域名www.sina.com.cn的报文

Step-7:.com.cn域名服务器收到请求后,判断该域属于.sina.com.cn域,开始查询本地的记录找到NS记录及对应的A记录,然后将查询的结果返回给本地DNS服务器

Step-8:本地DNS服务器收到请求后,先缓存以上查询结果,再次向.sina.com.cn域名服务器进行查询,请求解析域名www.sina.com.cn的报文

Step-9:域名服务器ns1.sina.com.cn收到请求后,开始查询本地缓存,同时其解析的结果反馈给本地DNS服务器

Step-10:本地DNS服务器收到www.sina.com.cn的解析后,先本地缓存一份,同时将其结果返回给客户机,这样就完成一次域名解析过程

1.5.DNS服务的相关记录说明

  • NS:域名服务器记录成为NS记录
  • A :地址记录用于设置主机名对应ip地址关系
  • CNAME:别名记录
  • MX记录:设置当前域中提供邮件服务器名称

2.DNS高可用智能解析方案

本DNS高可用方案基于基于CVM云服务器,在VPC内网的进行DNS服务器的构建,可实现内网域名解析的需求。 同时本方案设计结合了腾讯云CLB产品提供了负载均衡能力,也可通过多个CLB实现对接多台RS接节点,分担前端解析压力,同时支持多可用区部署。

2.1.方案特点

  • 同地域,多可用区 进行DNS高可用构建;
  • 全部部署在内网环境,无公网IP暴露;
  • 内网、外网域名请求分离,减小故障影响;
  • 内网LB对接多台RS节点,承载前端解析访问请求;

2.2.方案实现功能

  • 支持腾讯云平台内网保留域名解析 如:*.tencentyun.com ;
  • 支持用户定义自己业务域名内网解析 如: www.rocky.com ;
  • 支持访问外网域名解析 如:www.baidu.com ;
  • 支持分域名转发到不同的DNS 服务器

2.3.解析流程路径

1)客户端访问企业内部域名

  • Client => CLB => 自建DNS1 /自建DNS2

2)客户端访问腾讯云内网域名

  • Client => CLB => 自建DNS1 =>转发至183 DNS => UnbondDNS

3)客户端访问外网域名

  • Client => CLB=>自建DNS1 =>转发至183 DNS => Private DNS =>公网递归DNS

注意:

  • 若客户在腾讯云的UIN账号是非带宽上移用户(传统用户),则CLB不支持跨可用区挂在RS节点。’
  • 按照相关规定,没有相关资质是不允许开启53端口的。若内部使用,需限制访问来源。详情参考腾讯云官网文档《关于安全组53端口配置的公告》,https://cloud.tencent.com/document/product/213/35533。

3.DNS高可用智能解析方案实现

本次方案采用了两台节点进行此方案的实践。 若在云上的生成环境需结合客户业务的详细需求进行节点数量,CLB数量,不同的地域调整即可。

3.1.设置主机名

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@VM-2-15-centos ~] hostnamectl set-hostname node4.rocky.com
[root@VM-2-16-centos ~] hostnamectl set-hostname node5.rocky.com

3.2.配置/etc/hosts

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@node4 ~]# cat /etc/hosts
127.0.0.1 VM-6-15-centos VM-6-15-centos
127.0.0.1 localhost.localdomain localhost
127.0.0.1 localhost4.localdomain4 localhost4
10.0.6.15 node4 node4.rocky.com
10.0.6.16 node5 node5.rocky.com

3.3.安装DNS软件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@node4 ~]# yum -y install bind
[root@node5 ~]# yum -y install bind

3.4.DNS主配置文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@node4 ~]# cat /etc/named.conf
//
// named.conf
//
// Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
// server as a caching only nameserver (as a localhost DNS resolver only).
//
// See /usr/share/doc/bind*/sample/ for example named configuration files.
//
// See the BIND Administrator's Reference Manual (ARM) for details about the
// configuration located in /usr/share/doc/bind-{version}/Bv9ARM.html
acl "trusted-recursion" { # 设置acl
 localhost;
 10.0.0.0/16;
};
options {
 listen-on port 53 { any; }; #设置监听端口,也可写具体的网段
 listen-on-v6 port 53 { any; };
 directory "/var/named";
 dump-file "/var/named/data/cache_dump.db";
 statistics-file "/var/named/data/named_stats.txt";
 memstatistics-file "/var/named/data/named_mem_stats.txt";
 recursing-file "/var/named/data/named.recursing";
 secroots-file "/var/named/data/named.secroots";
 allow-query { any; }; #开放查询 
 allow-recursion { trusted-recursion; }; #指定允许哪些主机可以从缓存中获取答案。
 allow-query-cache { trusted-recursion; }; # 指定允许那些主机可以通过本服务器进行递归查询。
 /*
 - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion.
 - If you are building a RECURSIVE (caching) DNS server, you need to enable
 recursion.
 - If your recursive DNS server has a public IP address, you MUST enable access
 control to limit queries to your legitimate users. Failing to do so will
 cause your server to become part of large scale DNS amplification
 attacks. Implementing BCP38 within your network would greatly
 reduce such attack surface
 */
 recursion yes;
 dnssec-enable no;
 dnssec-validation no; # 关闭dnssec安全验证
 /* Path to ISC DLV key */
 #bindkeys-file "/etc/named.root.key";
 managed-keys-directory "/var/named/dynamic";
 pid-file "/run/named/named.pid";
 session-keyfile "/run/named/session.key";
 forwarders {
 183.60.83.19; # 腾讯云VPCGW DNS地址
 183.60.82.98; # 腾讯云VPCGW DNS地址
 };
};
logging {
 channel default_debug {
 file "data/named.run";
 severity dynamic;
 };
};
zone "." IN {
 type hint;
 file "named.ca";
};
#include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
zone "rocky.com" { # 域名
 type master; #主DNS
 file "dynamic/rocky.com.zone"; # zone file path #正向区域文件
 notify yes;
};
zone "6.0.10.in-addr.arpa" in {
 type master;
 file "dynamic/6.0.10.in-addr.arpa.zone"; #反向区域文件
 notify yes;
};

3.5.DNS区域文件配置

3.5.1.正向区域配置文件

3.5.2.反向区域配置文件

3.5.3.区域配置文件参数说明

参数

代表含义及作用

TTL

生命周期,默认24小时,保存缓存时间

@

代表区域,如这里代表rocky.com域的区域

rocky.com

代表DNS域名完整格式,按道理应该有主机名,如node4.rocky.com等

root.rocky.com

代表管理员邮箱

0

序列号,(更新区域文件,增大序列号,为了是让辅助DNS能及时对区域文件的更新)

3H

刷新,告知辅助DNS多久来更新区域文件

15m

主DNS服务器没有应答,则每15分钟重新找寻主DNS

1w

针对15m参数;若15分钟重新找寻主DNS,持续一周,则丢弃

1D

表示一天,代表缓存保留时间

3.5.4.启动DNS服务

分别在node4 和node5 进行服务启动及检查服务状态是否正常。

3.6.DNS服务解析验证

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#客户端访问企业内部域名
[root@node4 ~]# nslookup www.rocky.com
Server: 10.0.6.15
Address: 10.0.6.15#53
Name: www.rocky.com
Address: 10.0.6.100

[root@node4 ~]# nslookup 10.0.6.100
100.6.0.10.in-addr.arpa name = www.rocky.com.

#客户端访问外网域名
[root@node4 ~]# nslookup www.baidu.com
Server: 10.0.6.15
Address: 10.0.6.15#53
Non-authoritative answer:
www.baidu.com canonical name = www.a.shifen.com.
Name: www.a.shifen.com
Address: 110.242.68.3
Name: www.a.shifen.com
Address: 110.242.68.4
#客户端访问腾讯云内网服务域名
[root@node4 ~]# nslookup mirrors.tencent.com
Server: 10.0.6.15
Address: 10.0.6.15#53
Non-authoritative answer:
mirrors.tencent.com canonical name = mirrors.cloud.tencent.com.
mirrors.cloud.tencent.com canonical name = mirrors.cloud.tencent.com.cdn.dnsv1.com.
mirrors.cloud.tencent.com.cdn.dnsv1.com canonical name = 14io0gsu.sched.dma.tdnsv5.com.
Name: 14io0gsu.sched.dma.tdnsv5.com
Address: 113.240.69.235
Name: 14io0gsu.sched.dma.tdnsv5.com
Address: 113.240.69.180
[root@node4 ~]#

服务验证通过,符合预期,node5 分别也进行相关解析验证。

3.7.LB配置

3.7.1.新建内网LB

新建内网LB,配置监听端口为UDP:53,加权轮询。

3.7.2.配置LB

选择板绑定的RS节点,确认即可

3.8.客户端验证

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@node6 ~]# cat /etc/resolv.conf
; generated by /usr/sbin/dhclient-script
#nameserver 183.60.83.19
#nameserver 183.60.82.98
nameserver 10.0.2.2 #内网LB地址
#解析业务域名
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@node6 ~]# nslookup www.rocky.com
Server: 10.0.2.2
Address: 10.0.2.2#53
Name: www.rocky.com
Address: 10.0.6.100
#解析腾讯内网域名
[root@node6 ~]# nslookup mirrors.tencent.com
Server: 10.0.2.2
Address: 10.0.2.2#53
Non-authoritative answer:
mirrors.tencent.com canonical name = mirrors.cloud.tencent.com.
mirrors.cloud.tencent.com canonical name = mirrors.cloud.tencent.com.cdn.dnsv1.com.
mirrors.cloud.tencent.com.cdn.dnsv1.com canonical name = 14io0gsu.sched.dma.tdnsv5.com.
Name: 14io0gsu.sched.dma.tdnsv5.com
Address: 113.240.69.180
Name: 14io0gsu.sched.dma.tdnsv5.com
Address: 113.240.69.235
[root@node6 ~]# nslookup myqcloud.com
Server: 10.0.2.2
Address: 10.0.2.2#53
Non-authoritative answer:
Name: myqcloud.com
Address: 0.0.0.1
#解析外网域名
[root@node6 ~]# nslookup www.jd.com
Server: 10.0.2.2
Address: 10.0.2.2#53
Non-authoritative answer:
www.jd.com canonical name = www.jd.com.gslb.qianxun.com.
www.jd.com.gslb.qianxun.com canonical name = jd-abroad.cdn20.com.
Name: jd-abroad.cdn20.com
Address: 121.57.82.89
Name: jd-abroad.cdn20.com
Address: 36.111.141.54
Name: jd-abroad.cdn20.com
Address: 121.57.82.88
Name: jd-abroad.cdn20.com
Address: 121.57.82.17
Name: jd-abroad.cdn20.com
Address: 42.81.145.189
Name: jd-abroad.cdn20.com
Address: 113.24.194.72
Name: jd-abroad.cdn20.com
Address: 240e:918:1a00:201::33
Name: jd-abroad.cdn20.com
Address: 240e:928:101::1e
Name: jd-abroad.cdn20.com
Address: 240e:918:1a00:201::15
Name: jd-abroad.cdn20.com
Address: 240e:925:2:101::6

验证通过, 符合预期。

3.9.DNS高可用智能解析方案总结

本方案采用Linux系统自带的DNS软件进行DNS高可用环境的构建,结合了内网CLB使其解析调度RS更加灵活。 同时实现了客户端对企业内网域名,腾讯云内外网域名的解析需求。另外这里务必注意RS在内网进行构建,安全组限制53端口的来源IP。

4.CoreDNS高可用方案

本篇主要介绍 通过自建CoreDNS集群来提供DNS内外域名解析,及腾讯内网DNS功能,这里采用CoreDNS+ETCD集群方式来实现。方案特点:

  • 多台自建的CoreDNS节点,规避了单台无法使用的情况,提升可用性
  • 多可用区部署,具备高可用性,避免单可用区故障现象(虽说概率较小)
  • 全部部署在内网环境,无公网IP暴露
  • 内网、外网域名请求分离,减少故障爆炸半径

4.1CoreDNS

CoreDNS基于用 Go 编写的是一个DNS服务器,链接插件,每个插件执行一个(DNS)功能。相对于其他DNS 如:BIND、Knot、PowerDNS 和 Unbound不同之处,在于它非常灵活,几乎所有功能都外包到插件中 ,插件也可以是独立的,也能协同工作。 可以利用插件对你的DNS数据做你想做的事情。如果有些功能不是现成的,你可以通过编写插件来添加,和Caddy Server具有相同的模型:链接插件。

4.1.1CoreDNS 特点

  • 插件化(Plugins): 基于Caddy服务器框架,CoreDNS实现了一个插件链的架构,将大量应用端的逻辑抽象成插件形式暴露给使用者。CoreDNS以预配置的方式将不同的插件串成一条链,按序执行插件链上的逻辑。
  • 配置简单:引入表达力更强的DSL,即Corefile形式的配置文件。

4.1.2 CoreDNS 架构

4.1.3 CoreDNS 解析方式

注意这里有两个不同的端口:5300和53。在内部,每个端口都会生成一个dnsserver.Server。即使有四个服务器块,我们也只能得到两个实际的服务器。CoreDNS会将所有与同一端口相关的服务器块收集起来,并将它们合并到相同的dnsserver.Server中。服务器将在端口上多重查询,根据区域将它们传递到不同的插件链。它为区域选择最特定的匹配服务器块。如果没有匹配的服务器块,则返回SERVFAIL。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
coredns.io:5300 {
file /etc/coredns/zones/coredns.io.db
}
example.io:53 {
errors
log
file /etc/coredns/zones/example.io.db
}
example.net:53 {
file /etc/coredns/zones/example.net.db
}
.:53 {
errors
log
health
rewrite name foo.example.com foo.default.svc.cluster.local
}

4.2 ETCD

ETCD是一种高度一致的分布式键值存储,它提供了一种可靠的方式来存储需要由分布式系统或机器集群访问的数据。它在网络分区期间优雅地处理领导选举,并能够容忍机器故障。

  • 简单:安装配置简单,支持HTTP API进行交互;
  • 安全:支持SSL证书验证;
  • 快速:根据官方提供的benchmark数据,单实例支持每秒2k+读操作;
  • 可靠:采用raft算法,实现分布式系统数据的可用性和一致性;

从上面架构图中我们可以看到,ETCD主要分为四个部分。

HTTP Server: 用于处理用户发送的API请求以及其它etcd节点的同步与心跳信息请求。 Store:用于处理etcd支持的各类功能的事务,包括数据索引、节点状态变更、监控与反馈、事件处理与执行等等,是etcd对用户提供的大多数API功能的具体实现。 Raft:Raft强一致性算法的具体实现,是etcd的核心。 WAL:Write Ahead Log(预写式日志)是etcd的数据存储方式。除了在内存中存有所有数据的状态以及节点的索引外,etcd就通过WAL进行持久化存储。在WAL中所有的数据提交前都会事先记录日志,Snapshot是为了防止数据过多而进行的状态快照,Entry表示存储的具体日志内容。

4.3 配置ETCD集群

这里采用三台云服务器作为CoreDNS节点的后端数据库,ETCD架构逻辑具备选举master机制,分别为node1~ node3

4.3.1 安装ETCD及开机启动

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@node1~]# yum -y install etcd
[root@node11 ~]# systemctl enable etcd; systemctl start etcd
Created symlink from /etc/systemd/system/multi-user.target.wants/etcd.service to /usr/lib/systemd/system/etcd.service.

4.3.2 node1 etcd配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@node1 etcd]# egrep ^[A-Z] etcd.conf
ETCD_DATA_DIR="/var/lib/etcd/node1.etcd"
ETCD_LISTEN_PEER_URLS="http://10.0.2.4:2380"
ETCD_LISTEN_CLIENT_URLS="http://10.0.2.4:2379,http://127.0.0.1:2379"
ETCD_NAME="node1"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.0.2.4:2380"
ETCD_ADVERTISE_CLIENT_URLS="node1=http://10.0.2.4:2379"
ETCD_INITIAL_CLUSTER="node1=http://10.0.2.4:2379,node2=http://10.0.2.8:2379,node3=http://10.0.2.15:2379"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"

4.3.3 node2 etcd配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@node2 ~]# egrep ^[A-Z] /etc/etcd/etcd.conf
ETCD_DATA_DIR="/var/lib/etcd/node2.etcd"
ETCD_LISTEN_PEER_URLS="http://10.0.2.8:2380"
ETCD_LISTEN_CLIENT_URLS="http://10.0.2.8:2379,http://127.0.0.1:2379"
ETCD_NAME="node2"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.0.2.8:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://10.0.2.8:2379"
ETCD_INITIAL_CLUSTER="node1=http://10.0.2.4:2380,node2=http://10.0.2.8:2380,node3=http://10.0.2.15:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
[root@node2 ~]#

 4.3.4 node3 etcd配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@node3 ~]# egrep ^[A-Z] /etc/etcd/etcd.conf
ETCD_DATA_DIR="/var/lib/etcd/node3.etcd"
ETCD_LISTEN_PEER_URLS="http://10.0.2.15:2380"
ETCD_LISTEN_CLIENT_URLS="http://10.0.2.15:2379,http://127.0.0.1:2379"
ETCD_NAME="node3"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://10.0.2.15:2380"
ETCD_ADVERTISE_CLIENT_URLS="http://10.0.2.15:2379"
ETCD_INITIAL_CLUSTER="node1=http://10.0.2.4:2380,node2=http://10.0.2.8:2380,node3=http://10.0.2.15:2380"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"

启动与验证etcd服务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@node1 ~]# systemctl start etcd.service
[root@node1 ~]# systemctl status etcd.service
etcd.service - Etcd Server
   Loaded: loaded (/usr/lib/systemd/system/etcd.service; enabled; vendor preset: disabled)
   Active: active (running) since Tue 2022-02-15 13:50:16 CST; 10h ago
 Main PID: 10451 (etcd)
   CGroup: /system.slice/etcd.service
           └─10451 /usr/bin/etcd --name=node1 --data-dir=/var/lib/etcd/node1.etcd --listen-client-urls=http://10.0.2.4:2379,http://127.0.0.1:2379

4.3.5 etcd集群健康

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@node1 ~]# etcdctl member list
5432b0f7395992d2: name=node1 peerURLs=http://10.0.2.4:2380 clientURLs=http://10.0.2.4:2379 isLeader=true
589358f881fe72a1: name=node2 peerURLs=http://10.0.2.8:2380 clientURLs=http://10.0.2.8:2379 isLeader=false
bb72602d9eb35069: name=node3 peerURLs=http://10.0.2.15:2380 clientURLs=http://10.0.2.15:2379 isLeader=false

[root@node1 ~]# etcdctl cluster-health
member 5432b0f7395992d2 is healthy: got healthy result from http://10.0.2.4:2379
member 589358f881fe72a1 is healthy: got healthy result from http://10.0.2.8:2379
member bb72602d9eb35069 is healthy: got healthy result from http://10.0.2.15:2379
cluster is healthy

4.4 多节点CoreDNS部署

4.4.1安装coredns 

这里面可结合客户业务需要进行CoreDNS服务器的环境构建,这里采用的coredns1.6.4 版本, 官网最新1.9.x

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@dns1 ~]# tar zxvf coredns_1.6.4_linux_amd64.tgz
[root@dns1 ~]# mv coredns /usr/bin/
[root@dns1 ~]# mkdir /etc/coredns

 4.4.2 coredns核心配置文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@node1 ~]# cat /etc/coredns/Corefile
. {  # 监听tcp和udp的53端口
    etcd node1.rocky.com node2.rocky.com node3.rocky.com 10.in-addr.arpa { # 配置启用etcd插件,后面可以指定域名
        stubzones # 启用存根区域功能
        path /skydns # etcd里面的路径 默认为/skydns,以后所有的dns记录就是存储在该存根路径底下
        endpoint http://10.0.2.4:2379  http://10.0.2.8:2379 http://10.0.2.15:2379 # etcd访问地址,多个空格分开
        upstream  183.60.83.19:53  183.60.82.98:53 # 设置要使用的上游解析程序解决指向外部域名的在etcd(认为CNAME)中找到的外部域名。
    }
    cache 600  # 缓存600秒
    loadbalance # 负载均衡,开启DNS记录轮询策略
    forward . 183.60.82.98:53  183.60.83.19:53 # 上面etcd未查询到的请求转发给设置的DNS服务器解析
}

myqcloud.com {
    cache 600 myqcloud.com 
    loadbalance
    forward . 119.29.29.29:53
}

tencent-cloud.com {
 hosts { 
  10.210.104.113 cls-i0fxloot.ccs.tencent-cloud.com
  10.210.49.4 cls-88b89rhb.ccs.tencent-cloud.com
  10.210.104.35 cls-o4rn1235.ccs.tencent-cloud.com
  fallthrough
    }
}

4.4.3 配置systemd 管理 coredns服务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@node1 ~]# cat /usr/lib/systemd/system/coredns.service
[Unit]
Description=CoreDNS DNS server
Documentation=https://coredns.io
After=network.target

[Service]
PermissionsStartOnly=true
LimitNOFILE=1048576
LimitNPROC=512
CapabilityBoundingSet=CAP_NET_BIND_SERVICE
AmbientCapabilities=CAP_NET_BIND_SERVICE
NoNewPrivileges=true
User=coredns
WorkingDirectory=~
ExecStart=/usr/bin/coredns -conf=/etc/coredns/Corefile
ExecReload=/bin/kill -SIGUSR1 $MAINPID
Restart=on-failure

[Install]
WantedBy=multi-user.target
[root@node1 ~]#

4.4.4 启动coredns

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@node1 ~]# systemctl status coredns
● coredns.service - CoreDNS DNS server
   Loaded: loaded (/usr/lib/systemd/system/coredns.service; disabled; vendor preset: disabled)
   Active: active (running) since Tue 2022-02-15 16:13:43 CST; 4s ago
     Docs: https://coredns.io
 Main PID: 30288 (coredns)
   CGroup: /system.slice/coredns.service
           └─30288 /usr/bin/coredns -conf=/etc/coredns/Corefile

Feb 15 16:13:43 node1.rocky.com systemd[1]: Started CoreDNS DNS server.
Feb 15 16:13:43 node1.rocky.com coredns[30288]: .:53
Feb 15 16:13:43 node1.rocky.com coredns[30288]: myqcloud.com.:53
Feb 15 16:13:43 node1.rocky.com coredns[30288]: tencent-cloud.com.:53
Feb 15 16:13:43 node1.rocky.com coredns[30288]: ______                ____  _   _______
Feb 15 16:13:43 node1.rocky.com coredns[30288]: / ____/___  ________  / __ \/ | / / ___/        ~ CoreDNS-1.6.4
Feb 15 16:13:43 node1.rocky.com coredns[30288]: / /   / __ \/ ___/ _ \/ / / /  |/ /\__ \         ~ linux/amd64, ...dirty
Feb 15 16:13:43 node1.rocky.com coredns[30288]: / /___/ /_/ / /  /  __/ /_/ / /|  /___/ /
Feb 15 16:13:43 node1.rocky.com coredns[30288]: \____/\____/_/   \___/_____/_/ |_//____/
Hint: Some lines were ellipsized, use -l to show in full.
[root@node1 ~]# ^C
[root@node1 ~]# systemctl enable coredns
Created symlink from /etc/systemd/system/multi-user.target.wants/coredns.service to /usr/lib/systemd/system/coredns.service.

4.4.5 coredns 配置解析记录

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
root@node1 ~]# etcdctl put /skydns/com/rocky/node1 '{"host":"10.0.2.4","ttl":10}'
No help topic for 'put'
[root@node1 ~]# export ETCDCTL_API=3
[root@node1 ~]# etcdctl put /skydns/com/rocky/node1 '{"host":"10.0.2.4","ttl":10}'
OK
[root@node1 ~]# vim .bashrc
[root@node1 ~]#
[root@node1 ~]#
[root@node1 ~]# etcdctl put /skydns/com/rocky/node2 '{"host":"10.0.2.8","ttl":10}'
OK
[root@node1 ~]# etcdctl put /skydns/com/rocky/node3 '{"host":"10.0.2.15","ttl":10}'
OK
[root@node1 ~]# etcdctl put /skydns/com/rocky/node1 '{"host":"www.tam3.com","ttl":10}'
OK
[root@node1 ~]#

由于这里采用的测试环境, 需要结合具体业务进行相关设置。

4.6 coredns 验证

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[root@node1 ~]# dig @node1 www.tam3.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.7 <<>> @node1 www.tam3.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1734
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.tam3.com.                  IN      A

;; ANSWER SECTION:
www.tam3.com.           160     IN      CNAME   tam3.com.
tam3.com.               160     IN      A       3.33.152.147
tam3.com.               160     IN      A       15.197.142.173

;; Query time: 622 msec
;; SERVER: 10.0.2.4#53(10.0.2.4)
;; WHEN: Tue Feb 15 16:25:24 CST 2022
;; MSG SIZE  rcvd: 123

验证符合预期。

5.总结

本篇通过两种不同的形式在云上实现自建高可用DNS环境来解决企业在云上的内外网域名解析的需求。以上两个方案仅供参考,生产环境采用,需结合业务具体需求进行相关配置的调整。同时这里优先推荐采用腾讯云的DNS托管服务,有特殊业务需求可参考以上两个方案结合托管的DNS服务协同来处理。

6.附录

6.1.DNS常用工具

dig用法

dig 域名信息探索者(domain information groper,dig)是查询工具中最多功能的。常使用的dig的简单形式如:

  • dig @server domain query-type query-class
  • dig @dns域名或ip 区域 记录类型
  • dig @10.0.2.2 rocky.com NS/A/MX

nslookup 用法

nslookup 有两种模式:交互是和非交互式;交互模式允许使用者向名字服务器发出对各种主机和域名信息的查询请求,或者打印出一个域下面的主机列表.非交互模式只能用于打印所查询的某个主机或域的名字和请求信息, 如文章上述测试方法。

whois工具

  • https://www.internic.net/whois.html
  • https://whois.cloud.tencent.com/

拨测工具

  • 17ce.com
  • mdig.com

6.2.其他参考资料

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【能力比对】数据质量管理VS数据质量平台
🔥🔥 AllData大数据产品是可定义数据中台,以数据平台为底座,以数据中台为桥梁,以机器学习平台为中层框架,以大模型应用为上游产品,提供全链路数字化解决方案。
用户11518204
2025/05/06
1050
【能力比对】数据质量管理VS数据质量平台
政务数据质量管理提升的5个最佳实践
近年来在国家政策推动以及各监管机构的要求下,政企单位对数据治理的关注度不断提高,而数据质量的提升就是体现数据治理成效的指标之一。今天和大家分享一下政务服务行业从不同业务角度出发,如何解决数据质量问题的案例。
数据狗忙忙忙
2022/09/21
4120
数据治理之数据质量管理
数据质量,是指在业务环境下,数据符合数据消费者的使用目的,能满足业务场景具体需求的程度。
chimchim
2022/11/13
1.1K0
关于人工智能在数据质量管理中的应用
说实在的,人工智能这个概念有些过于高大上,从大的方面包括深度学习、机器学习、强化学习等等,而深度学习又包括图像识别、语音识别、自然语言处理、预测分析;机器学习则包括监督学习、无监督学习、半监督学习,监督学习又细分为回归、分类、决策树等等。理论上人工智能什么都能做,什么都能迎合的上。
python与大数据分析
2022/03/11
9310
关于DAMA数据质量管理的解读和一些看法
数据质量管理是组织变革管理中一项关键的支撑流程,包括整合数据源、创建一致的数据副本、交互提供数据或整合数据。数据清洗不能解决数据缺陷的根本原因。
python与大数据分析
2022/03/11
1.3K0
关于DAMA数据质量管理的解读和一些看法
五个原则下的数据质量建设之道
在数字化转型的背景下,数据是一把双刃剑,它能给企业带来业务价值的同时也是组织最大的风险来源。糟糕的数据质量常常意味着糟糕的业务决策,将直接导致数据统计分析不准确、监管业务难、高层领导难以决策等问题。
yuanyi928
2023/01/11
7610
大数据质量管制规范示例
在当今大数据信息时代,大数据平台(大数据平台开发规范示例)和大数据仓库(大数据仓库开发规范示例)的开发规范已成为组织和企业管理决策的重要基础。
一臻数据
2024/12/24
1740
大数据质量管制规范示例
数据质量管理的一些思考
在近期的项目当中,我们为客户落地实施了数据资产平台。随后,在数据平台中接入了客户子公司的一个业务系统的明细数据。客户希望在我们的数据平台上通过数据探索和数据分析,来挖掘一些业务价值和业务创新点。
ThoughtWorks
2018/07/23
2.2K0
所谓数据治理
大数据时代,数据成为社会和组织的宝贵资产,像工业时代的石油和电力一样驱动万物,然而如果石油的杂质太多,电流的电压不稳,数据的价值岂不是大打折扣,甚至根本不可用,不敢用,因此,数据治理是大数据时代我们用好海量数据的必然选择。
王知无-import_bigdata
2021/06/01
9500
所谓数据治理
关于数据质量,必须要懂的 6 点!(好好看看)
按照国际数据管理协会的《数据管理知识手册》中规定,数据质量(DQ)是“既指与数据有关的特征,也指用于衡量或改进数据质量的过程。”但要深入理解数据质量,需要切分不同层次或维度。
公众号:大数据羊说
2022/05/17
6.3K0
关于数据质量,必须要懂的 6 点!(好好看看)
数据治理(三):数据质量管理
在大数据早期,做数据治理最主要的目的,就是为了提升数据质量,让报表、分析、应用更加准确。到今天,虽然数据治理的范畴扩大了很多,我们开始讲数据资产管理、知识图谱、自动化的数据治理等等概念,但是提升数据的质量,依然是数据治理最重要的目标之一。因为数据要能发挥其价值,关键在于其数据的质量的高低,高质量的数据是一切数据应用的基础。在数据质量不高的环境下,做数据分析可谓问题重重,数据质量问题已经严重影响了组织业务的正常运营。通过科学的数据质量管理,持续地提升数据质量,已经成为组织内刻不容缓的优先任务。
Lansonli
2022/04/08
8820
数据治理(三):数据质量管理
DataMan:美团旅行数据质量监管平台实践
背景 数据,已经成为互联网企业非常依赖的新型重要资产。数据质量的好坏直接关系到信息的精准度,也影响到企业的生存和竞争力。Michael Hammer(《Reengineering the Corporation》一书的作者)曾说过,看起来不起眼的数据质量问题,实际上是拆散业务流程的重要标志。 数据质量管理是测度、提高和验证质量,以及整合组织数据的方法等一套处理准则,而体量大、速度快和多样性的特点,决定了大数据质量所需的处理,有别于传统信息治理计划的质量管理方式。 本文基于美团点评大数据平台,通过对数据流转
美团技术团队
2018/03/29
2.8K0
DataMan:美团旅行数据质量监管平台实践
数据仓库之数据质量建设(深度好文)
数仓建设真正的难点不在于数仓设计,而在于后续业务发展起来,业务线变的庞大之后的数据治理,而数据治理的范围非常广,包含数据本⾝的管理、数据安全、数据质量、数据成本等。在这么多治理内容中,大家想下最重要的治理是什么?当然是数据质量治理,因为数据质量是数据分析结论有效性和准确性的基础,也是这一切的前提。所以如何保障数据质量,确保数据可用性是数据仓库建设中不容忽视的环节。
五分钟学大数据
2021/10/13
2.1K0
数据仓库之数据质量建设(深度好文)
元数据治理:产品方案介绍及案例实践
今天分享的主题是元数据治理实践,这是一项长期持续的工作,涉及多部门协作、多角色参与,链路长且复杂,要有完善的流程、成熟的平台、业务和技术部门共同参与,才能推进治理工作的有效展开。
从大数据到人工智能
2022/10/28
6600
元数据治理:产品方案介绍及案例实践
数据质量问题是“技术”问题还是“业务”问题?
是不是感觉漫画中的场景很熟悉?没错,这种场景几乎每天都在企业中重复上演。 一、数据质量问题的危害 当前越来越多的企业认识到了数据的重要性,数据仓库、大数据平台的建设如雨后春笋。但数据是一把双刃剑,它能
yuanyi928
2018/03/30
2.2K0
数据质量问题是“技术”问题还是“业务”问题?
专访数据质量与治理专家Danette McGilvray:企业应像管理财务那样管理数据
大数据文摘作品,转载具体要求见文末 文| 大数据文摘记者魏子敏 图| 大数据文摘摄影记者田晋阳 技术人员通常没有意识到,他们正掌控着一家公司中巨大的权力。 这是很多数据量大、业务部门冗杂的公司正每天面临的场景:大量业务数据从研发、业务、人力、财务部门涌向技术(或者数据处理)中心,技术人员根据他们所掌握的技术知识进行“科学”筛选分析,并把相应数据、系统返回各部门辅助决策。 如此重要的决策数据,很可能在分析前已经筛掉了业务部门的核心需要,而技术人员费了大力气跑出的数据回到业务部门的时候,因为无法被理解、或没
大数据文摘
2018/05/22
6760
技术人员做数据质量治理实践总结
作者:vanping  腾讯IEG后台开发工程师 |导语  当一个数据系统越来越复杂,参与方越来越多,其需要管理的数据量越来越庞大时,数据治理尤其是针对数据质量的治理就变得越来越重要且紧迫了。 本篇文章主要是对我过去一段时间针对O2所做的数据质量治理工作做一总结与分享,希望能够帮助到同样在做数据质量治理工作的同学。 01 导语 本人是IEG市场平台部的一名开发人员,目前主要负责O2广告投放系统的开发以及数据质量治理工作。O2是市场平台部-市场平台增长中心用于做游戏广告投放以及相关效果数据回收展示的系统。该
腾讯大讲堂
2021/01/19
9150
【rainbowzhou 面试15/101】技术提问--数据质量管理的流程有哪些?
在前面的系列文章中,我讲述了如何用一些大数据的测试方法来保障数据质量,那么还有其他方法吗?当然有,即数据质量管理的方式来保障数据质量。今天先从数据质量管理流程聊起,来看看如何更加全面、系统的管理数据质量,从而使数据变得更有价值,希望对大家有所帮助。
rainbowzhouj
2023/03/16
2520
【rainbowzhou 面试15/101】技术提问--数据质量管理的流程有哪些?
顺丰科技数据治理实践
导读:本文介绍顺丰科技在数据治理方面的实践。分享分为两个部分,第一部分总体介绍顺丰科技在整个数据治理过程中的心路历程:我们做了哪些工作,在数据治理各个领域,分别做了什么事情。第二部分分享数据治理中关键的主数据管理在顺丰科技的实践和落地情况。如下:
从大数据到人工智能
2022/11/21
7960
顺丰科技数据治理实践
企业数据治理及在美团的最佳实践
数据是指对客观事件进行记录并可以鉴别的符号,是对客观事物的性质、状态以及相互关系等进行记载的物理符号或这些物理符号的组合。其实在我看来,数据可以分为两个部分,一是数字,二是文字。数字是没有意义的抽象符号,数据是有意义的数字。文字表意,数字表量,当两者结合起来,数据就产生了。
王知无-import_bigdata
2021/03/15
1.6K0
企业数据治理及在美团的最佳实践
推荐阅读
相关推荐
【能力比对】数据质量管理VS数据质量平台
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验