热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

负载均衡中间件(二)LVS负载均衡软件和基于云计算平台的架构

一、LVS简介LVS全称LinuxVirtualServer,即Linux虚拟服务器。它是我国章文嵩博士的一个开源项目。在linux内核2.6中,已经成为了内核的一部分,在此之前的

 


一、LVS简介

LVS全称Linux Virtual Server,即Linux虚拟服务器。它是我国章文嵩博士的一个开源项目。在linux内核2.6中,已经成为了内核的一部分,在此之前的内核需要重新编译内核。

主要用于服务器的负载均衡,它工作在网络4层,开源实现高性能,搞可用的服务器集群技术。它廉价,可把许多低性能的服务器组合在一起形成一个超级服务器。它易用,配置简单,且有多种负载均衡方法。它稳定可靠,即使在集群的服务器中某台服务器无法正常工作,也不影响整体效果。另外扩展性非常好。

针对高伸缩、高可用网络服务的需求,我们给出了基于IP层和基于内容请求分发的负载平衡调度解决方法,并在linux内核中实现了这些方法,将一组服务器构成一个实现可伸缩的、高可用网络服务的虚拟服务器。

技术分享图片

 

 

虚拟服务器的体系结构如上图所示,一组服务器通过高速的局域网或地理分布的广域网相互连接,在它们的前端有一个负载均衡调度器(Load Balancer)。负载均衡调度器能无缝地将网络请求调度到真实服务器上,从而使得服务器集群的结构对客户是透明的,客户访问集群系统提供的网络服务就像访问一台高性能、高可用的服务器一样。由于我们的负载调度技术是在linux内核中实现的,我们称之为linux虚拟服务器。

 

项目目标:使用集群技术和Linux操作系统实现一个高性能、高可用的服务器,它具有很好的伸缩性、可靠性和可管理性。

目前,LVS项目已提供了一个实现可伸缩网络服务的Linux Virtual Server框架,如图所示。

IPVS:提供了含有三种IP负载均衡技术的IP虚拟服务器软件。

KTCPVS:基于内容请求分发的内核Layer-7交换机。

Cluster Management:集群管理软件。

技术分享图片

可用利用LVS框架实现高可伸缩、高可用的Web、Cache、Mail和Media等网络服务;在此基础上,可以开发支持庞大用户数、高可伸缩的、高可用的电子商务应用。

 

网络分层

网络七层

OSI七层网络协议,主要是:应用层(Application)、表示层(Presentation)、会话层(Session)、传输层(Transport)、网络层(Network)、数据链路层(Data link)、物理层(Physical)。Nginx工作在7层网络模型下。

技术分享图片

 

 IP虚拟服务器软件IPVS

在调度的实现技术中,IP负载均衡技术是效率最高的。IPVS软件实现了三种IP负载均衡技术,它们大致原理如下:

Virtual Service via Direct Routing(VS/DR)

VS/DR通过改写请求报文的MAC地址,将请求发送到真实服务器,而真实服务器将响应直接返回给客户。同VS/TUN技术一样,VS/DR技术可极大地提高集群的伸缩性。这种方法没有IP隧道的开销,对集群中的真实服务器也没有必须支持IP隧道协议的要求,但是要求调度器与真实服务器都有一块网卡连接在同一物理网段上。

技术分享图片

 

Virtual Server via Network Address Translation(VS/NAT)

通过网络地址转换,调度器重写了请求报文的目标地址,根据预设的调度算法,将请求分派给后端的真实服务器;真实服务器的响应报文通过调度器时,报文的源地址被重写,再返回给客户,完成整个负载调度过程。

技术分享图片

 

 

DR技术是把请求负载给RS1、RS2、RS3之后,直接响应客户端。改写的是MAC地址,响应报文直接响应客户端。

NAT技术是把响应给负载均衡服务器,负载均衡服务器重写源地址再相应给客户端。改写的是IP地址,响应报文响应负载均衡服务器,负载均衡服务器重写响应报文的源地址,再发给客户端。

 

Virtual Server via IP Tunneling(VS/TUN)

采用NAT技术时,由于请求和响应报文都必须经过调度器地址重写,当客户请求越来越多时,调度器的处理能力将成为瓶颈。为了解决这个问题,调度器把请求报文通过IP隧道转发至真实服务器,而真实服务器将响应直接返回给客户,所以调度器只处理请求报文。由于一般网络服务应答比请求报文大许多,采用VS/TUN技术后,集群系统的最大吞吐量可以提高10倍。

