动态均衡是解决单一服务器负荷太重,难以承受服务压力的有效方法。实现动态均衡的一种有效方法是使用虚拟服务器。虚拟服务器指:对外它是单一的入口,对内有很多台计算机为它服务的计算机群。对使用虚拟服务器的人来说,它是一台机器,有单一的入口点;而在服务负荷上,虚拟服务器却可以将系统符合近似均匀地分担到各台计算机上。虚拟服务器具体的实现技术包括两种:应用层的虚拟服务器和
网络层的虚拟服务器。
一、 应用层的虚拟服务器 应用层虚拟服务器是利用应用层的转发实现的,相当于一台代理服务器,这正是经常提到的虚拟服务器。
实现方式:利用Apache的 ProxyPass 功能可以实现对虚拟服务器的配置(httpd.conf中) 如。某公司的WWW服务器为 http://www.abc.com/ 在httpd.conf中作如下设置:
ProxyPass /sales http://192.168.0.1/
ProxyPass /rd http://192.168.0.2/
ProxyPass /head http://192.168.0.3/
如上设置生效了以后,对http://www.abc.com/rd的访问会转到计算机http://192.168.0.2上来。对http://www.abc.com/head的访问会转到计算机http://192.168.0.2上来。客户不直接同 192.168.0.x交互,所有的请求都通过www.abc.com来转发。转发的过程如下:
client (http://www.abc.com/sales) <--> www.abc.com <--> 192.168.0.1 二、 IP层的虚拟服务器 IP层的虚拟服务器是利用IP层的反向masq来实现的。实现方式:通过对IP包头的目的地址的改写来实现的。linux kernel 2.2.x中带的IP port forward 就是实现的方式。你需要一个管理工具来管理这个方式。此种方式也称为反向NAT。
设置方法: 1. 内核编译中选择 ip_port_forward(??)
2. 利用ipmasqadm 来设置 ip_port_forward.
ipmasqadm -A www.abc.com:80 -R 192.168.0.1:80
3.设置ipchains
ipchains -A forward -j MASQ -s 192.168.0.0/24
ipchains -A forward -j MASQ -d 192.168.0.0/24 测试: 1. 现在你访问http://www.abc.com/
2. 你访问的IP包发到www.abc.com然后目标地址改为192.168.0.x, x为1或2可以由系统的负载平衡算法来选定。
3. 处理完毕,请求包发回www.abc.com,然后在发回给客户。
三、 两种实现方式的分析比较 应用层的虚拟服务器实现必须要通过一台服务器来实现服务的分发,在上面的例子中,这台服务器安装了Apache。如果负载很大的情况下,这台应用层分发计算机的分发负荷任务都已经很重了,可能使系统的性能下降很多。因此,应用层的虚拟服务器比较适用于负荷数量不多,但是单个任务很重的情况,例如搜索引擎工作。
而IP层的虚拟服务器事实上通过路由器或者网关来实现的,这基本上并不添加整个系统应用上的负荷,因此比较适合担任负荷数量很大的负债均衡任务。