The*_*can 11 networking domain-name-system load-balancing ttl round-robin
我目前使用 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
Run Code Online (Sandbox Code Playgroud)
我了解到并非每个 ISP/设备都以相同的方式处理此类响应。例如,一些 DNS 服务器随机地轮换地址或总是循环它们。一些只是传播第一个条目,其他人尝试通过查看 IP 地址来确定哪个是最好的(区域附近)。
但是,如果用户群足够大(分布在多个 ISP 上,等等),它的平衡就会很好。从最高负载到最低负载的服务器的差异几乎都超过 15%。
但是,现在我遇到的问题是,我正在向系统中引入更多服务器,而且并非所有服务器都具有相同的容量。
我目前只有 1 Gbps 服务器,但我也想使用 100 Mbps 和 10 Gbps 服务器。
所以我想要的是我想引入一个权重为100的10 Gbps服务器,一个权重为10的1 Gbps服务器和一个权重为1的100 Mbps服务器。
我之前添加了两次服务器来为它们带来更多流量(效果很好——带宽几乎翻了一番)。但是向 DNS 添加 100 次 10 Gbps 服务器有点荒谬。
所以我考虑使用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...
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,预测变得非常复杂,并且在实践中肯定不会像这样。但它肯定会对分布产生影响!
我知道存在加权循环,并且仅由根服务器控制。它只是在响应时循环浏览 DNS 记录,并以与权重相对应的设定概率返回 DNS 记录。我的 DNS 服务器不支持这个,我的要求也不是那么精确。如果它的重量不完美,那没关系,但它应该朝着正确的方向发展。
我认为使用 TTL 字段可能是一个更优雅、更简单的解决方案——它不需要一个动态控制它的 DNS 服务器,从而节省资源——在我看来,这是 DNS 负载平衡与硬件负载平衡器的重点。
我现在的问题是:是否有任何最佳实践/方法/经验法则可以使用 DNS 记录的 TTL 属性来加权循环分配?
编辑:
该系统为正向代理服务器系统。带宽(不是请求)的数量超过了一台带有以太网的服务器可以处理的数量。所以我需要一个平衡解决方案,将带宽分配给多台服务器。除了使用 DNS 之外,还有其他方法吗?当然,我可以使用带有光纤通道等的负载均衡器,但成本高得离谱,而且它也只会增加瓶颈的宽度并没有消除它。我唯一能想到的是任播(是任播还是多播?)IP 地址,但我没有办法设置这样的系统。
小智 5
首先,我完全同意@Alnitak 的观点,即 DNS 不是为此类事情而设计的,最佳实践是不要(滥用)使用 DNS 作为穷人的负载平衡器。
我现在的问题是...是否有任何最佳实践/方法/经验法则来使用 DNS 记录的 TTL 属性来加权循环分配?
在回答问题的前提下,使用 DNS 执行 basix 加权循环的方法是:
Server A要拥有 1/3 的流量并且Server B要拥有 2/3,则对 DNS 代理的权威 DNS 响应的 1/3 将仅 A包含的 IP,而响应的 2/3 将仅包含B的 IP。(如果 2 个或更多服务器共享相同的“权重”,那么它们可以捆绑到一个响应中。)带宽量(不是请求)超过了一台具有以太网的服务器可以处理的量。因此,我需要一个平衡解决方案,将带宽分配给多台服务器。
正确的。据我了解,您拥有某种“廉价”下载/视频分发/大文件下载服务,其中总服务比特率超过 1 GBit。
如果不知道您的服务和服务器布局的具体细节,就很难做到精确。但这种情况下的常见解决方案是:
这种设置可以使用开源软件或许多供应商的专用设备来构建。这里的负载平衡标签是一个很好的起点,或者您可以聘请以前做过此操作的系统管理员来为您提供咨询...
| 归档时间: |
|
| 查看次数: |
7904 次 |
| 最近记录: |