技术分享图片

 

 IPVS调度算法

针对不同的网络服务需求和服务调度器配置,IPVS调度器实现了如下八种负载调度算法:



  • 轮叫(Round Robin)

  • 加权轮叫(Weight Round Robin)

  • 最少链接(Least Connections)

  • 加权最少链接

  • 基于局部性的最少链接

  • 带复制的基于局部的最少链接

  • 目标地址散列

  • 源地址散列

 

内核Layer-7交换机KTCPVS

在基于IP负载调度技术中,当一个TCP连接的初始化SYN报文到达时,调度器就选择一台服务器,将报文转发给它。此后通过查发报文的IP和TCP报文头地址,保证此连接的后继报文被转发到该服务器。这样,IPVS无法检查到请求的内容再选择服务器,这就要求后端服务器组提供相同的服务,不管请求被发送到哪一台服务器,返回结果都是一样的。但是,在有些应用中后端服务器功能不一,有的提供HTML文档,有的提供图片,有的提供CGI,这就需要基于内容的调度(Content-Based Schdeduling)。

由于用户空间TCP Gateway的开销太大,我们提出了在操作系统的内核中实现Layer-7交换方法,来避免用户空间与核心空间的切换和内存复制的开销。在linux操作系统的内核中,我们实现了Layer-7交换,称之为KTCPVS(Kernel TCP Virtual Server)。

虽然应用层交换处理复杂,它的伸缩性有限,但应用层交换带来以下好处:



  • 相同页面的请求被发送到同一服务器,可以提高单台服务器的Cache命中率。

  • 一些研究表明Web访问流中存在局部性。Layer-7交换可以充分利用访问的局部性,将相同类型的请求发送到同一台服务器,使得每台服务器收到的请求具有更好的相似性,可进一步提高但台服务器的Cache命中率。

  • 后端服务器可运行不同类型的服务,如文档服务,图片服务,CGI服务和数据库服务等。

 

LVS集群特点

功能



  • 有实现三种IP复杂均衡技术和八种连接调度算法的IPVS软件。

  • 在IPVS内部实现上,采用了高兴的Hash函数和垃圾回收机制,能正确处理所调度报文相关的ICMP消息。

  • 虚拟服务的设置数目没有限制,每个虚拟服务都有自己的服务器。

  • 它支持持久的虚拟服务(如HTTP COOKIE和HTTPS等需要该功能支持),并提供详尽的统计数据,如连接的处理速率和报文的流量等。

  • 针对大规模拒绝处理工具,实现了三种防卫策略。

  • 有基于内容请求分发的应用层交换软件KTCPVS,它也是在Linux内核中实现。

  • 有相关的集群管理软件对资源进行监测,能及时将故障屏蔽,实现系统的高可用性。

  • 主、从调度器能周期性地进行状态同步,从而实现更高的可用性。

适用性

后端服务器可运行任何支持TCP/IP的操作系统,包括Linux,各种Unix,MAC/OS和Windows NT/2000等。负载调度器能够支持绝大多数的TCP和UDP协议。

性能

LVS服务器集群系统具有良好的伸缩性,可支持几百万个并发连接。配置100M网卡,采用VS/TUN或VS/DR调度技术,集群系统的吞吐量可高达1Gbits/s;如配置千兆网卡,则系统吞吐量可接近10Gbits/s。

可靠性

已在很多大型、关键性的站点得到很好应用,很多调度器运行一年多,未作一次重启。

软件许可证

LVS集群软件按GPL许可证发行的自由软件。

 

LVS与Nginx对比

技术分享图片

 

 


二、基于VIP 的keepalived高可用架构


keepalive简介

keepalived的作用是检测服务器的状态。如果有一台web服务器宕机,或工作出现故障,keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作,当服务器工作正常后keepalived自动将服务器加入到服务器集群中,这些工作全部自动完成。

特性



  • 配置文件简单

  • 稳定性强

  • 成本低廉

  • 应用范围广

  • 支持多种类型:主从模式、主主模式高可用,可根据业务场景灵活选择。


工作原理

keepalived内部工作分为以下几个部分:



  • WatchDog监控checkers和VRRP进程的状况

  • Checks负责真实服务器的健康检查healthchecking

  • VRRP Stack负责负载均衡器之间的失败切换

  • IPVS wrapper用来发送设定的规则到内核IPVS代码

  • Netlink Reflector用来设定VRRP的vip地址等

