网络

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

2022-08-07  本文已影响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地址以轮询的方式选择。

-- 下方内容来自网易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的时候,会出现点问题,这里容我后续再去了解验证一下,如果有哪位大佬知道,希望可以在下方留言评论,非常感谢!!!


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

上一篇下一篇

猜你喜欢

热点阅读