负载均衡设备允许把一台web server轻易扩展成web server集群(前提是所有的web server必须配置完全相同),有访问请求时,该设备会把该请求根据一定的算法,分配给web服务器集群中的某一台服务器,从而大大增加了web server的并发处理能力。
实际应用中,通常把多个web server放在同一机房,相互之间可以用局域网访问。
1.文件同步问题:
多个web服务器上的网站文件必须完全相同,否则有可能造成用户前后二次请求访问的页面内容不同,所以文件同步是必须要考虑的首要问题.
这里介绍几种常用的方法:
a.批处理文件 + 计划任务 :批处理文件利用dos命令完成文件的局域网内复制,然后计划任务里每隔一定时间自动执行bat文件即可。
这种方式适合不经常更新的应用环境,如果要求文件更新必须实时的话,这种方法就不行了.
b.利用现成的文件同步软件:市面上有一些不错的文件同步软件,直接用就行了。(有些功能强的软件支持定时同步和实时同步二种方式)
c.如果想DIY的话,其实利用.Net中的FileWatcher类通过对源站目录中的文件监视就能方便的实现文件同步,而且这种方式很灵活,实时或定时都能实现(完全由开发者自行控制)。
FileWatcher的使用示例见我的另一篇blog:http://www.cnblogs.com/yjmyzz/archive/2009/06/07/1498221.html(利用FileWatcher实现文件实时监视)
2.Session的处理
默认方式下,Session是InProc模式,即session是存放于网站所在的服务器上,所以多台服务器的session同步也是一个问题。这个asp时代可能比较麻烦,但幸运的是.net从2.0开始,允许session存放于一台特定的服务器甚至某个数据库中,这样的话不管web服务器有多少台,都可以把session集中存放在一台专门的数据库服务器中.
这里以存放于SqlServer为例,大概讲解一下使用步骤:
a.先停止IIS服务,cmd环境下输入net stop w3svc或iisreset /stop即可(这一步貌似可选,详情见http://support.microsoft.com/kb/317604)
b.打开数据库,运行\WINNT\Microsoft.NET\Framework\(.net版本号)\installSqlState.sql,目的是配置session数据库
c.修改网站的web.config配置,如下:
<sessionState mode="SQLServer" sqlConnectionString="Data Source=服务器IP地址;User ID=***;Password=***;" cookieless="false" timeout="20"/>