接着原来《DNS原理与应用》的文章,本章内容主要通过实现DNS的主从,转发,及基于域名解析不同的ip实现后端服务负载均衡的效果。最后再实现DNS的高级功能:类似CDN原理实现基于IP实现区域分流负载,通过以上内容更好地理解DNS的工作原理以及拓展高性能的web服务实现思路

利用DNS解析实现简单的web负载均衡

我们常说的负载均衡解决方案大多是通过nginx、lvs,haporxy等实现业务或者流程的负载,通过DNS也可以实现简单的负载功能,并且在用户请求解析的过程中就能实现负载,DNS默认会使用轮询的机制轮流将请求解析到后端不同主机:这样就可以将同一站点域名解析到不同的主机IP,让各主机提供相同的服务。在DNS中配置如下即可实现:

  1. webserver IN A 192.168.214.135
  2. webserver IN A 192.168.214.136
  3. www IN CNAME webserver
  4. @ IN A 192.168.214.135
  5. @ IN A 192.168.214.136

上面的配置将一个站点部署在两台主机上,通过定义别名DNS会轮询解析请求到这两台主机上

解析测试:

  1. [root@yufu ~]# curl http://yufu.com/index.html
  2. <html>
  3. <title>Welcome to nginx!</title>
  4. <h1>Welcome to nginx!</h1>
  5. this is test page
  6. ip:192.168.214.135
  7. </html>
  8. [root@yufu ~]# curl http://www.yufu.com/index.html
  9. <html>
  10. <head>
  11. <h1>Welcome to nginx!</h1>
  12. this is test page
  13. IP: 192.168.214.136
  14. </body>
  15. </html>

DNS负载缺点:为了降低DNS请求的次数以提高訪问效率。浏览器经常缓存了DNS查询的结果。假设一个IP处的服务失效。那么浏览器可能仍会依据DNS缓存中所记录的信息向该不可用的服务发送请求(不同的浏览器可能有不同的行为)。尽管说整个服务仅仅有一处IP所相应的服务失效了,可是从用户的角度看来该站点已经不可訪问。因此基于DNS的负载平衡方案并不能作为一个独立的负载平衡解决方式来提供高可用性的保障,而是作为其他负载平衡解决方式的补充方案来使用。

DNS主从同步

要实现DNS的主从复制,必须要在主DNS区域解析库文章中定义从服务器地址:

思路:

  1. 主DNS解析库文件中定义从服务器信息
  2. 从服务器在区域库定义文件中添加要解析的区域信息,大致与主DNS上相同,但是type是为slave;要指定master是谁,以及同步的解析库文件存放位置
  3. 关于安全考虑:在主从的named.conf文件中要添加访问控制:允许区域传送的主机-白名单(allow-transfer {})

实现上面的过程:

  • 主DNS服务器定义从服务器信息/var/named/gudaoyufu.com.zone
  1. $TTL 1D
  2. @ IN SOA ns1.yufu.com. amin.yufu.com (
  3. 2018051503
  4. 1H
  5. 5M
  6. 7D
  7. 1D )
  8. IN NS ns1.yufu.com.
  9. IN NS ns2.yufu.com. #定义从DNS
  10. IN MX 10 mx1
  11. IN MX 20 mx2
  12. ns1 IN A 192.168.214.128
  13. ns2 IN A 192.168.214.134 #定义从DNS的IP地址
  14. mx1 IN A 192.168.214.189
  15. mx2 IN A 192.168.214.190
  16. webserver IN A 192.168.214.135
  17. webserver IN A 192.168.214.136
  18. www IN CNAME webserver
  19. @ IN A 192.168.214.135
  20. @ IN A 192.168.214.136
  21. ;* IN CNAME webserver
  • 在从服务器中定义区域解析信息 /etc/named.rfc1912.zones
  1. zone "yufu.com" IN {
  2. type slave;
  3. masters { 192.168.214.128; };
  4. file "slaves/gudaoyufu.com.zone";
  5. };

