当前位置: 首页 > 科技观察

在Linux上使用DNS进行简单负载平衡_0

时间:2023-03-23 11:19:11 科技观察

DNS循环将多个服务器映射到同一主机名并没有比此处显示的魔法更多。如果您的后端服务器由多个服务器组成,例如集群或镜像Web或文件服务器,则通过负载平衡器提供单一入口点。大型、繁忙的电子商务企业在执行各种任务的高端负载均衡器上花费了大量资金:代理、缓存、健康检查、SSL处理、可配置的优先级、流量整形等等。但是您并不真的需要一个可以完成那么多工作的负载均衡器。您需要的是一种跨服务器分配负载的简单方法,该方法提供故障转移并且并不真正关心它是否高效和完美。DNS循环和使用循环的子域委派是实现此目的的两种简单方法。DNSroundrobin是将多个服务器映射到同一个主机名。当用户访问foo.example.com时,有多个服务器可以处理他们的请求。这就是它的使用方式。当您有多个子域或您的服务器在地理上分散时,使用循环法的子域委派非常有用。您有一个主域名服务器,子域有自己的域名服务器。您的主要域名服务器将所有对子域的请求定向到他们自己的域名服务器。这缩短了响应时间,因为DNS协议会自动找到最快的链接。DNS轮询轮询与知更鸟无关,根据我熟悉的图书馆员的说法,知更鸟最初是一个法语短语,rubanrond,或圆丝带。很久以前,法国政府官员以不分等级的圆圈、波浪线或直线签署请愿书,以掩盖最初的发起人。DNS轮询也是无等级的,只需配置一个服务器列表,然后将请求转发到每个服务器即可。它并没有真正做负载均衡,因为它根本不测量负载,也没有健康检查,所以如果一个服务器宕机,请求仍然会被发送到宕机的服务器。它的优点是简单。如果您有一个小型文件或Web服务器集群,并且想要一种简单的方法在它们之间分配负载,那么DNS循环法适合您。您所要做的就是创建多个A或AAAA记录,将多个服务器映射到一个主机名。此BIND示例同时使用IPv4和IPv6私有地址类:fileserv.example.com。在172.16.10.10fileserv.example.com中。在172.16.10.11fileserv.example.com中。在172.16.10.12fileserv.example中。com。在AAAAfd02:faea:f561:8fa0:1::10fileserv.example.com中。在AAAAfd02:faea:f561:8fa0:1::11fileserv.example.com中。INAAAAfd02:faea:f561:8fa0:1::12Dnsmasq在/etc/hosts文件中保存A和AAAA记录:172.16.1.10fileservfileserv.example.com172.16.1.11fileservfileserv.example.com172.16.1.12fileservfileserv.example.comfd02:faea:f561:8fa0:1::10fileservfileserv.example.comfd02:faea:f561:8fa0:1::11fileservfileserv.example.comfd02:faea:f561:8fa0:1::12fileservfileserv.example.com注意这些例子很简单,有多种方法可以解析完全限定的域名,所以要自己学习如何配置DNS。使用dig命令检查您的配置是否按预期工作。将ns.example.com替换为您的名称服务器:$dig@ns.example.comfileservAfileservAAA它将同时显示IPv4和IPv6轮询记录。子域委托和轮询子域委托与轮询相结合需要更多配置,但它有一些好处。当您有多个子域或地理位置分散的服务器时,应该使用它。它的响应时间更快,宕机服务器不响应,所以客户端不会挂断等待回复。一个短的TTL,例如60秒,就可以为您完成。此方法需要多个名称服务器。在最简单的情况下,您需要一个主名称服务器和两个子域,每个子域都有自己的名称服务器。在子域服务器上配置轮询记录,然后在主域名服务器上配置委派。在主名称服务器上的BIND中,您至少需要两个额外的配置,区域声明和区域数据文件中的A/AAAA记录。主名称服务器中的委托应如下所示:ns1.sub.example.com。在172.16.1.20ns1.sub.example.com中。在AAAAfd02:faea:f561:8fa0:1::20ns2.sub中。example.com。在172.16.1.21ns2.sub.example.com中。在AAAfd02:faea:f561:8fa0:1::21sub.example.com中。在NSns1.sub.example.com.sub.example。com。在NSns2.sub.example.com中。每个后续的子域服务器都有自己的区域文件。这里的关键是每个服务器返回自己的IP地址。named.conf中的区域声明对于所有服务都是相同的:zone"sub.example.com"{typemaster;文件“db.sub.example.com”;};和数据文件也一样,除了A/AAAA记录使用每个服务器自己的IP地址。SOA记录全部指向主域名服务器:;第一个子域名服务器$ORIGINsub.example.com.$TTL60sub.example.comINSOAns1.example.com.admin.example.com。(2018123456;serial3H;refresh15;retry3600000;expire)sub.example.com。在NSns1.sub.example.com.sub.example.com中。在172.16.1.20ns1.sub.example.com中。在AAAAfd02:faea:f561:8fa0:1::20;第二个子域名服务器$ORIGINsub.example.com.$TTL60sub.example.comINSOAns1.example.com.admin.example.com。(2018234567;serial3H;refresh15;retry3600000;expire)sub.example.com。在NSns1.sub.example.com.sub.example.com中。在172.16.1.21ns2.sub.example.com中。INAAAAfd02:faea:f561:8fa0:1::21接下来在子域服务器上生成轮询记录,方法同上。您现在有多个名称服务器处理对您的子域的请求。同样,BIND很复杂并且有多种方法可以做同样的事情,因此找出最适合您使用的配置是您的家庭作业。在Dnsmasq中做子域委托很容易。将以下行添加到主名称服务器上的dnsmasq.conf文件以指向子域的名称服务器:server=/sub.example.com/172.16.1.20server=/sub.example.com/172.16。1.21server=/sub.example.com/fd02:faea:f561:8fa0:1::20server=/sub.example.com/fd02:faea:f561:8fa0:1::21然后在子域的nameserver中配置轮询/etc/主机。有关如何配置的详细信息和帮助,请参阅以下资源:DnsmasqDNS和BIND,第5版