技术分享图片

 

 keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议。

VRRP根据优先级来确定虚拟路由器中每台路由器的角色(Master路由器或Backup路由器)。VRRP优先级的取值范围为0到255(数值越大,优先级越高),可配置的范围是1到254,优先级0为系统保留给路由器放弃Master位置时使用,255则是系统保留给IP地址拥有者使用。优先级越高,则越有可能成为Master路由器。当两台优先级相同的路由器同时竞争Master时,比较接口IP地址大小。接口地址大者当选为Master。

keepalived主要有三个模块,core、check和vrrp



  • core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析

  • check模块负责健康检查,包括常见的各种检查方式

  • VRRP模块是来实现VRRP协议的

 


应用场景

在网络层、数据链路层,运行着4个协议:



  • IP:互联网协议

  • ICMP:互联网控制报文协议

  • ARP:地址转换协议

  • RARP:反向地址转换协议

网络层场景

keepalived在网络层采用的最常见的工作方式是通过ICMP协议向服务器集群中的那个节点发送一个ICMP数据包(类似于ping实现的功能),如果某个节点没有返回响应数据包,那么认为此节点发生了故障,keepalived将报告次节点失效,并从服务器集群中剔除故障节点。

传输层场景

传输控制协议TCP可以提供可靠的数据传输服务、IP地址和端口代表TCP的一个连接端。要获得TCP服务,需要在发送机的一个端口上和接收机的一个端口上建立连接。

keepalived在传输层就是利用TCP协议的端口连接和扫描技术来判断集群点是否正常。比如,对于常见的web服务默认的80端口、SSH服务默认的22端口等,keepalived一旦在传输层探测到这些端口没有响应数据返回,就认为这些端口发生异常,然后强制将此端口对应的节点从服务器集群组中移除。

应用层场景

用户可自定义keepalived的工作方式,keepalived将根据用户的设定检测各种程序或服务是否运行正常,如果keepalived的检测结果与用户设定不一致时,keepalived将把对应的服务从服务器中移除。

 


高可用集群

集群是一组相互独立的、通过高速网络互联的计算机,它们构成了一个组,并以单一系统的模式加以管理。一个客户与集群相互作用时,集群像是一个独立的服务器。

通过集群技术,可以在付出较低成本的情况下获得在性能、可靠性、灵活性方面的相对较高的收益,其任务调度则是集群系统中的核心技术。

集群组成后,可以利用多个计算机和组合进行海量请求处理(负载均衡),从而获得很高的处理效率,也可以用多个计算机做备份(高可用),使得任何一个机器坏了整个系统还是能正常运行。集群在目前互联网公司是必备技术,极大提高了互联网业务的可能性和可缩放性。

 


高可用架构

HA,高可用性集群式通过系统的可靠性和可维护性来度量的。

工程上,通常用平均无故障时间(MTTF)来度量系统的可靠性,用平均维修时间(MTTR)来度量系统的可维护性。于是可用性被定义为:HA=MTTF/(MTTF+MTTR)*100%,即平均无故障时间/总时间,总时间=平均无故障时间+平均维修时间

宕机时间不超过6分钟

具体HA衡量标准:

99%一年宕机时间不超过4天

99.9%一年宕机时间不超过10小时

99.99%一年宕机时间不超过1小时

99.999%一年宕机时间不超过6分钟

高可用工作方式:



  • 主从方式(非对称方式)

  • 双机双工方式(互备互援)

  • 集群工作方式(多服务器互备方式)

高可用的资源分类:



  • 网络高可用

  • 服务器高可用

  • 存储高可用

  • 服务高可用等

keepalived通过实现VRRP协议来实现地址漂移

 

主从高可用



  • 在系统中,有一个master节点和一个backup节点,其中master节点对线上业务提供服务,backup与master节点之间保持心跳。

  • 当master节点因宕机服务不可用时,系统会切换到backup节点上线,提供服务

  • 当宕机master节点恢复后,系统将该master作为backup加入集群

技术分享图片

 

双主高可用



  • 在系统中,有两个master节点,均对线上业务提供服务,两个master节点之间保持心跳。

  • 当某一台master节点因宕机服务不可用时,系统会将流量全部导向剩余的master节点,继续提供服务

  • 当宕机的master节点恢复后,系统将该master加入集群,提供服务

 

 

 


