1.研究背景

在大数据和云计算等领域应用中,如果机器数量达到一定的量时,可以考虑自建域名解析服务集群。构建私有的域名解析主要是出于两个目的:(1)通过域名,而不是ip来记忆服务,是更方便的事情;(2)在做主备切换的时候,只需要更改域名对应的ip值,从而实现在服务域名不变的情况下实现主备切换,这里如果没有域名,实现起来怎样,读者可以思考下。

本文讲解用etcd+ skydns构建域名解析服务的方法。etcd集群保存域名记录,skydns负责域名解析,skydns和etcd出自同一个项目,两者之间有良好的配合接口。skydns是基于etcd的, etcd是一个键值存储仓库,用于配置共享和服务发现。

skydns的github:https://github.com/skynetservices/skydns1

etcd的github:https://github.com/coreos/etcd

如上图,可以很好地诠释出skydns + etcd的搭配方式。客户端发送dns域名解析请求到skydns服务器Server1, skydns服务接受域名解析请求,会到etcd集群查询域名记录,把域名解析请求结果返回到客户端。如果Server1宕机了,那么Server2就会继续服务,客户端发出的请求就由Server2来解析,从而实现双机热备。

2. 高可用性部署过程

   这里以两台服务器10.36.220.12和10.36.220.13和10.36.220.14三台服务器集群部署为例。

2.1.集群部署etcd 

etcd是一个分布式的键值存储数据库,其内部是通过raft算法来实现leader节点的选举和实现内部各节点数据的同步。因为raft选举必须至少是2个节点。我们这里为了实现高可用性,就准备了3台服务器集群,就是防止其中一台服务器中途宕机,剩下的两台服务器可以重新进行raft选举,从而不影响正常工作。

分别在三台服务器开启etcd:

 10.36.220.12执行:

etcd --name etcd1  \
--listen-client-urls http://127.0.0.1:2379,http://10.36.220.12:2379  \
--initial-advertise-peer-urls http://10.36.220.12:2379 \
--initial-cluster etcd1=http://10.36.220.12:2380,etcd2=http://10.36.220.13:2380 \ --listen-peer-urls http://10.36.220.14:2380 \
--initial-cluster-state new \
--initial-cluster-token etcd-cluster \
--advertise-client-urls http://10.36.220.12:2379

10.36.220.13执行:

etcd --name etcd2  \
--listen-client-urls http://127.0.0.1:2379,http://10.36.220.13:2379  \
--initial-advertise-peer-urls http://10.36.220.13:2379:2380  \
--initial-cluster etcd1=http://10.36.220.12:2380,etcd2=http://10.36.220.13:2380 \ --listen-peer-urls http://10.36.220.14:2380 \
--initial-cluster-state existing\
--initial-cluster-token etcd-cluster \
--advertise-client-urls http://10.36.220.13:2379

 10.36.220.14执行:

etcd --name etcd3  \
--listen-client-urls http://127.0.0.1:2379,http://10.36.220.13:2379  \
--initial-advertise-peer-urls http://10.36.220.14:2379 \
--initial-cluster etcd1=http://10.36.220.12:2380,etcd2=http://10.36.220.13:2380 \ --listen-peer-urls http://10.36.220.14:2380 \
--initial-cluster-state existing\
--initial-cluster-token etcd-cluster \
--advertise-client-urls http://10.36.220.14:2379

在任意一台服务器执行:

etcdctl member list

可以查看etcd集群的各个节点情况。

这里要注意一个细节,就是etcd各个节点之间是通过2379和2380端口通信的,所以最好是在部署etcd集群环境之前,先对每台服务器开放2379和2380端口:

iptables –I INPUT –p tcp –dport  2379  –j  ACCEPT
iptables –I INPUT –p tcp –dport  2380  –j  ACCEPT

2.2.开启skydns服务

 这里只需要在这3台服务器的其中2台开启skydns服务,既可以实现通过双机热备来对外提高高可用性的服务。因此选择10.36.220.12和10.36.220.13这两台服务器来开启skydns服务。

10.36.220.12执行:

先配置/etc/resolv.conf文件

nameserver 10.36.220.12

执行指令,存入skydns的一些配置项。

etcdctl set skydns/config ‘{"nameservers":["10.36.220.12:53","10.36.220.13:53"],"domain":"cloud.mayor"}'

