动态负载均衡 DNS:dlbDNS
计算机知识的快速普及导致今天使用计算机的人数急剧增加。这种增长促使了以密集计算为导向和资源共享的应用程序的发展。这些因素共同在增加互联网上的负载方面发挥着重要作用,导致严重的网络交通拥堵。这种现象虽然本质上是动态的,但以响应时间缓慢和应用程序反复崩溃的形式给用户带来了很多挫败感。
开发具有更大容量和处理此流量能力的服务器是解决问题的一种方法;另一种方法是将客户端请求分发到多台服务器。第二种方法是解决此问题的优雅方式,因为它使用现有资源并避免了某些服务器过载而其余服务器空闲的情况。考虑到以下因素,进一步加强了跨服务器分发请求的需求
每个 TCP 会话占用 32 字节的内存(一般经验法则),导致具有 32MB RAM 的服务器理论上可以支持一百万个并发连接(参见参考文献 2)。
假设有多台服务器,用户总是登录到他们最喜欢的服务器,而忽略该服务器上的负载。
跨服务器分发请求可以通过定期监视服务器并将请求动态地定向到最佳服务器来实现。这种基于服务器负载跨多台服务器动态定向请求的方式称为动态负载均衡。此功能可以添加到预先存在的域名服务 (DNS) 中,因为它已经在解析客户端请求中发挥着重要作用,并且可以配置为跨多台服务器定向客户端请求,以努力避免网络交通拥堵。在此,最佳服务器指的是根据稍后将解释的评分算法获得最佳评分的服务器。
我们将解释动态负载均衡 DNS dlbDNS 的设计、实现和优势,dlbDNS 是 DNS 的扩展。
有四种负载均衡模型可用。首先,RFC 1794(参见参考文献 1)描述了一种负载均衡方法,该方法使用特殊的区域传输代理,该代理从外部来源获取其信息。然后,新区域由名称服务器加载。此方法的一个问题是,在区域传输之间,加权信息本质上是静态的,或者可能是以轮询方式分发的。此方法也不允许虚拟/动态域,在虚拟/动态域中,响应是根据正在查询的名称动态创建的(参见参考文献 4)。
第二种模型是专用负载均衡服务器,它拦截传入请求并将它们定向到最佳服务器。此设计采用虚拟 IP 地址供负载均衡服务器内部使用。这样做的一个问题是,它向要监视的现有服务器集群添加了另一台服务器,而不是利用可用资源。
第三种模型是远程监控系统,该系统监控不同服务器的性能并向 DNS 提供反馈。此设计有助于检测内部不可见的问题,并提供更真实的访问时间测量,以及容易检测到影响外部用户的配置错误。这里的主要问题是依赖远程网络来监视和传递数据(参见参考文献 5)。
最后一种是内部监控系统,该系统监控服务器的性能并向 DNS 提供反馈。它的主要优点是易于维护和管理,接近可解决问题的源头,并且没有安全风险(参见参考文献 5)。此设计在 dlbDNS 中实现。
最初,负载均衡旨在允许 DNS 代理支持机器集群的概念(源自 VMS 用法),其中所有机器在功能上相似或相同。选择哪台机器并不特别重要,只要处理负载在一系列实际不同的主机之间合理地分配即可。对于配置和容量不同的服务器,需要更复杂的算法(参见参考文献 1)。
“轮询算法 A” 可以以轮询方式在服务器之间均匀地分配请求。尽管请求是动态处理的,但问题是对各种性能特征的完全忽略。
“负载平均算法 A” 可以基于服务器负载在服务器之间分配请求。此设计非常简单且相当便宜,但如果服务器在配置和潜力方面有所不同,则会彻底失败。
“评分算法 A” 基于如下所示的用户数量和负载平均值。此算法是合理的,因为它的评分偏向于唯一登录次数最少和负载平均值较低的主机(参见参考文献 4)。此评分算法在 dlbDNS 中实现,以确定最佳服务器。
WT_PER_USER = 100 USER_PER_LOAD_UNIT = 3 FUDGE = (TOT_USER - UNIQ_USER) * (WT_PER_USER/5) WEIGHT = (UNIQ_USER * WT_PER_USER) + (USER_PER_LOAD_UNIT * LOAD) + FUDGE
其中变量为
TOT_USER:已登录用户的总数
UNIQ_USERS:已登录用户的唯一数量
LOAD:过去一分钟的负载平均值,乘以 100
WT_PER_USER:每个用户的伪权重
FUDGE:多次登录用户的调整因子
WEIGHT:服务器的评分
为了开始,我们从 Internet 软件协会 (www.isc.org/bind.html) 下载了 BIND 8.1.2。最初,时间花在了安装和理解 DNS 上。DNS 安装在 odie.cs.twsu.edu 上,这是一个独立的 Linux 工作站。
在配置期间,添加了一个名为 DNAME 的新属性,以区分参与动态负载均衡的主机。列表 1 是来自 named.hosts.wsu 的快照,其中包含有关特定区域中所有主机的信息。在此列表中,主机 kira.cs.twsu.edu、sisko.cs.twsu.edu 和 q.cs.twsu.edu 参与 http://www1.cs.twsu.edu/ 的动态负载均衡。主机 kira.cs.twsu.edu、mccoy.cs.twsu.edu 和 emcity.cs.twsu.edu 参与 http://www2.cs.twsu.edu/ 的动态负载均衡。主机 kira.cs.twsu.edu、sisko.cs.twsu.edu 和 deanna.cs.twsu.edu 参与 http://www3.cs.twsu.edu/ 的动态负载均衡。主机 kira.cs.twsu.edu 和 sisko.cs.twsu.edu 属于多个组。
这是我们添加到预先存在的 DNS 功能中的算法。如果请求的服务类型为 DNAME,请执行以下操作
确定此服务的一组参与服务器。
通过与每台服务器建立并发无连接 (UDP) 连接,从所有参与服务器请求评分。
使用返回的评分,确定最佳服务器。
处理错误情况,例如“服务器太忙,无法在时间范围内返回评分”、“服务器返回的评分在返回 dlbDNS 的途中丢失”、“所有服务器都具有相同的评分”以及“服务器已关闭”。
评分守护进程在每台参与动态负载均衡的服务器上运行。以下是算法
接收来自 dlbDNS 的评分请求,并通过返回主机评分进行响应。
每分钟计算一次主机评分,而不是在请求时计算,因为快速响应时间是最重要的功能。
确保每分钟更新主机评分,独立于 dlbDNS 请求。
处理错误情况,例如 dlbDNS 关闭 UDP 套接字而没有等待主机响应。
图 1 显示了 dlbDNS 的功能。C 跟踪的路径表示评分守护进程更新服务器评分的过程。B 跟踪的路径表示 dlbDNS 和评分守护进程之间为确定最佳服务器而进行的通信。A 跟踪的路径表示用户请求跟踪的路径。HOST 1 的评分高于其他两个主机,因此用户请求被定向到 HOST 1。
服务器之间负载分布不均一直是威奇托州立大学计算机科学系的主要问题。bugs.cs.twsu.edu、kira.cs.twsu.edu、roger.cs.twsu.edu 和 sisko.cs.twsu.edu 是该系学生可用的四台 Linux 服务器。这些服务器在潜力和配置方面有所不同。
dlbDNS 于 1998 年 12 月安装,以有效利用服务器。lion.cs.twsu.edu,实际的 DNS 服务器,被设置为将 DNAME 请求定向到安装 dlbDNS 的 odie.cs.twsu.edu。添加到配置文件中的行是
; bestlinux IN DNAME bugs.cs.twsu.edu. bestlinux IN DNAME kira.cs.twsu.edu. bestlinux IN DNAME roger.cs.twsu.edu. bestlinux IN DNAME sisko.cs.twsu.edu. ;
在此,添加了 bestlinux 属性以处理来自 TELNET 和 FTP 等应用程序的非 Web 请求。

