我目前使用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服务器。
之前,我曾两次添加服务器以向它们带来更多流量(效果很好,带宽几乎增加了一倍)。但是将10 Gbps服务器100次添加到DNS有点荒谬。
所以我考虑使用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,还有其他方法吗?当然,我可以使用带有光纤通道等的负载平衡器,但是成本太高了,而且它只会增加瓶颈的宽度,而不能消除瓶颈。我唯一能想到的就是Anycast(是Anycast还是组播?)IP地址,但是我没有办法建立这样的系统。