注意:从服务器上定义的域必须要与主服务器上相同,从的type类型为:slave,必须要是指定master是谁,否则找不到同步对象,定义的同步解析库文件存放文章默认在/var/named/slaves目录下

  • 在主从的named.conf文件中添加要、区域库传送控制,以保障服务器的信息安全:这个的作用是干嘛的?用一个示列一下就看明白

不做区域传送控制前,用任意一台主机都可以获取到DNS区域解析库文件中的服务器信息

  1. [root@localhost html]# dig -t axfr yufu.com @192.168.214.128
  2. ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.5 <<>> -t axfr yufu.com @192.168.214.128
  3. ;; global options: +cmd
  4. yufu.com. 86400 IN SOA ns1.yufu.com. amin.yufu.com.yufu.com. 2018051504 3600 300 604800 86400
  5. yufu.com. 86400 IN A 192.168.214.135
  6. yufu.com. 86400 IN A 192.168.214.136
  7. yufu.com. 86400 IN NS ns1.yufu.com.
  8. yufu.com. 86400 IN NS ns2.yufu.com.
  9. yufu.com. 86400 IN MX 10 mx1.yufu.com.
  10. yufu.com. 86400 IN MX 20 mx2.yufu.com.
  11. mx1.yufu.com. 86400 IN A 192.168.214.189
  12. mx2.yufu.com. 86400 IN A 192.168.214.190
  13. ns1.yufu.com. 86400 IN A 192.168.214.128
  14. ns2.yufu.com. 86400 IN A 192.168.214.134
  15. webserver.yufu.com. 86400 IN A 192.168.214.135
  16. webserver.yufu.com. 86400 IN A 192.168.214.136
  17. www.yufu.com. 86400 IN CNAME webserver.yufu.com.
  18. yufu.com. 86400 IN SOA ns1.yufu.com. amin.yufu.com.yufu.com. 2018051504 3600 300 604800 86400
  19. ;; Query time: 2 msec
  20. ;; SERVER: 192.168.214.128#53(192.168.214.128)
  21. ;; WHEN: Sat May 19 20:13:07 2018
  22. ;; XFR size: 15 records (messages 1, bytes 344)

添加传送控制,只允许主从间传送,定义规则:allow-transfer { 192.168.214.134; };

  1. [root@localhost html]# dig -t axfr yufu.com @192.168.214.128
  2. ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.5 <<>> -t axfr yufu.com @192.168.214.128
  3. ;; global options: +cmd
  4. ; Transfer failed.

看到区别了吧,如果不做限制,任何人可以获取到服务器的部署情况这是一个很大的安全隐患。

在主DNS服务器中只允许从服务器传送,而对于从服务器,则要拒绝任何主机进行传送

最终在/etc/named.conf中配置如下:

  • 主:allow-transfer { 192.168.214.134; };

  • 备:allow-transfer { none; };

配置好主从服务器后检查配置有没有问题,执行:** named-checkconf**

没问题后重启或重载服务器:rndc reload

如果顺利的话,在从服务器的/var/named/slaves目录中已经有了主服务器中的gudaoyufu.com.zone文件

  1. [root@dns-slave ~]# ls /var/named/slaves/
  2. 1 gudaoyufu.com.zone

从服务器已经同步成功,这时可以关闭主服务器,测试解析,先将测试的客户端添加DNS地址

  1. echo "nameserver 192.168.214.128" > /etc/resolv.conf
  2. echo "nameserver 192.168.214.134" > /etc/resolv.conf

关闭主DNS服务器: systemctl stop named

在客户端请求www.yufu.com 如下:

  1. [root@yufu ~]# curl http://www.yufu.com/index.html
  2. <html>
  3. <title>Welcome to nginx!</title>
  4. <h1>Welcome to nginx!</h1>
  5. this is test page
  6. ip:192.168.214.135
  7. </html>
  8. [root@yufu ~]# curl http://www.yufu.com/index.html
  9. <html>
  10. <head>
  11. this is test page
  12. IP: 192.168.214.136
  13. </body>
  14. </html>

