如何在Linux服务器下实现多网卡负载均衡?
再聊聊基于域名系统的负载均衡,也就是大家常说的DNS轮询。NCSA的可扩展Web算是最早用动态DNS轮询技术的web系统了。原理并不复杂,就是在DNS里给多个地址配置同一个名字,客户机查询这个名字时就会拿到其中一个地址,这样不同客户自然就访问了不同的服务器,达到负载均衡的效果。很多知名网站都用过这招,像早期的yahoo、163等等。动态DNS轮询实现简单,不用复杂的配置和管理,一般支持bind8.2以上的类unix系统都能跑,所以用得非常广。
不过DNS负载均衡虽然简单有效,问题也不少。第一,域名服务器根本不知道服务结点是不是还活着,如果某个结点失效了,域名系统照样把域名解析到它上面,用户访问就失败了。第二,受DNS数据刷新时间TTL的影响,一旦超过这个TTL,别的DNS服务器就要来和它交互重新拿地址数据,可能就拿到不同的IP了。所以想让地址随机分配,就得把TTL设得尽量短,好让各地的DNS服务器都能更新对应地址,实现随机获取。可TTL设太短又会让DNS流量暴增,反倒带来额外的网络麻烦。第三点,它分不清服务器之间的差异,也反映不了服务器当前的运行状况。用DNS负载均衡时得尽量保证不同客户能均匀拿到不同地址,可现实中用户A可能只浏览几个网页,用户B却在疯狂下载,域名系统没有合适的负载策略,只是简单轮流,就很容易把A的请求发到负载轻的站点,却把B的请求发到已经很重的站点上。所以在动态平衡这点上,动态DNS轮询的效果其实并不理想。