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

通过,dns,实现,可靠,负载,均衡,访问,提速 · 浏览次数 : 0

小编点评

**DNS简介** DNS (Domain Name System) 是一个分布式、分层次的主机名管理架构,用于将主机名的域名解析成 IP 地址。它是一个网络服务,提供以下功能: - 将域名转换为 IP 地址 - 缓存域名信息 - 分发域名信息 **DNS工作原理** 1. 用户通过域名名称访问互联网。 2. DNS 查询器查询本地 DNS 服务器。 3.本地 DNS 服务器查询互联网 DNS 服务器。 4. 互联网 DNS 服务器查询域名记录服务器。 5. 记录服务器返回 IP 地址。 **配置步骤** 1. 安装 DNS 服务器软件,例如 BIND。 2. 配置 DNS 服务器,设置域名、IP 地址和端口。 3. 启动 DNS 服务器。 **问题解决方案** 如果使用 `ping` 命令测试域名,可能出现点问题,因为它尝试从多个 DNS 服务器查询 IP 地址,并可能遇到网络问题。 **其他信息** - DNS 服务器使用树状结构存储域名记录,以便快速查找。 - 每个域名记录包含一个或多个 IP 地址。 - DNS 服务器可以使用多种协议,包括 TCP 和 UDP。

正文

https://www.jianshu.com/p/251811ef1405

 

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实现高可靠的负载均衡和访问提速相似的内容:

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

https://www.jianshu.com/p/251811ef1405 1. DNS简介 DNS (Domain Name System,域名系统),其主要作用就是将主机名解析成ip地址的过程,完成了从域名到主机识别ip地址之间的转换。 DNS是一个分布式、分层次的主机名管理架构,通过配置DN

[转帖]什么是负载均衡?DNS如何实现负载均衡?

https://blog.csdn.net/weixin_53018687/category_11107683.html 在配置域名解析的时候,我们可以将一个域名指向多个IP吗?答案是可以的,这也是我们通过DNS实现负载均衡的常见做法。 一、什么是负载均衡? 一些大型的视频、游戏网站或应用,每时每刻

[转帖]TCP流量控制_(滑动窗口)

一、TCP vs. UDP TCP可提供可靠的数据传输而UDP无法做到,那我们为什么还用UDP? ·使用UDP传送单条消息的开销要比TCP小 ·响应式通信,UDP的速度要比TCP快。 DNS是应用UDP的绝好例子。 但使用UDP又需要可靠性保证的应用程序必须自行实现可靠性保障功能。 如果需要更高级的

[转帖]《Linux性能优化实战》笔记(十九)—— DNS 解析原理与故障案例分析

一、 域名与 DNS 解析 域名主要是为了方便让人记住,而 IP 地址是机器间的通信的真正机制。以 time.geekbang.org 为例,最后面的 org 是顶级域名,中间的 geekbang 是二级域名,而最左边的 time 则是三级域名。点(.)是所有域名的根,所有域名都以点作为后缀。 把域

【转帖】通过docker配置DNS服务

https://blog.whsir.com/post-3185.html 在办公室开发人员经常会测试所写的页面,每次都要输入对应的IP地址或者更改hosts,为了让开发大爷省心,不如搭建一个dns服务,将所需要测试的网页直接解析成域名,让开发大爷自己选域名,想用啥就用啥,我这里通过docker配置

[转帖]通过acme 协议生成免费的证书.

https://zhuanlan.zhihu.com/p/377191119 Authentication Credential Management Extension 环境介绍: 服务器:阿里云 DNS解析: dnspod 操作过程如下:(以下操作过程建议在root下执行) 1.下载脚本并执行安

[转帖]通过Shell脚本自动监控JAVA进程中线程cpu使用率

https://gitee.com/jialy/auto-monitor-java-process/tree/master 本文主要介绍在 show-busy-java-threads.sh 脚本的功能基础上,通过 process-cpu-monitor.sh 脚本实现Linux平台上Java进程或

[转帖]通过yum展示安装包依赖关系,下载rpm包

https://www.cnblogs.com/hellxz/p/13212392.html 背景 平时测试环境中,服务器是可以访问外网的,而在内网环境,想要安装一些软件,比如docker,就需要离线安装,需要提前准备好需要的rpm安装包以及其依赖包 本文记录下如何使用yum展示软件包的依赖关系,以

[转帖]通过 SSH 在远程 Linux 系统上执行命令

https://linux.cn/article-15263-1.html 通过安全的网络连接在远程计算机上调用命令或程序。 有一天,我正在测试如何在 将文件或目录复制到多个位置和系统时保持完整的文件权限。当我想检查远程系统上的文件权限时,我必须通过 SSH 登录它并检查属性。从远程系统多次登录和注

[转帖]通过yum命令只下载rpm包

https://www.cnblogs.com/sunbines/p/16404334.html 正文 遇到服务器没有网络的情况下部署环境,或者创建自己的 yum 仓库等。每次都是在网上搜搜搜,都是五花八门,自己整理了下自己用到的以下三种方式,这里没有太多废话,只是如何安装并示例经常用到的方式,如果