DNS转发

如果客户端向DNS服务器发起的解析请求内容不在本服务器上,那么可以设置DNS转发,将解析请求转发到其他DNS服务器。DNS转发分两种情况,一种是只要本地没有解析内容的都转发到指定的DNS服务器上这种转发叫(全局转发),另一种是进行匹配转发,只要解析请求符合定义的某个域,就把该请求转发到指定的DNS服务器上这种转发叫(区域转发):

要实现上面的过程,要在两台DNS上做相应的配置:

  • 在主DNS上要定义转发规则,
  • 开启请求者做递归,否则转发请求不予进行

recursion yes;

  • 第二台DNS上要有相应的域解析库内容

  • 注意:关闭dnssec功能:

    dnssec-enable no;

    dnssec-validation no;

配置主DNS转发规则

(1) 全局转发: 对非本机所负责解析区域的请求,全转发给指定的服务器,在/etc/named.conf中options定义

  1. forward first|only;
  2. forwarders { ip;};

(2) 特定区域转发:仅转发对特定的区域的请求,比全局转发优先级高,在 /etc/named.rfc1912.zones中定义区域信息

  1. zone "ZONE_NAME" IN {
  2. type forward;
  3. forward first | only;
  4. forwarders { ip;};
  5. };

下面分别实现这两种转发方式,先看第一种转发:全局转发

全局转发

配主DNS配置文件/etc/named.conf

  1. forward only;
  2. forwarders { 192.168.214.134; };
  3. dnssec-enable no;
  4. dnssec-validation no;

**注意:recursion yes; 主DNS必须要开启递归查询,否则解析请求转发不出去 **

接收转发DNS端配置:

定义区域文件信息:vim /etc/named.rfc1912.zones

  1. zone "abc123.com" IN {
  2. type master;
  3. file "abc123.com.zone";
  4. };

编写区域解析库文件:vim /var/named/abc123.com.zone

  1. $TTL 1D
  2. @ IN SOA ns1.abc123.com. amin.abc123.com (
  3. 2018051507
  4. 1H
  5. 5M
  6. 7D
  7. 1D )
  8. IN NS ns1.abc123.com.
  9. ns1 IN A 192.168.214.134
  10. www IN A 192.168.214.133
  11. @ IN A 192.168.214.133

重载DNS并测试:

rndc reload

dig测试:

  1. [root@localhost ~]# dig www.abc123.com @192.168.214.128
  2. ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.el6_9.5 <<>> www.abc123.com @192.168.214.128
  3. ;; global options: +cmd
  4. ;; Got answer:
  5. ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 11968
  6. ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
  7. ;; QUESTION SECTION:
  8. ;www.abc123.com. IN A
  9. ;; ANSWER SECTION:
  10. www.abc123.com. 86268 IN A 192.168.214.133
  11. ;; AUTHORITY SECTION:
  12. abc123.com. 86268 IN NS ns1.abc123.com.
  13. ;; ADDITIONAL SECTION:
  14. ns1.abc123.com. 86268 IN A 192.168.214.134
  15. ;; Query time: 1 msec
  16. ;; SERVER: 192.168.214.128#53(192.168.214.128)
  17. ;; WHEN: Sun May 20 02:01:31 2018
  18. ;; MSG SIZE rcvd: 82

访问测试

  1. [root@localhost ~]# curl http://www.abc123.com/index.html
  2. <html>
  3. <body>
  4. www.abc123.com
  5. IP: 192.168.214.133
  6. </body>
  7. </html>
  8. [root@localhost ~]# cat /etc/resolv.conf
  9. nameserver 192.168.214.128

区域转发

设置区域转发要在主DNS的named.rfc.1912.zones文件中定义区域信息:

  1. zone "abc123.com" IN {
  2. type forward;
  3. forward only;
  4. forwarders { 192.168.214.134; };
  5. };

设置后情况一下DNS缓存再重载服务:

rndc flush

rndc reload