keepalived高可用集群的解决方案

keepalived在一个节点上启动后,会生成一个master主进程,这个主进程又会生成两个子进程,分别是:



  • VRRP Stack,实现VRRP协议

  • Checkers,检测IPVS后端realserver的健康状况

VRRP双方节点都启动以后,要实现状态转换的,刚开始启动的时候,初始状态都是backup,而后向其它节点发送通告,以及自己的优先级信息,谁的优先级高,就转换为master,否则就是backup。

这时候服务就在状态为master的节点上启动,为用户提供服务,如果,该节点挂掉了,则转换为backup,优先级降低,另一个节点转换为master,优先级上升,服务就在此节点启动,VIP,VMAC都会被转移到这个节点上,为用户提供服务。

技术分享图片

 


 三、搭建LVS负载均衡集群

 


负载均衡集群简介

技术分享图片

 

 

 


LVS简介

技术分享图片

 

 技术分享图片

 

 技术分享图片

 

 技术分享图片

 

 

 

 

 

 


LVS NAT模式

技术分享图片

 

 

技术分享图片


LVS IP Tunnel模式

技术分享图片

 

技术分享图片

 


LVS DR模式

技术分享图片

 

 

技术分享图片

 

 


LVS调度算法

技术分享图片


LVS集群搭建

技术分享图片

 

 


基于云计算平台的架构


四、使用CDN实现应用缓存和加速


CDN简介

全称Content Delivery Network,即内容分发网络。



  • 构建在网络之上的内容分发网络

  • 使用后就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率

  • 依靠部属在各地的边缘服务器,包括中心平台的负载均衡、内容分发、调度等功能模块

技术分享图片

 

技术分享图片

 

 从上面查询结果可用看出img.alibaba.com.CNAME img.alibaba.com.danuoyi.tbcache.com.后面的CNAME是 由CDN服务提供支持。

 


CDN主要特点

本地Cache加速

提高了企业站点(尤其含有大量图片和静态页面站点)访问速度,并大大提高以上性质站点的稳定性

镜像服务

消除了不同运营商之间互联的瓶颈造成的影响,实现了跨运营商的网络加速,保证不同网络中的用户都能得到良好的访问质量

远程加速

远程访问用户根据DNS负载均衡技术智能自动选择Cache服务器,选择最快的Cache服务器,加快远程的访问速度

宽度优先

自动生成服务器的远程镜像cache服务器,远程用户访问时从cache服务器上读取数据,减少远程访问宽度、分担网络流量、减轻原站点web服务器负载等功能。

集群抗攻击

广泛的CDN节点加上节点之间的智能冗余机制

 


CDN服务模式

内容分发网络是一个经策略性部属的系统,包括以下3个要件:

分发服务系统:最基本的工作单元就是cache设备,cache(边缘cache)负责直接响应最终用户的访问请求,把缓存在本地的内容快速地提供给用户。同时cache还负责与源站点进行内容同步,把更新的内容以及本地没有的内容从源站点获取并保存在本地。

cache设备的数量、规模、总服务能力是衡量一个CDN系统服务能力的基本指标

负载均衡系统:主要功能是负责对所有发起服务请求的用户进行访问调度,确定提供给用户的最终实际访问地址。两级调度体系分为全局负载(GSLB)和本地负载均衡(SLB)。GSLB主要根据用户就近性原则,通过对每个服务节点进行”最优“判断,确定向用户提供服务的cache的物理位置。SLB主要负责节点内部的设备负责均衡。

运营管理系统:分为运营管理和网络管理子系统,负责处理业务层面的与外界系统交换所必须的收集、整理、交付工作,包含客户管理、产品管理、计费管理、统计分析等功能。

技术分享图片

 

 

 


CDN工作流程

技术分享图片

 

 技术分享图片

 

 

技术分享图片

 

 技术分享图片

 

 

 

 


CDN关键技术

技术分享图片

 

 

 


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


DNS简介

 Domain Name System,DNS是一个分布式、分层次的主机名管理架构,通过配置DNS服务器地址,主机不需要知道对应的ip地址就能通过主机名的形式访问互联网。

DNS利用类似倒状树的目录结构将主机名的管理分配到不同层级的DNS服务器中,经过分层管理,每一级DNS服务器负载部分域名信息,这就减轻了DNS服务器的负载,同时也方便记录的更新同步。