这里的几个参数说明下,skydns会默认去etcd读取skydns/config作为自己的配置项。其中namesevers是说明有哪些域名解析服务器,domain是说明skydns提供的域名解析限制,只解析第一级域名是mayor和第二级域名是cloud的域名,比如解析chx.cloud.mayor。

开启skydns

./skydns –addr 10.36.220.12:53

10.36.220.13执行:

先配置/etc/resolv.conf文件

nameserver 10.36.220.13

开启skydns

./skydns –addr 10.36.220.13:53

这样子这两台服务器的 skydns服务就开启了。

2.3.存入域名

环境搭好了之后,就需要向etcd数据库里存储一些键值对了 ,比如:

curl -XPUT http://10.36.220.12:2379/v2/keys/skydns/arpa/mayor/cloud/chx -d value='{"host":"10.35.24.35"}'

这个指令操作是说存入了域名为chx.cloud.mayor,ip为10.35.24.35的映射关系。这一步还不够,还需要存入ip(10.35.24.35)的反向域名:

curl -XPUT http://10.36.220.12:2379/v2/keys/skydns/arpa/in-addr/10/35/24/35 -d value='{"host":"chx.cloud.mayor"}'

需要这样配置执行,这个和DNS的原理有关系,涉及到arpa解析过程。如果不配置arpa的值,那么域名解析的时候会碰到不畅通的现象。

2.4.客户机应用私有域名解析服务

客户机应用我构建的域名解析服务时,操作很简单,只需要配置客户机的/etc/resolv.conf文件:

nameserver 10.36.220.12
nameserver 10.36.220.13

现在就可以ping下,刚刚存入的域名

ping chx.cloud.mayor

发现可以正常地解析得到域名对应的ip。

3. 后续问题

3.1.兼容内外网域名解析

配置了某台服务器的/etc/resolv.conf文件之后,虽说是实现了内部域名解析的功能。但是如果我想ping 外网ip怎么办,比如ping www.baidu.com。我们知道外网解析服务一般是通过114.114.114.114这个ip的。那么怎样实现客户机同时进行私有域名解析和外网域名解析呢。

方法很简单,客户机的/etc/resolve.conf不需要修改。执行如下:

etcdctl set skydns/config {"dns_addr":"10.36.220.12:53","nameservers":["10.36.220.13:53",114.114.114.114:53"],”ttl”:500,"domain":"cloud.mayor"}

这个配置的意思是说,如果ping 一个外网域名,会先经过10.36.220.12和10.36.220.13来做域名解析,显然是不会通的,这里ttl是等待时间,等待500毫秒之后,私有域名解析服务器还没有返回ip。那么就会继续通过114.114.114.114:53来进一步解析。

3.2.压力测试

私有域名解析服务器的性能测试可以用queryperf这个工具来进行。queryperf的安装可以参考网上教程。

执行如下shell:

var=1
while [ $var –le 100000 ]
do
echo “chx.cloud.mayor A” >> test.txt
var =$(($var + 1 ))
done
exit 0

那么就会向test.txt文件里面写入10w行“chx.cloud.mayor A”

然后执行:

queryperf -d test.txt -s 10.36.220.12

这里会同时向10.36.220.12服务器发起10w次域名解析服务。然后可以查看性能:

[Status] Processing input data
[Status] Sending queries (beginning with 172.25.9.85)
[Status] Testing completeStatistics:Parse input file:     onceEnded due to:         reaching end of fileQueries sent:         100000 queriesQueries completed:    100000 queriesQueries lost:         0 queriesQueries delayed(?):   0 queriesRTT max:              0.003361 secRTT min:              0.000142 secRTT average:          0.000782 secRTT std deviation:    0.000414 secRTT out of range:     0 queriesPercentage completed: 100.00%Percentage lost:        0.00%Started at:           Fri Sep  8 14:29:29 2017Finished at:          Fri Sep  8 14:29:33 2017Ran for:              3.990581 secondsQueries per second:   25059.007698 qps

qps是25059次,然后解析正确率是100%,性能还是不错的。

后记:以上一套方案,目前已经在我部门内已经正式使用,还有一些其他的小细节,我这里不方便记录,如果有读者正好需要构建这么一套私有域名解析服务器,可以沟通交流,我会把我踩过的坑分享给大家。

etcd+skydns构建私有域名解析服务器相关推荐

  1. 构建DNS域名解析服务器步骤和使用虚拟机win10进行域名解析(技术文档)

    文章目录 构建DNS域名解析服务器步骤(带图详解) 使用虚拟机win10进行域名解析 NFS共享服务 构建DNS域名解析服务器步骤(带图详解) 1.安装bind软件包 yum -y install b ...

  2. 使用Samba服务器构建私有和公共共享目录

      使用Samba服务器构建私有和公共共享目录   实验背景:       小诺公司使用RHEL4系统构建了Linux服务器,并在该服务器上默认安装了Samba服务器及相关软件包作为该公司的文件服务器 ...

  3. Gitea——私有git服务器搭建详细教程

    本文将从源代码和docker安装两种方式带大家从0-1通过Gitea搭建一个私有git服务器 Gitea--私有git服务器搭建教程 什么是Gitea 一.源代码安装方式 1. 前置环境要求 2. 下 ...

  4. 如何在5美元的Raspberry Pi上构建个人开发服务器

    In this article, you'll learn how to build a personal dev server by installing Git, Node.js, Rust, a ...

  5. ssl以及构建私有CA

    ssl以及构建私有CA ssl协议:将报文在传输前进行加密: # ssl 所谓的安全,加密是指保证:保密,完整,可用: ssl将明文通过密钥转为密文, 密码算法和协议: 对称加密: 单向加密: 公钥加 ...

  6. 用Linux构建高效FTP服务器(2)

    快速构建FTP服务器 FTP服务器实现的基本功能是上传下载,下面就分几个步骤来搭建一个可以实现下载功能的简易FTP服务器. 1.安装FTP服务器 如果在安装系统时没有选择安装FTP服务器,可以通过Re ...

  7. RHEL4- DNS服务(六)构建DNS缓存服务器

    RHEL4- DNS服务(六)构建DNS缓存服务器   如果要构建DNS缓存服务器其实不是很复杂,只要安装一个系统自带的软件包即可.其实这个软件包,我们在<RHEL4- DNS服务(一)bind ...

  8. 和我一起构建私有物联网云平台

    和我一起构建私有物联网云平台 "预计2020年全球的物联网设备将达到500亿台"这句话已经被我无耻地在各种材料.PPT中引用过无数次了,但这并不妨碍物联网已经成为或即将成为下一个浪 ...

  9. 搭建DNS域名解析服务器

    搭建DNS域名解析服务器 1.安装BIND软件 软件包bind,提供域名服务的主要程序及相关文件. 软件包bind-utils,提供对DNS服务器的测试工具程序,如nslookup. 注释:BIND是 ...

最新文章

  1. sonarqube插件开发(三) 调试插件
  2. 同名字的数值求和插入行_中望CAD2021:支持表格和字段插入公式,提高数据处理效率...
  3. SAP offline应用的flush按钮实现
  4. java tempfile read_Java 文件操作
  5. ipad和iphone切图_如何在iPhone,iPad和Mac上使消息静音
  6. mysql某个表的列除以2_数据库mysql(二)
  7. (23)FPGA面试题常用逻辑电平
  8. 信号学习第一课--基础知识
  9. oracle控制文件还原,Oracle的控制文件的恢复与重建
  10. Python零基础学习系列之三--Python编辑器选择
  11. redis shell命令
  12. 列标题 如何删除gridcontrol_Excel如何制作工资条?
  13. 《人工智能》之《计算智能》习题解析
  14. Flutter小说APP
  15. 【推荐】技术面试结束后,如何向技术面试官提问?
  16. python爬取百度使用kw关键字爬取时出现,百度安全验证,解决方法
  17. 读书笔记-指数基金投资指南
  18. 7个 优秀的远程“结对编程“编码工具
  19. 什么是信令?什么是信令网?(转)
  20. 偏态分布学习笔记(期望,中位数,众数)

热门文章

  1. 【Vue】快乐学习第四篇,组件访问及插槽使用
  2. 正则筛选图片url(js)
  3. 巴西矿坝决堤事故受害者亲属举行守夜仪式
  4. Element UI 表格单选、多选情景
  5. 计算机辅助物理化学实验 唐典勇课后答案,表面张力测定数据的模型拟合及MATLAB处理.pdf...
  6. 【Pygame小游戏】“史上最炫酷贪吃蛇”驾到,FUN开玩(不好玩不要钱)
  7. Android系列之Activity的传值和回传值
  8. Python解题 - CSDN周赛第25期 - 水池注水
  9. 离职两年后,程序员遭前东家索赔:Bug是你写的
  10. 论文笔记:Pay More Attention to History: A Context Modeling Strategy for Conversational Text-to-SQL