测试访问

  1. [root@localhost ~]# curl http://www.abc123.com/index.html
  2. <html>
  3. <body>
  4. www.abc123.com
  5. IP: 192.168.214.133
  6. </body>
  7. </html>

智能DNS

智能DNS解析根据客户机IP地址归属地区域进行区别响应,这里根据ip地址网段实现按ip地址区域解析的过程:

  • 在DNS的主配置文件中定义ACL规则,注意,ACL规则必须定义在named.conf的最前面;

    acl是根据从上到下顺序查找匹配的,acl中ip存在包含关系,应该小范围地址段先定义,大网段在后面,如果大网段在上面会使下面有包含关系的小网段不生效
  1. acl beijing {
  2. 192.168.214.0/24;
  3. };
  4. acl jiangsu {
  5. 172.20.110.0/24;
  6. };
  7. acl other {
  8. any;
  9. };
  • 定义解析库文件

为每个IP地址范围定义单独的解析库文件

  1. [root@dns-1 named]# cp gudaoyufu.com.zone gudaoyufu.com.zone.beijing
  2. [root@dns-1 named]# cp gudaoyufu.com.zone gudaoyufu.com.zone.jiangsu

记得修改解析库文件的属组为named

  • 将acl与各区域解析库文件关联起来:使用view

注意:一旦采用view,必须把所以的区域信息放在view语句块中,所以named.conf中的这段内容移动到named.rfc1912.zones中

  1. zone "." IN {
  2. type hint;
  3. file "named.ca";
  4. };
  • 创建view

先创建单独区域文件,在view中要指定

  1. [root@dns-1 named]# cp -p /etc/named.rfc1912.zones /etc/named.rfc1912.zones.beijing
  2. [root@dns-1 named]# cp -p /etc/named.rfc1912.zones /etc/named.rfc1912.zones.jiangsu

在named.rfc1912.zones.beijing单独的文件中定义如下:


  1. zone "yufu.com" IN {
  2. type master;
  3. file "gudaoyufu.com.zone.beijing";
  4. };

在named.rfc1912.zones.jiangsu单独的文件中定义如下:

  1. zone "yufu.com" IN {
  2. type master;
  3. file "gudaoyufu.com.zone.jiangsu";
  4. };

在named.conf中定义view

  1. view beijngview {
  2. match-clients {beijing;};
  3. include "/etc/named.rfc1912.zones.beijing";
  4. };
  5. view jiangsuview {
  6. match-clients {jiangsu;};
  7. include "/etc/named.rfc1912.zones.jiangsu";
  8. };
  9. view otherview {
  10. match-clients {other;};
  11. include "/etc/named.rfc1912.zones";
  12. };

这里的other就使用默认的区域文件,

上面的view信息也可以直接将etc/named.rfc1912.zones.jiangsu中的内容直接写在view块中