DNS是一个网络服务,因此就有对应的端口,其端口号为53号。DNS查询的时候,是以udp这个较快速的数据传输协议来查询的,但万一没有方法查询到完整的信息时,就会再次以tcp这个协定来重新查询,DNS服务在启动的时候会同时开启tcp的53号端口和udp的53号端口。

DNS在进行区域传输的时候使用TCP协议,其他时候则使用UDP协议。

FQDN(Full Qualified Domain Name):完整主机名,是有主机名和域名构成。例如www.baidu.com当中,www就是web服务器的主机名,baidu.com就是域名,主机名和域名之间用实心号来表示。

DNS是基于C/S架构(多数基于套接字架构C/S架构),对于每一级域名长度的限制是63个字符,域名总长度则不超过253个字符。

DNS系统记录的信息非常多,不过重点就两个:一个是记录服务器所在的NS(name server)标志,另一个是记录主机名对应的A(address)标志。

 

 

DNS域名结构

倒状的树结构,在最顶层是一个根服务器,它主要负责顶级域名的管理。

一级域名共分三类,组织域、国家域和反响域,最多可以有127级域名。

每一级的域名服务器只负责对应下级的域的管理,其中根节点是分布在世界各地的13台服务器,其中10台位于美国地区,另外3台设置于英国、瑞典和日本。

技术分享图片

 


DNS工作原理

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



  • 本地DNS缓存解析

  • 本地DNS服务解析,递归查询

  • 根域及各级域名服务器解析,迭代查询

技术分享图片

 

DNS解析域名三阶段:

本地DNS缓存解析,向本地DNS请求Q1通常是hosts文件,如果查到返回A1,如果没查到,向本地服务器发Q2

本地DNS服务器解析,递归查询,本地服务器有,返回A2,没有向区域服务器访问Q3,查到返回A3,没有向区域服务器缓存查询Q4,如果没查到需要向各级域名服务器查询

根域名及各级域名服务器之间的解析,迭代解析,向13台跟服务器查Q5,根域名会向相应的顶级域名如com查找Q6,如果顶级服务器上有就响应根服务器A6,根服务器再响应给请求A5,告诉它顶级域,请求再发Q7去顶级域查询,顶级域查询相应二级域Q8A8,告诉你是二级还是三级,在哪台二级域名服务器上有A7,发请求到二级域名上查Q9,它会告诉你三级四级啊是哪个ISP具体管理的A5,然后去具体的ISP服务商查询A10,服务商管理大量IP域名列表,会告诉你结果,再一路返回去。

根域、顶级域、二级域都不负责存储具体的域名到IP的转换,只存储去哪个服务器


DNS负载均衡

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

DNS服务器软件:bind9

OS:Ubuntu18.04

下载安装bind9


root@f036038f85fa:/# apt-get update
root@f036038f85fa:
/# apt-get install bind9

修改本机名字服务器


root@f036038f85fa:/etc/bind# vim /etc/resolv.conf

resolv.conf配置DNS客户,它包含了主机的域名搜索顺序和DNS服务器的地址,每一行应包含一个关键字和一个或多个的由空格隔开的参数。

阿里云中的该文件示例


options timeout:2 attempts:3 rotate single-request-reopen
; generated by
/usr/sbin/dhclient-script
nameserver
100.100.2.136
nameserver
100.100.2.138

阿里云自动分配的nameserver

nameserver 表明DNS服务器的IP地址。可以有很多行的nameserver,每一个带一个IP地址。在查询时就按nameserver在本文件中的顺序进行,且只有当第一个nameserver没有反应时才查询下面的nameserver。
domain 声明主机的域名。很多程序用到它,如邮件系统;当为没有域名的主机进行DNS查询时,也要用到。如果没有域名,主机名将被使用,
search 它的多个参数指明域名查询顺序。当要查询没有域名的主机,主机将在由search声明的域中分别查找。domain和search不能共存;如果同时存在,后面出现的将会被使用。
sortlist 允许将得到域名结果进行特定的排序。它的参数为网络/掩码对,允许任意的排列顺序。

查看本机ip


