--- 本文所述仅针对IIS7.0或更高版本 --- 本文中提到的ServerFarm、WebFarm、web农场都是指WFF 一、IIS简介 IIS( Internet Information Services),微软官方Windows平台上面web容器服务。支持http协议和ftp协议,类似于Linux上面的Apache。 IIS和Windows操作系统绑定在一起,安装了windows操作系统也就安装了iis;iis生态高度模块化,本身仅支持部署静态网站,安装相应的拓展程序和补丁包可以拓展iis提供的服务范畴。例如安装aspnet_regiis.exe,即可在IIS中部署asp.net应用程序。iis常用于部署基于DotNet平台和php开发的web程序。 二、负载均衡简介 负载均衡是一种web服务器部署架构,主要为了达到水平扩展服务器和解决服务器单点故障的问题。 三、IIS中负载均衡解决方案-WFF(WebFarmFramework)
WFF是IIS的一个拓展程序,是IIS中负载均衡的解决方案,能够帮助我们轻松实现Web网站的高性能、高可用性,用来在Web服务器群上提供和管理系统,从而使得集群的软件组件安装和配置成为可能,另外它还支持对ASP.NET应用的自动配置。可以通过配置来更新群里面的服务器。另外,也可以做反向代理服务器。
内容同步:包括应用的同步和平台的同步。应用同步是指在集群内部同步应用程序部署包和配置文件等;平台同步是指在集群中同步web应用程序运行的环境和平台提供的支持组件,保证各个服务器中应用程序的运行环境是一致的。 比如:.NET 4.0 Runtime、PHP、ASP.NET MVC等
选择产品选项卡,然后选择服务器。 找到Web Farm Framework 2.0,然后单击“添加”。 点击安装。
四、配置webFarm访问路由--ARR(ApplicationRequestRouting)。
五:为站点配置负载均衡 1:准备三台机器
此站点为一个静态网站,部署包中仅一个html文件,
5.1.2、172.18.6.81:作为SecondaryServer,此机器上面不需要安装WFF和ARR。在IIS中新建一个站点SecondaryServer81。此站点部署包为一个ASP.NET MVC开发的网站。
此站点应用程序池按照常规ASP.NET MVC站点设置。尝试访问此站点。 网站可以正常打开,并且172.18.8.88机器也可以访问到此网站的内容。注意到首页顶部有一个标识,指代此网站是部署在172.18.6.81这台机器上面。 5.1.2、172.18.3.249:作为SecondaryServer,此机器上面不需要安装WFF和ARR。在IIS中新建一个站点SecondaryServer249。此站点部署包为一个ASP.NET MVC开发的网站。 部署包和172.18.6.81上面的一样,只不过首页顶部的标识改成了172.18.3.249。尝试访问: 5.2、为两个SecondaryServer网站配置session服务器。
打开注册表:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters
5.2.3:修改两个SecondaryServer站点的配置文件,配置session服务器地址。 5.2.4:需要注意的地方
5.3、在172.18.8.88上面配置流量分发规则 5.3.1:设置url重写规则,所有访问172.18.8.88的请求都转发到WebFarm中。 打开IIS,在左边连接窗格中,选中根目录,点击右边的url重写。 点击右边的添加规则 在入站规则中选中空白规则 进入到“编辑入站规则” 名称我们设置为:ARR_TestArr_loadbalance 匹配URL--->请求的URL:下拉框选中“与模式匹配” 匹配URL--->使用:下拉框选中“正则表达式” 匹配URL--->模式:填写“.*” 注意:一定要清楚【匹配URL--->模式 】是匹配URL中的哪一部分,假设当前请求的URL地址为https:///Home/Index?page=1,那么规则模式匹配的部分就是Home/Index, 一定要注意匹配URL的只是路径部分,不包含主机域名部分,也不包含查询字符串。 匹配URL-→忽略大小写:勾选中 条件:当前不做任何修改 服务器变量:不做任何修改 操作--->操作类型:下拉框选中“路由到服务器场” 操作--->操作属性:当选中了“路由到服务器场”之后,操作属性会自动填写,不用任何修改。 操作-→停止处理后续规则:不要勾选。入站规则可以有很多条,若勾选中“停止处理后续规则”,则规则列表中位于此规则下面的规则将不会起作用。 点击右上角的“应用” 此时,入站规则已经设置完毕 尝试访问http://172.18.8.88 通过首页顶部的标识,我们知道此次请求已经分发到了172.18.3.249. 配置WebFarm的时候,负载均衡算法默认的是权重轮询,当再次刷新后,首页标识变成了172.18.3.81。 5.3.2:过滤静态文件,静态文件不做分发 网站所有的商品图片都存放在阿里云nas中,nas是挂在在ControllerServer上面,当用户访问商品图片的时候,该请求不应该分发到SecondaryServer上面。为了实现此要求,在5.3.1的基础上,编辑入站规则的条件。 {URL}:为前文提到的服务器变量,简单来说,服务器变量(ServerVariables)就是IIS内置的一些变量,这些变量由用户请求产生, 提供有关服务器,与客户端的连接以及该连接上的当前请求的信息。变量中的值就是用户http请求头和请求URI的相关信息。此处{URL}服务器变量是指用户请求中的路径部分,不包含域名、端口和查询字符串。 与模式匹配:模式即规则,也就是说{URL}中的值要能够满足正则表达式的规则。 模式(^/Photos/*):这是一个正则表达式,匹配从“/Photos”开头,后面跟任意字符。 其他静态文件的过滤思路与此一致。常见的服务器变量有: https://docs.microsoft.com/en-us/previous-versions/iis/6.0-sdk/ms524602(v=vs.90)?redirectedfrom=MSDN 根据IIS提供的服务器变量,可以编写非常复杂的入站条件和入站规则以应对不同的业务场景。 参考: 博客园教程: https://www.cnblogs.com/Leo_wl/p/5104006.html 微软官方文档-IIS7的WFF概述: https://docs.microsoft.com/en-us/iis/web-hosting/microsoft-web-farm-framework-20-for-iis-7/overview-of-the-web-farm-framework-20-for-iis 微软官方文档-ASP.NET4企业应用部署简介: https://docs.microsoft.com/zh-cn/aspnet/web-forms/overview/deployment/deploying-web-applications-in-enterprise-scenarios/ 微软官方文档-方案:使用IIS服务器构建Web农场: https://docs.microsoft.com/en-us/iis/web-hosting/scenario-build-a-web-farm-with-iis-servers/overview-build-a-web-farm-with-iis-servers 微软官方文档-应用程序请求路由(ARR)概述: https://docs.microsoft.com/en-us/iis/extensions/planning-for-arr/application-request-routing-version-2-overview 微软官方文档-定义和配置应用程序请求路由到Web农场: https://docs.microsoft.com/en-us/iis/extensions/configuring-application-request-routing-arr/define-and-configure-an-application-request-routing-server-farm 详解URL重写插件规则和条件: https:///post/635654920639643421 详解URL重写插件规则和模式: https:///post/635659901987610088 微软官方文档-URL重写配置参考: https://docs.microsoft.com/en-us/iis/extensions/url-rewrite-module/url-rewrite-module-configuration-reference 使用ARR实现同一台机器IIS和Tomcat共用80端口: https://www.cnblogs.com/aphason/p/4571899.html 微软官方文档-服务器变量: https://docs.microsoft.com/en-us/previous-versions/iis/6.0-sdk/ms524602(v=vs.90)?redirectedfrom=MSDN IIS大牛博客: https://blog./tagged/iis 六、WebFarm高级
七、使用ARR+NLB搭建高可用服务体系 NLB:NetworkLoadBalancing 群集允许用户把两台或更多的服务器结合起来使用,在客户端看起来就像是一台服务器,进入NBL 群集的连接请求可以分解传送给两个或更多的集群成员. 参考: |
|