DNS的主从,转发与负载功能的更多相关文章

  1. DNS的主从、子域授权和转发服务器

    DNS的主从.子域授权和转发服务器 主从DNS 注意: 1.全局配置options{} 里面的内容,其中 listen-on port 53 {any or local:}:或者直接注释掉,或删掉 a ...

  2. LVS + keepalived + nginx + tomcat 实现主从热备 + 负载均衡

    前言 首先声明下,由于这两天找资料,看了不少博客 ,但是出于不细心,参考者的博客地址没有记录下来,所有文中要是出现了与大家博客相同的地方,那么请大家在评论区说明并附上博客地址,我好引用进来:这里表示抱 ...

  3. iptables常用规则:屏蔽IP地址、禁用ping、协议设置、NAT与转发、负载平衡、自定义链

    iptables常用规则:屏蔽IP地址.禁用ping.协议设置.NAT与转发.负载平衡.自定义链 时间 -- :: IT社区推荐资讯 原文 http://itindex.net/detail/4772 ...

  4. 代码生成工具Database2Sharp中增加视图的代码生成以及主从表界面生成功能

    在代码生成工具的各种功能规划中,我们一向以客户的需求作为驱动,因此也会根据需要增加一些特殊的功能或者处理.在实际的开发中,虽然我们一般以具体的表进行具体业务开发,但是有些客户提出有时候视图开发也是很常 ...

  5. DNS正、反向解析+负载均衡+智能DNS+密钥认证

    主机名 IP 软件包 系统版本 内核版本 实验环境 master 192.168.30.130 bind.x86_64 32:9.8.2-0.17.rc1.el6_4.6 bind-chroot.x8 ...

  6. 浅谈一个网页打开的全过程(涉及DNS、CDN、Nginx负载均衡等)

    1.概要 从用户在浏览器输入域名开始,到web页面加载完毕,这是一个说复杂不复杂,说简单不简单的过程,下文暂且把这个过程称作网页加载过程.下面我将依靠自己的经验,总结一下整个过程.如有错漏,欢迎指正. ...

  7. 【转】浅谈一个网页打开的全过程(涉及DNS、CDN、Nginx负载均衡等)

    1.概要 从用户在浏览器输入域名开始,到web页面加载完毕,这是一个说复杂不复杂,说简单不简单的过程,下文暂且把这个过程称作网页加载过程.下面我将依靠自己的经验,总结一下整个过程.如有错漏,欢迎指正. ...

  8. powershell加win的dns服务器,解决网站负载均衡问题

    用我发明的powershell填坑法,加windows的dns服务器.从调整dns服务器解析ip时间段的角度,解决网站负载均衡问题. ------------------------win2012r2 ...

  9. (转)iptables常用规则:屏蔽IP地址、禁用ping、协议设置、NAT与转发、负载平衡、自定义链

    转自:http://lesca.me/archives/iptables-examples.html 本文介绍25个常用的iptables用法.如果你对iptables还不甚了解,可以参考上一篇ipt ...

随机推荐

  1. Qt 串口连接

    Qt 串口连接 使用 Qt 开发上位机程序时,经常需要用到串口,在 Qt 中访问串口比较简单,因为 Qt 已经提供了 QSerialPort 和 QSerialPortInfo 这两个类用于访问串口. ...

  2. 使用@Cacheable 踩过的坑

    public class XXX{ @Resourceprivate XXX self;//@Cacheable通过内部调用将不会使用缓存,从Spring4.3开始可以通过注入self,再通过self ...

  3. Hibernate课程 初探多对多映射2-2 创建持久化类和映射文件

    生成实体类 和 cfg.xml配置 cfg.xml 参照一对多映射 实体类如下: Project 类 package com.ddwei.entity; import java.util.HashSe ...

  4. jQuery设置全选和全反选

    HTML 代码: <input type="checkbox" id="allChecked" onclick="setAllChecked(t ...

  5. input输入框不能获得焦点

    今天在ipad上遇到一个问题:jquery 调用 $(id).focus() 方法,失效,不能弹出键盘获得输入的焦点. 开始以为是 $(id).focus() 方法的问题,然后就试着用原声的docum ...

  6. HTML图片映射实用

    大图的不同点击区域实现不同的超链接: <img src="planets.gif" width="145" height="126" ...

  7. 工作流常使用API

    记录实际开发中常使用到的API CreateProcess 在工作流开始之前,创建一个新的工作流 Wf_engine.CreateProcess (itemtype in varchar2,    - ...

  8. Mautic-2.2.0 (Ubuntu 16.04)

    平台: Ubuntu 类型: 虚拟机镜像 软件包: mautic-2.2.0 business intelligence commercial ecommerce mautic open-source ...

  9. 通过CSS3实现:鼠标悬停图片360度旋转效果

    效果很好玩,代码很简单: 效果: 鼠标放置在图片上:360度顺时针旋转 鼠标离开图片:图片260度逆时针旋转 只要将下面代码拷贝过去,并将图片改成你想要的就可以看到效果 <!doctype ht ...

  10. vm中efi模式安装windows10

    选择dvd: 界面出现“Press any key to boot from CD or DVD”时,再迅速按下任意键就OK了.