root@f036038f85fa:/etc/bind# ifconfig -a
eth0: flags
=4163 mtu 1450
inet
172.30.80.8 netmask 255.255.248.0 broadcast 172.30.87.255
ether
02:42:ac:1e:50:08 txqueuelen 0 (Ethernet)
RX packets
27566 bytes 47904091 (47.9 MB)
RX errors
0 dropped 0 overruns 0 frame 0
TX packets
27586 bytes 2595068 (2.5 MB)
TX errors
0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags
=73 mtu 65536
inet
127.0.0.1 netmask 255.0.0.0
loop txqueuelen
1000 (Local Loopback)
RX packets
0 bytes 0 (0.0 B)
RX errors
0 dropped 0 overruns 0 frame 0
TX packets
0 bytes 0 (0.0 B)
TX errors
0 dropped 0 overruns 0 carrier 0 collisions 0

将nameserver改为本机的ip


options timeout:2 attempts:3 rotate single-request-reopen
; generated by
/usr/sbin/dhclient-script
nameserver
172.30.80.8
nameserver
100.100.2.136
nameserver
100.100.2.138

修改 named.conf.local


root@f036038f85fa:/etc/bind# vim named.conf.local
//
// Do any local configuration here
//
// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";
zone "163.com" {
type master;
file "/etc/bind/db.163.com";
};

zone        定义一个区

其中type项的值:

master:表示定义的是主域名服务器 

slave :表示定义的是辅助域名服务器 

hint:表示是互联网中根域名服务器 

资源文件/etc/bind/db.163.com


root@f036038f85fa:/etc/bind# vim named.conf.options
options {
directory
"/var/cache/bind";
listen
-on port 53 {127.0.0.0;172.30.80.8;};
allow
-transfer {none;};
// If there is a firewall between you and nameservers you want
// to talk to, you may need to fix the firewall to allow multiple
// ports to talk. See http://www.kb.cert.org/vuls/id/800113
// If your ISP provided one or more IP addresses for stable
// nameservers, you probably want to use them as forwarders.
// Uncomment the following block, and insert the addresses replacing
// the all-0‘s placeholder.
// forwarders {
// 0.0.0.0;
// };
//========================================================================
// If BIND logs error messages about the root key being expired,
// you will need to update your keys. See https://www.isc.org/bind-keys
//========================================================================
dnssec-validation auto;
auth
-nxdomain no; # conform to RFC1035
listen
-on-v6 { any; };
};

创建域文件


root@f036038f85fa:/etc/bind# vim /etc/bind/db.163.com
$TTL
604800
@ IN SOA
163.com root.localhost. (
1 ; Serial
604800 ; Refresh
1H ; Retry
1W ; Expire
3H ) ; Minimum
;
@ IN NS localhost.
163.com IN NS 172.30.80.8
yes IN A
172.30.80.8
yes IN A
172.30.80.9
yes IN A
172.30.80.10

重启bind9


service bind9 restart

dig


root@f036038f85fa:/etc/bind# dig yes.163.com
;
<<>> DiG 9.11.3-1ubuntu1.11-Ubuntu <<>> yes.163.com
;; global options:
+cmd
;; Got answer:
;;
->>HEADER<<- opcode: QUERY, status: NOERROR, id: 35668
;; flags: qr aa rd ra; QUERY:
1, ANSWER: 3, AUTHORITY: 1, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version:
0, flags:; udp: 4096
; COOKIE: c53be5121e871df809c1ead65e55d979ee7ec5f45370708e (good)
;; QUESTION SECTION:
;yes.
163.com. IN A
;; ANSWER SECTION:
yes.
163.com. 604800 IN A 172.30.80.8
yes.
163.com. 604800 IN A 172.30.80.9
yes.
163.com. 604800 IN A 172.30.80.10
;; AUTHORITY SECTION:
163.com. 604800 IN NS localhost.
;; ADDITIONAL SECTION:
localhost.
604800 IN A 127.0.0.1
localhost.
604800 IN AAAA ::1
;; Query
time: 0 msec
;; SERVER:
172.30.80.8#53(172.30.80.8)
;; WHEN: Wed Feb
26 02:35:37 UTC 2020
;; MSG SIZE rcvd:
183

另一台局域网的机器绑定该台主机作为DNS解析服务器


nameserver 172.30.80.8

如果ping yes.163.com的话,会发现不同次的ping,分别会对应172.30.80.8、172.30.80.9、172.30.10等设置好的ip。

 


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

DNS

对同一个请求的域名,映射为不同的服务器IP地址

HTTP重定向

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

反向代理负载均衡

