十分钟理解负载均衡( 三 )


这么强大的系统还是有它的瓶颈 , 那就是NAT服务器的网络带宽 , 包括内部网络和外部网络 。当然如果你不差钱 , 可以去花钱去购买千兆交换机或万兆交换机 , 甚至负载均衡硬件设备 , 但如果你是个屌丝 , 咋办?
一个简单有效的办法就是将基于NAT的集群和前面的DNS混合使用 , 比如5个100Mbps出口宽带的集群 , 然后通过DNS来将用户请求均衡地指向这些集群 , 同时 , 你还可以利用DNS智能解析实现地域就近访问 。这样的配置对于大多数业务是足够了 , 但是对于提供下载或视频等服务的大规模站点 , NAT服务器还是不够出色 。
五、直接路由(LVS-DR) 
NAT是工作在网络分层模型的传输层(第四层) , 而直接路由是工作在数据链路层(第二层) , 貌似更屌些 。它通过修改数据包的目标mac地址(没有修改目标IP) , 将数据包转发到实际服务器上 , 不同的是 , 实际服务器的响应数据包将直接发送给客户羰 , 而不经过调度器 。
1、网络设置
【十分钟理解负载均衡】这里假设一台负载均衡调度器 , 两台实际服务器 , 购买三个外网ip , 一台机一个 , 三台机的默认网关需要相同 , 最后再设置同样的ip别名 , 这里假设别名为10.10.120.193 。这样一来 , 将通过10.10.120.193这个IP别名来访问调度器 , 你可以将站点的域名指向这个IP别名 。
2、将ip别名添加到回环接口lo上
这是为了让实际服务器不要去寻找其他拥有这个IP别名的服务器 , 在实际服务器中运行:

十分钟理解负载均衡

文章插图
另外还要防止实际服务器响应来自网络中针对IP别名的ARP广播 , 为此还要执行:
echo "1" > /proc/sys/net/ipv4/conf/lo/arp_ignoreecho "2" > /proc/sys/net/ipv4/conf/lo/arp_announceecho "1" > /proc/sys/net/ipv4/conf/all/arp_ignoreecho "1" > /proc/sys/net/ipv4/conf/all/arp_announce
 
配置完了就可以使用ipvsadm配置LVS-DR集群了
ipvsadm -A -t 10.10.120.193:80 -s rripvsadm -a -t 10.10.120.193:80 -r 10.10.120.210:8000 -gipvsadm -a -t 10.10.120.193:80 -r 10.10.120.211:8000 -g
 
-g 就意味着使用直接路由的方式转发数据包
LVS-DR 相较于LVS-NAT的最大优势在于LVS-DR不受调度器宽带的限制 , 例如假设三台服务器在WAN交换机出口宽带都限制为10Mbps , 只要对于连接调度器和两台实际服务器的LAN交换机没有限速 , 那么 , 使用LVS-DR理论上可以达到20Mbps的最大出口宽带 , 因为它的实际服务器的响应数据包可以不经过调度器而直接发往用户端啊 , 所以它与调度器的出口宽带没有关系 , 只能自身的有关系 。而如果使用LVS-NAT , 集群只能最大使用10Mbps的宽带 。所以 , 越是响应数据包远远超过请求数据包的服务 , 就越应该降低调度器转移请求的开销 , 也就越能提高整体的扩展能力 , 最终也就越依赖于WAN出口宽带 。
总的来说 , LVS-DR适合搭建可扩展的负载均衡系统 , 不论是Web服务器还是文件服务器 , 以及视频服务器 , 它都拥有出色的性能 。前提是你必须为实际器购买一系列的合法IP地址 。
六、IP隧道(LVS-TUN)
基于IP隧道的请求转发机制:将调度器收到的IP数据包封装在一个新的IP数据包中 , 转交给实际服务器 , 然后实际服务器的响应数据包可以直接到达用户端 。目前Linux大多支持 , 可以用LVS来实现 , 称为LVS-TUN , 与LVS-DR不同的是 , 实际服务器可以和调度器不在同一个WANt网段 , 调度器通过IP隧道技术来转发请求到实际服务器 , 所以实际服务器也必须拥有合法的IP地址 。
总体来说 , LVS-DR和LVS-TUN都适合响应和请求不对称的Web服务器 , 如何从它们中做出选择 , 取决于你的网络部署需要 , 因为LVS-TUN可以将实际服务器根据需要部署在不同的地域 , 并且根据就近访问的原则来转移请求 , 所以有类似这种需求的 , 就应该选择LVS-TUN 。
 



推荐阅读