问题
机房内网的递归 DNS 解析服务器超负荷运行,不稳定,时常出现解析失败的问题。
优化 /etc/resolv.conf 的配置
options timeout:1
nameserver 114.114.114.114
nameserver 8.8.8.8
options timeout:1 这里增加的超时配置,覆盖了默认值 - 5秒,但是仍然达不到生产环境的需求。 毕竟一秒的延迟会极大的伤害用户体验。
所以尝试使用 dnsmasq。
dnsmasq
dnsmasq 能对多个 nameserver 发起查询请求,然后把最快的返回结果缓存到本地。
centos 下安装, 可以参考我的 dnsmasq 自动化安装脚本
默认安装的是 2.48 版本。
参考 Caching Nameserver using dnsmasq
如何检验 dnsmasq 的各项配置已生效
基本解析功能
dig sunzhongwei.com @127.0.0.1
缓存测试
time dig sunzhongwei.com @127.0.0.1
在部分递归出现问题的情况下,仍然能够解析未缓存的域名
思路:
- /etc/resolv.conf 只保留 127.0.0.1 这一条配置
- 使用 iptables,tc 之类的工具屏蔽前面部分递归 DNS 服务器的请求
- 如果仍能够返回说明正常
如何使用 Docker centos container 测试自动化部署脚本
Docker 镜像文件到底有多大?
$ sudo docker pull centos:6
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
centos 6 510cf09a7986 3 weeks ago 202.6 MB
可见一个 centos 6 的镜像才 200M。
一个有趣的现象
sudo docker run -t -i centos:6 /bin/bash
登录镜像之后,安装的所有程序,在 exit 之后,再进去就会消失,很便于初始化测试环境啊,哈哈哈。
如何将本地文件复制到 docker container 中
sudo docker run -t -i -v /path/to/hostdir:/mnt $container /bin/bash
cp /mnt/sourcefile /path/to/destfile
在 docker 的 centos 6 镜像下,启动 dnsmasq 会报错
/etc/init.d/dnsmasq start
dnsmasq: setting capabilities failed: Operation not permitted
而在实体机上就不会有这个问题。可以看到,dnsmasq 默认是使用 nobody 用户起的服务
# ps axuw | grep dnsmasq
nobody 19846 0.0 0.0 11180 676 ? S 16:56 0:00 /usr/sbin/dnsmasq
zhongwei 19937 0.0 0.0 103196 772 pts/1 S+ 16:56 0:00 grep dnsmasq
参考 dnsmasq: setting capabilities failed: Operation not permitted 只要把配置文件 /etc/dnsmasq.conf 中的 user 改成 root 即可正常启动。 但是在生产环境中,这种做法就很危险。
参考
微信关注我哦 👍
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式
谈笑风生
PowerShell 8年前