美文网首页网络
通过DNS实现高可靠的负载均衡和访问提速

通过DNS实现高可靠的负载均衡和访问提速

作者: 右耳菌 | 来源:发表于2022-08-07 13:51 被阅读0次

    1. DNS简介

    DNS (Domain Name System,域名系统),其主要作用就是将主机名解析成ip地址的过程,完成了从域名到主机识别ip地址之间的转换。

    1. DNS是一个分布式、分层次的主机名管理架构,通过配置DNS服务器地址,主机不需要知道对应的ip地址就能通过主机名的形式访问互联网。
    2. DNS利用类似倒状树的目录结构将主机名的管理分配在不同层级的DNS服务器当中,经过分层管理,每一级DNS服务器负责部分域名信息,这就减轻了DNS服务器的负载,同时也方便记录的更新同步。
    3. DNS是一个网络服务,因此就有对应的端口,其端口号为53号。DNS查询的时候,定以udp这个较快速的数据传输协议来查询的,但万一没有方法查询到完整的信息时,就会再次以tcp这个协定来重新查询,DNS服务在启动的时候会同时开启tcp的53号端口和udp的53号端口。
    4. DNS在进行区域传输的时候使用TCP协议,其他时候则使用UDP协议。
    5. FQDN(Full Qualified Domain Name):完整主机名,是有主机名和域名构成。例如www.baidu.com当中,www就是web网站服务器的主机名,baidu.com就是域名,主机名和域名之间用实心点号来表示。
      6.DNS是基于c/s架构(多数基于套接字架构的C/S架构)﹐对于每一级域名长度的限制是63个字符,域名总长度则不超过253个字符。
      7.DNS系统记录的信息非常多,不过重点就两个:一个是记录服务器所在的NS(name server)标志,另一个是记录主机名对应的A(address)标志。

    DNS的域名结构

    1. DNS的域名是倒状的树状结构,在最顶层的是一个根服务器,它主要负责顶级域名的管理。
    2. 一级域名共分为三类,组织域、国家域和反响域,最多可以有127级域名。
    3. 每一级的域名服务器只负责对应下级的域的管理,其中根节点是分布在世界各地的13台服务器组成,其中10台位于美国地区,另外3台设置于英国、瑞典和日本。

    2. DNS工作原理

    DNS解析域名到IP需要经过三个阶段:

    1. 本地DNS缓存解析。
    2. 本地DNS服务器解析,递归查询。
    3. 根域及各级域名服务器解析,迭代查询。

    3. DNS负载均衡

    DNS负载均衡技术的实现原理是:在DNS服务器中为同一个主机名配置多个IP地址,多个IP地址以轮询的方式选择。

    • 操作系统:Ubuntu 18.04
    • DNS服务器软件:bind9

    -- 下方内容来自网易Java架构师课程截图

    使用DIG工具查看对域名yes.163.com的解析:



    4. DNS与其他负载均衡工具对比

    1. DNS负载均衡:
      对同一个请求的域名,映射为不同的服务器IP地址。

    2. HTTP重定向:
      HTTP代理(比如浏览器)向Web服务器请求某一url后,Web服务器根据http响应头信息中的location标记来返回一个新的url,然后http代理继续请求访问这个新的url。

    3. 反向代理负载均衡:
      反向代理指的是以代理服务器来接收对Web服务器的连接请求,然后转发给内部网络中不同的Web服务器,并将从Web服务器请求得到的结果返回给请求连接的客户端,以Nginx为代表。

    4. NAT负载均衡:
      将公网地址映射为多个私网地址,解决IP地址紧张,不想让外部网络知道内部网络结构的问题。

    5. CDN:
      CDN即Content Delivery Network,内容分发网络。通过发布机制将内容同步到大量的缓存节点,并在DNS服务器上进行扩展,找到离用户最近的缓存节点作为服务提供节点。

    6. 混合型负载均衡:
      在有些大型网络,由于多个服务器群内硬件设备、各自的规模、提供的服务等的差异,可以考虑给每个服务器群采用最合适的负载均衡方式,然后又在这多个服务器群间再一次负载均衡或群集起来以一个整体向外界提供服务(即把这多个服务器群当做一个新的服务器群),从而达到最佳的性能。


    实操例子

    1. 安装bind9
    sudo yum -y install bind
    

    安装完之后可以使用

    whereis named.conf
    

    查看配置文件地址,我这里使用的是Fedora来操作的,所以这个配置文件的地址在 /etc/named.conf,之前看视频看到有的人的配置文件是拆分开的,如 named.conf.local 和 named.conf.options,但是我这边是合并在一起的,具体我也不是很清楚,但是影响不是很大,反正都是修改相应的部分。

    2. 修改resolv.conf,使其DNS解析指向自身
    sudo emacs /etc/resolv.conf
    

    我这里是使用了emacs来编辑,如果没有安装emacs,也可以使用vim来编辑,不影响

    nameserver 192.168.1.7 # 这里设置本地DNS解析指向本机IP,具体需要替换成自己的IP哦
    search localdomain
    
    3. 修改named.conf
    sudo emacs /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.
    //
    
    options {
        listen-on port 53 { 127.0.0.1; 192.168.1.7; }; // 这里是修改过的内容
        listen-on-v6 port 53 { ::1; };
        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";
        secroots-file   "/var/named/data/named.secroots";
        recursing-file  "/var/named/data/named.recursing";
        allow-query     { localhost; };
    
        /* 
         - 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-validation yes;
    
        managed-keys-directory "/var/named/dynamic";
        geoip-directory "/usr/share/GeoIP";
    
        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";
    
        /* https://fedoraproject.org/wiki/Changes/CryptoPolicy */
        include "/etc/crypto-policies/back-ends/bind.config";
    };
    
    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 "lazyfennec.cn" {
         type master;
         file "/etc/bind/db.lazyfennec.cn";
    };
    
    4. 创建 db.lazyfennec.cn
    cd /etc
    sudo mkdir bind
    cd /bind
    sudo emacs db.lazyfennec.cn
    

    然后编辑内容即可

    $TTL 604800
    @    IN SOA lazyfennec.cn   root.localhost. (
                            1   ; serial
                            604800  ; refresh
                            1H  ; retry
                            1W  ; expire
                            3H) ; minimum
    ;
    @       IN  NS localhost.
    lazyfennec.cn   IN  NS 192.168.1.7
    
    yes     IN  A 192.168.1.7
    yes     IN  A 192.168.1.8
    yes     IN  A 192.168.1.9
    

    保存退出

    5. 测试启动一下bind
    sudo systemctl start named
    

    测试一下

    dig yes.lazyfennec.cn
    

    结果


    但是我这边有个问题,好像使用ping的时候,会出现点问题,这里容我后续再去了解验证一下,如果有哪位大佬知道,希望可以在下方留言评论,非常感谢!!!


    如果觉得有收获,欢迎点赞和评论,更多知识,请点击关注查看我的主页信息哦~

    相关文章

      网友评论

        本文标题:通过DNS实现高可靠的负载均衡和访问提速

        本文链接:https://www.haomeiwen.com/subject/nrqbwrtx.html