运维开发网

网络 – 通过TTL加权循环 – 可能吗?

运维开发网 https://www.qedev.com 2020-03-03 12:36 出处:网络 作者:运维开发网整理
我目前使用DNS循环来实现负载均衡,效果很好. 记录看起来像这样(我的TTL为120秒) ;; ANSWER SECTION: orion.2x.to. 116 IN A 80.237.201.41 orion.2x.to. 116 IN A 87.230.54.12 orion.2x.to. 116 IN A 87.230.100.10
我目前使用DNS循环来实现负载均衡,效果很好.

记录看起来像这样(我的TTL为120秒)

;; ANSWER SECTION:
orion.2x.to.        116 IN  A   80.237.201.41
orion.2x.to.        116 IN  A   87.230.54.12
orion.2x.to.        116 IN  A   87.230.100.10
orion.2x.to.        116 IN  A   87.230.51.65

我了解到并非每个ISP /设备都以同样的方式处理这样的响应.

例如,某些DNS服务器随机轮换地址或始终循环通过.有些只是传播第一个条目,其他人试图通过查看IP地址来确定哪个是最好的(区域接近).

但是,如果用户群足够大(分布在多个ISP等),它的平衡性非常好.

从最高到最低负载服务器的差异几乎都不超过15%.

但是现在我遇到的问题是我在系统中引入了更多的服务器,而且并非所有服务器都具有相同的容量.

我目前只有1 Gbps服务器,但我也想使用100 Mbps和10 Gbps服务器.

所以我想要的是我想推出一款重量为100的10 Gbps服务器,一款重量为10的1 Gbps服务器和一款重量为1的100 Mbps服务器.

我之前添加了两次服务器来为它们带来更多流量(效果不错 – 带宽几乎翻了一倍).

但是向DNS添加100 Gbps服务器100次有点荒谬.

所以我想到了使用TTL.

如果我给服务器A 240秒TTL和服务器B只有120秒(这大约是用于循环的最小值,因为如果指定较低的TTL,很多DNS服务器设置为120(所以我听说)).我认为这样的事情应该在一个理想的情况下发生:

First 120 seconds
50% of requests get server A -> keep it for 240 seconds.
50% of requests get server B -> keep it for 120 seconds

Second 120 seconds
50% of requests still  have server A cached -> keep it for another 120 seconds.
25% of requests get server A -> keep it for 240 seconds
25% of requests get server B -> keep it for 120 seconds

Third 120 seconds
25% will get server A (from the 50% of Server A that now expired) -> cache 240 sec
25% will get server B  (from the 50% of Server A  that now expired) -> cache 120 sec
25% will have server A cached for another 120 seconds
12.5% will get server B (from the 25% of server B that now expired) -> cache 120sec
12.5% will get server A (from the 25% of server B that now expired) -> cache 240 sec

Fourth 120 seconds
25% will have server A cached -> cache for another 120 secs
12.5% will get server A (from the 25% of b that now expired) -> cache 240 secs
12.5% will get server B (from the 25% of b that now expired) -> cache 120 secs
12.5% will get server A (from the 25% of a that now expired) -> cache 240 secs
12.5% will get server B (from the 25% of a that now expired) -> cache 120 secs
6.25% will get server A (from the 12.5% of b that now expired) -> cache 240 secs
6.25% will get server B (from the 12.5% of b that now expired) -> cache 120 secs
12.5% will have server A cached -> cache another 120 secs
... I think I lost something at this point, but I think you get the idea...

正如你所看到的那样,预测变得非常复杂,而且在实践中肯定不会像这样做.但它肯定会对分配产生影响!

我知道加权循环存在,只是由根服务器控制.它只是在响应时循环访问DNS记录,并返回具有与权重相对应的设置概率的DNS记录.我的DNS服务器不支持这个,我的要求不是那么精确.如果它没有完美的重量,那么它应该朝着正确的方向前进.

我认为使用TTL字段可能是一个更优雅,更简单的解决方案 – 它不需要动态控制它的DNS服务器,这节省了资源 – 在我看来,这是DNS负载平衡与硬件负载平衡器的重点.

我现在的问题是:是否有任何最佳实践/方法/经验法则使用DNS记录的TTL属性来加权循环分配?

编辑:

该系统是一个转发代理服务器系统.

带宽(非请求)超过了以太网可以处理的单个服务器的数量.

所以我需要一个平衡解决方案,将带宽分配给多个服务器.除了使用DNS之外还有其他方法吗?

当然我可以使用带有光纤通道等的负载平衡器,但成本很荒谬,它也只会增加瓶颈的宽度而不能消除它.

我唯一能想到的是任播(是任播还是组播?)IP地址,但我没有办法建立这样的系统.

首先,我完全赞同@Alnitak,DNS不是为这类事情设计的,最佳做法是不(ab)使用DNS作为穷人的负载均衡器.

My question now is… are there any best prectices / methos / rules of thumb to weight round robin distribution using the TTL attribute of DNS records?

要在问题的前提下回答,使用DNS执行basix加权循环的方法是:

>调整权威DNS响应中记录的相对出现次数.即如果服务器A拥有1/3流量而服务器B拥有2/3,那么对DNS代理的1/3权威DNS响应将仅包含A的IP,而2/3的响应仅包含B的IP. (如果2个或更多服务器共享相同的“权重”,则可以将它们捆绑到一个响应中.)

>保持低DNS TTL,以便相对快速地平衡不平衡负载.由于下游DNS代理背后的客户端数量非常均匀,因此您需要经常重新调整记录.

亚马逊的Route 53 DNS service uses this method.

The amount of Bandwidth (not requests) exceeds what one single server with ethernet can handle. So I need a balancing solution that distributes the bandwidth to several servers.

对.据我所知,你有一些“便宜”的下载/视频分发/大文件下载服务,总服务比特率超过1 GBit.

如果不知道服务和服务器布局的具体细节,就很难准确.但在这种情况下,常见的解决方案是:

> DNS循环到两个或多个TCP / IP或HTTP级负载均衡器实例.

>每个负载均衡器实例都具有高可用性(2个相同的负载均衡器协同工作,始终保持一个IP地址).

>每个负载均衡器实例使用加权循环或加权随机连接处理到后端服务器.

这种设置可以使用开源软件构建,也可以使用许多供应商提供的专用设备构建.这里的load balancing tag是一个很好的起点,或者您可以聘请已经完成此操作的系统管理员为您咨询…

0

精彩评论

暂无评论...
验证码 换一张
取 消