反向代理指的是代理服务器来接收对web服务器的连接请求,然后转发给内部网络中不同的web服务器,并将web服务器请求得到的结果返回给请求连接的客户端,以nginx为代表。

NAT负载均衡

将公网地址映射为多个私网地址,解决IP地址紧张,不想让外网知道内网结构的问题

CDN

通过发布机制将内容同步到大量的缓存节点,并在DNS服务器上进行扩展,找到离用户最近的缓存节点作为服务提供点

混合型负载均衡

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

 


推荐阅读
  • 如果应用程序经常播放密集、急促而又短暂的音效(如游戏音效)那么使用MediaPlayer显得有些不太适合了。因为MediaPlayer存在如下缺点:1)延时时间较长,且资源占用率高 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • Framework7:构建跨平台移动应用的高效框架
    Framework7 是一个开源免费的框架,适用于开发混合移动应用(原生与HTML混合)或iOS&Android风格的Web应用。此外,它还可以作为原型开发工具,帮助开发者快速创建应用原型。 ... [详细]
  • 本文介绍了如何使用 CMD 批处理脚本进行文件操作,包括将指定目录下的 PHP 文件重命名为 HTML 文件,并将这些文件复制到另一个目录。 ... [详细]
  • 解决Bootstrap DataTable Ajax请求重复问题
    在最近的一个项目中,我们使用了JQuery DataTable进行数据展示,虽然使用起来非常方便,但在测试过程中发现了一个问题:当查询条件改变时,有时查询结果的数据不正确。通过FireBug调试发现,点击搜索按钮时,会发送两次Ajax请求,一次是原条件的请求,一次是新条件的请求。 ... [详细]
  • 第二十五天接口、多态
    1.java是面向对象的语言。设计模式:接口接口类是从java里衍生出来的,不是python原生支持的主要用于继承里多继承抽象类是python原生支持的主要用于继承里的单继承但是接 ... [详细]
  • 使用Jsoup解析并遍历HTML文档时,该库能够高效地生成一个清晰、规范的解析树,即使源HTML文档存在格式问题。Jsoup具备强大的容错能力,能够处理多种异常情况,如未闭合的标签等,确保解析结果的准确性和完整性。 ... [详细]
  • CentOS 7 中 iptables 过滤表实例与 NAT 表应用详解
    在 CentOS 7 系统中,iptables 的过滤表和 NAT 表具有重要的应用价值。本文通过具体实例详细介绍了如何配置 iptables 的过滤表,包括编写脚本文件 `/usr/local/sbin/iptables.sh`,并使用 `iptables -F` 清空现有规则。此外,还深入探讨了 NAT 表的配置方法,帮助读者更好地理解和应用这些网络防火墙技术。 ... [详细]
  • 两个条件,组合控制#if($query_string~*modviewthread&t(&extra(.*)))?$)#{#set$itid$1;#rewrite^ ... [详细]
  • 本文详细介绍了DMA控制器如何通过映射表处理来自外设的请求,包括映射表的设计和实现方法。 ... [详细]
  • 解决Win10下MySQL连接问题:Navicat 2003无法连接到本地MySQL服务器(10061)
    本文介绍如何在Windows 10环境下解决Navicat 2003无法连接到本地MySQL服务器的问题,包括启动MySQL服务和检查配置文件的方法。 ... [详细]
  • 本文详细介绍了如何利用Duilib界面库开发窗体动画效果,包括基本思路和技术细节。这些方法不仅适用于Duilib,还可以扩展到其他类似的界面开发工具。 ... [详细]
  • Spark中使用map或flatMap将DataSet[A]转换为DataSet[B]时Schema变为Binary的问题及解决方案
    本文探讨了在使用Spark的map或flatMap算子将一个数据集转换为另一个数据集时,遇到的Schema变为Binary的问题,并提供了详细的解决方案。 ... [详细]
  • 解决Parallels Desktop错误15265的方法
    本文详细介绍了在使用Parallels Desktop时遇到错误15265的多种解决方案,包括检查网络连接、关闭代理服务器和修改主机文件等步骤。 ... [详细]
  • 在 LeetCode 的“有效回文串 II”问题中,给定一个非空字符串 `s`,允许删除最多一个字符。本篇深入解析了如何判断删除一个字符后,字符串是否能成为回文串,并提出了高效的优化算法。通过详细的分析和代码实现,本文提供了多种解决方案,帮助读者更好地理解和应用这一算法。 ... [详细]
author-avatar
咸咸
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有