时间:2021-05-19
DNS 轮询将多个服务器映射到同一个主机名,并没有为这里展示的魔法做更多的工作。
如果你的后端服务器是由多台服务器构成的,比如集群化或者镜像的 Web 或者文件服务器,通过负载均衡器提供了单一的入口点。业务繁忙的大型电商在高端负载均衡器上花费了大量的资金,用它来执行各种各样的任务:代理、缓存、状况检查、SSL 处理、可配置的优先级、流量整形等很多任务。
但是你并不需要做那么多工作的负载均衡器。你需要的是一个跨服务器分发负载的简单方法,它能够提供故障切换,并且不太在意它是否高效和完美。DNS 轮询和使用轮询的子域委派是实现这个目标的两种简单方法。
DNS 轮询是将多台服务器映射到同一个主机名上,当用户访问 foo.example.com 时多台服务器都可用于处理它们的请求,使用的就是这种方式。
当你有多个子域或者你的服务器在地理上比较分散时,使用轮询的子域委派就比较有用。你有一个主域名服务器,而子域有它们自己的域名服务器。你的主域名服务器将所有的到子域的请求指向到它们自己的域名服务器上。这将提升响应时间,因为 DNS 协议会自动查找最快的链路。
DNS 轮询
轮询和旅鸫鸟robins没有任何关系,据我相熟的图书管理员说,它最初是一个法语短语,ruban rond、或者 round ribbon。很久以前,法国政府官员以不分级的圆形、波浪线、或者直线形状来在请愿书上签字,以盖住原来的发起人。
DNS 轮询也是不分级的,简单配置一个服务器列表,然后将请求转到每个服务器上。它并不做真正的负载均衡,因为它根本就不测量负载,也没有状况检查,因此如果一个服务器宕机,请求仍然会发送到那个宕机的服务器上。它的优点就是简单。如果你有一个小的文件或者 Web 服务器集群,想通过一个简单的方法在它们之间分散负载,那么 DNS 轮询很适合你。
你所做的全部配置就是创建多条 A 或者 AAAA 记录,映射多台服务器到单个的主机名。这个 BIND 示例同时使用了 IPv4 和 IPv6 私有地址类:
fileserv.example.com. IN A 172.16.10.10fileserv.example.com. IN A 172.16.10.11fileserv.example.com. IN A 172.16.10.12fileserv.example.com. IN AAAA fd02:faea:f561:8fa0:1::10fileserv.example.com. IN AAAA fd02:faea:f561:8fa0:1::11fileserv.example.com. IN AAAA fd02:faea:f561:8fa0:1::12Dnsmasq 在 /etc/hosts 文件中保存 A 和 AAAA 记录:
172.16.1.10 fileserv fileserv.example.com172.16.1.11 fileserv fileserv.example.com172.16.1.12 fileserv fileserv.example.comfd02:faea:f561:8fa0:1::10 fileserv fileserv.example.comfd02:faea:f561:8fa0:1::11 fileserv fileserv.example.comfd02:faea:f561:8fa0:1::12 fileserv fileserv.example.com请注意这些示例都是很简化的,解析完全合格域名有多种方法,因此,关于如何配置 DNS 请自行学习。
使用 dig 命令去检查你的配置能否按预期工作。将 ns.example.com 替换为你的域名服务器:
$ dig @ns.example.com fileserv A fileserv AAA它将同时显示出 IPv4 和 IPv6 的轮询记录。
子域委派和轮询
子域委派结合轮询要做的配置会更多,但是这样有一些好处。当你有多个子域或者地理位置比较分散的服务器时,就应该去使用它。它的响应时间更快,并且宕机的服务器不会去响应,因此客户端不会因为等待回复而被挂住。一个短的 TTL,比如 60 秒,就能帮你做到。
这种方法需要多台域名服务器。在最简化的场景中,你需要一台主域名服务器和两个子域,每个子域都有它们自己的域名服务器。在子域服务器上配置你的轮询记录,然后在你的主域名服务器上配置委派。
在主域名服务器上的 BIND 中,你至少需要两个额外的配置,一个区声明以及在区数据文件中的 A/AAAA 记录。主域名服务器中的委派应该像如下的内容:
ns1.sub.example.com. IN A 172.16.1.20ns1.sub.example.com. IN AAAA fd02:faea:f561:8fa0:1::20ns2.sub.example.com. IN A 172.16.1.21ns2.sub.example.com. IN AAA fd02:faea:f561:8fa0:1::21sub.example.com. IN NS ns1.sub.example.com.sub.example.com. IN NS ns2.sub.example.com.接下来的每台子域服务器上有它们自己的区文件。在这里它的关键点是每个服务器去返回它自己的 IP 地址。在 named.conf 中的区声明,所有的服务上都是一样的:
zone "sub.example.com" { type master; file "db.sub.example.com";};然后数据文件也是相同的,除了那个 A/AAAA 记录使用的是各个服务器自己的 IP 地址。SOA 记录都指向到主域名服务器:
; first subdomain name server$ORIGIN sub.example.com.$TTL 60sub.example.com IN SOA ns1.example.com. admin.example.com. ( 2018123456 ; serial 3H ; refresh 15 ; retry 3600000 ; expire)sub.example.com. IN NS ns1.sub.example.com.sub.example.com. IN A 172.16.1.20ns1.sub.example.com. IN AAAA fd02:faea:f561:8fa0:1::20; second subdomain name server$ORIGIN sub.example.com.$TTL 60sub.example.com IN SOA ns1.example.com. admin.example.com. ( 2018234567 ; serial 3H ; refresh 15 ; retry 3600000 ; expire)sub.example.com. IN NS ns1.sub.example.com.sub.example.com. IN A 172.16.1.21ns2.sub.example.com. IN AAAA fd02: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然后在子域的域名服务器上的 /etc/hosts 中配置轮询。
获取配置方法的详细内容和帮助,请参考这些资源:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
解决方法有很多,如使用Windows2000或WindowsServer2003提供网络负载均衡服务,但该服务的设置非常复杂。而通过DNS服务器实现网络负载均衡
详解负载均衡实现一个域名对应多个IP地址使用负载均衡实现,传统和常规做法,其他方式需要特殊处理。(dns轮询,或者自己做解析)1、一个域名设定多个dns服务或者
DNS技术上。DNS的负载均衡技术主要采用的是轮询算法。 最后要说明一下,但DNS负载技术有一个问题较难解决,就是客户端会在本地缓冲DNSIP地址解析,从而使
负载均衡可以把用户的请求分摊到多个服务器上进行处理,从而实现了对海量用户的访问支持。负载均衡的架构如图所示:对于复杂的Web应用来说,用Nginx做前端负载均衡
本文实例讲述了PHP实现负载均衡的加权轮询方法。分享给大家供大家参考,具体如下:1.负载均衡算法有哪些?轮询法:将请求按顺序轮流地分配到后端服务器上,它均衡地对