IIS搭建负载均衡WebFarm+Arr
--- 本⽂所述仅针对IIS7.0或更⾼版本
--- 本⽂中提到的ServerFarm、WebFarm、web农场都是指WFF
⼀、IIS简介
IIS( Internet Information Services),微软官⽅Windows平台上⾯web容器服务。⽀持http协议和ftp协议,类似于Linux上⾯的Apache。
IIS和Windows操作系统绑定在⼀起,安装了windows操作系统也就安装了iis;iis⽣态⾼度模块化,本⾝仅⽀持部署静态⽹站,安装相应的拓展程序和补丁包可以拓展iis提供的服务范畴。例如安装,即可在IIS中部署asp应⽤程序。iis常⽤于部署基于DotNet平台和php开发的web程序。
⼆、负载均衡简介
负载均衡是⼀种web服务器部署架构,主要为了达到⽔平扩展服务器和解决服务器单点故障的问题。
三、IIS中负载均衡解决⽅案-WFF(WebFarmFramework)
1:web农场简介
WFF是IIS的⼀个拓展程序,是IIS中负载均衡的解决⽅案,能够帮助我们轻松实现Web⽹站的⾼性能、⾼可⽤性,⽤来在Web服务器上提供和管理系统,从⽽使得集的软件组件安装和配置成为可能,另外它还⽀持对ASP.NET应⽤的⾃动配置。可以通过配置来更新⾥⾯的服务器。另外,也可以做反向代理服务器。
2:web农场提供的功能
内容同步:包括应⽤的同步和平台的同步。应⽤同步是指在集内部同步应⽤程序部署包和配置⽂件等;平台同步是指在集中同步web应⽤程序运⾏的环境和平台提供的⽀持组件,保证各个服务器中应⽤程序的运⾏环境是⼀致的。 ⽐如:.NET 4.0 Runtime、PHP、ASP.NET MVC等
负载均衡。Web Farm内部有多个Web服务器,请求过来以后,会真正的被哪台服务器处理?这需要⽤到WFF的负载均衡策略。WFF 默认提供了⼏种策略,WeightedRoundRobin、ServerVariableHash(服务器变量)、QueryStringHash、RequestHash。根据这些策略,可以实现请求的分配监控和管理。WFF允许查看当前Web Farm内服务器的运⾏状况,包括:Web 服务器是否健康、接受了多少请求、每台服务器的总流量是多少。同时还能测试某台服务器是否处于运⾏状态。另外还允许我们暂时停⽤某台服务器,请求就不会路由到停⽤的服务器。
缓存。对于部分变化不⼤的内容,可以采⽤缓存的⽅式。缓存有两种,内存缓存和磁盘缓存。缓存可以降低⽹络内部的流量,提⾼响应速度。严格来说,以上这些功能不是依靠WFF⼀个⼯具实现的,⽽是以WFF为中⼼的⼀系列⼯具实现的,其中包括:Microsoft Web Farm Framework (WFF) 、We
b Deployment Tools(WDT)、URL Rewrite、Application Request Route(ARR)、External Cache等⼩⼯具。这些⼯具可以集成在Web Farm中配
合⼯作,也可以单独安装使⽤。⼯具多了点⼉,不过安装起来不算太⿇烦,使⽤WPI(WebPlatformInstaller)安装WFF的时候会⼀并安装相关插件。3:常见问题
WFF依赖什么?
IIS7.0或更⾼; Microsoft Web Platform Installer,Microsoft Web Deploy
WFF是否必须使⽤ARR(application request routing)来实现负载均衡?
不是的,WFF仅提供集管理,负载均衡等⼯作,⽆法监听客户端请求。
4:搭建WFF
1:WFF整体架构
客户端请求由ControllerServer接收,接收之后会分发给web农场中的SecondaryServers。
ControllerServer、SecondaryServer服务器需要有相同的体系结构,如果主服务器是32位计算机,则每个辅助服务器也必须是32位计算机。如果主服务器是64位计算机,则辅助服务器也必须是64位。 ControllerServer、SecondaryServer服务器需要具有相同的操作系统和Service Pack
2:防⽕墙设置
为了使Web Farm Framework组件与服务器场中的服务器通信,必须允许以下程序和功能通过防⽕墙进⾏通信:
* 核⼼⽹络
* 远程管理
3:安装相关IIS拓展
* 安装⽅式⼀,单个组件安装(不推荐)
* 安装⽅式⼆,使⽤WPI(WebPlatformInstaller)进⾏安装(推荐),此⽅式,会⼀并安装所需全部依赖插件
选择产品选项卡,然后选择服务器。
到Web Farm Framework 2.0,然后单击“添加”。
点击安装。
4:创建ServerFarm
打开IIS管理器,然后在“ 连接”窗格中展开节点。右键单击“ 服务器场”,然后单击“ 创建服务器场”。将启动“ 创建服务器场”向导。
输⼊web农场的名字。点击下⼀步,进⾏SecondaryServer服务器的配置,如下图。需要按照图中先后顺序配置服务器ip或者域名(ServerAddress可填写局域⽹ip地址,公⽹ip地址,域名),以及请求端⼝。注意,若输⼊ip之后直接点击“添加”,再去修改端⼝是⽆法保存成功的,端⼝任然是默认的80端⼝。另外SecondaryServer只可以添加和移除,⽆法修改,所以若添加服务器的时候端⼝填写错误了,只能先删除掉,再次重新添加。
此时,172.18.6.81这个机器就已经添加进来了,配置的http端⼝为8001,我们点击“确定”。
在添加完所有的机器之后,ServerFarm中的机器列表如下,⾄此WebFarm集已经配置完成。
四、配置webFarm访问路由--ARR(ApplicationRequestRouting)。
当前webFarm已经配置成功,多个机器已经组成了集,但是现在客户端的请求还⽆法到达SecondaryServers,因为缺少请求的路由。可以简单的理解为,WebFarm负责提供服务,ARR负责将流量引⼊到WebFarm。
1:ARR简介
ARR是IIS 的⼀个插件,可以拦截所有访问IIS的http请求,并基于HttpHeader和ServerVariables对请求的下⼀步去处做出决定。
2:安装ARR
*IIS插件的安装,推荐使⽤WPI
在使⽤WPI安装ARR的过程中,会附带安装url重写模块(URLRewriteModule)(若当前IIS未安装url重写)。url重写模块也是IIS的⼀个插件,可以单独使⽤,例如⽤作http请求转发到https。这⾥是和ARR配合使⽤,作为ARR的⼀个核⼼模块。url重写模块识别客户端请求头信息或者是ARR提供的服务器变量,结合通配符和正则表达式将请求按照⼀定的规则分发到WebFarm。
五:为站点配置负载均衡
1:准备三台机器
5.1.1、172.18.8.88:作为ControllerServer,并在此机器上⾯安装WFF和ARR。在IIS中新建⼀个站点Leading。
站点部署包:
此站点为⼀个静态⽹站,部署包中仅⼀个html⽂件,
设置此站点的应⽤程序池
*.NET_CLR版本为:⽆托管代码。创建leading的⽬的是分发访问此站点的流量,此站点并不提供服务,所以⽆需程序安装包,也⽆需启⽤任何的i sapi扩展。
*回收-固定时间间隔:设置为0。即永远不会回收。此项设置是为了让leading时刻保持活跃状态,⼀直稳定的运⾏。鉴于此站点是⼀个静态站点,个⼈觉得没有必要对此处的默认设置做更改,但是官⽅⽹站是这样建议的。官⽹说明: docs.microsoft/zh-cn/iis/extensions/installing-appli cation-request-routing-arr/install-application-request-routing
*进程模型-闲置超时:设置为0.即永远不闲置。⽬的:同上。
尝试访问leading
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服务器。
5.2.1:为什么要做这⼀步
在负载均衡的环境中,⽤户的请求会分流到不同的服务器,session信息需要集中存储,避免回话丢失需要⽤户重新登录的问题。若站点不是使⽤s essin来保存⽤户会话,可以跳过此步骤。
5.2.2:设置session服务器
在172.18.8.88机器(也可以是另外的其他机器)上⾯开启Asp.NetStateServicee,这是⼀个windows服务,随DotNetFramework⼀起安装的。此服务的功能就是管理sessin会话。
Asp.NetStateServicee此服务默认⼯作端⼝是42424,若开启了防⽕墙,需要配置此端⼝的出站规则,若未开启防⽕墙,不予理会。
要让其他机器可以访问到172.18.8.88上⾯的Asp.NetStateServicee服务,还需要修改注册表来提供相应的⽀持。
打开注册表:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\aspnet_state\Parameters
AllowRemoteConnection需要设置为1
Port可以根据需要⾃⾏修改,这⾥保持默认。
5.2.3:修改两个SecondaryServer站点的配置⽂件,配置session服务器地址。
5.2.4:需要注意的地⽅
修改两个SecondaryServer服务器IIS中站点的编号,他们的编号必须⼀致。状态服务器是使⽤IIS中的站点编号和Cookie中的SessionId来确定session 请求的唯⼀性。若SecondaryServer站点的IIS编号不⼀致会出现会话状态丢失的问题。如下图,箭头指向的“22”就是IIS⽹站编号,是IIS为每⼀个⽹站分配的⼀个唯⼀id。
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-→忽略⼤⼩写:勾选中
条件:当前不做任何修改
服务器变量:不做任何修改
操作--->操作类型:下拉框选中“路由到服务器场”
操作--->操作属性:当选中了“路由到服务器场”之后,操作属性会⾃动填写,不⽤任何修改。
操作-→停⽌处理后续规则:不要勾选。⼊站规则可以有很多条,若勾选中“停⽌处理后续规则”,则规则列表中位于此规则下⾯的规则将不会起作⽤。
点击右上⾓的“应⽤”
此时,⼊站规则已经设置完毕
通过⾸页顶部的标识,我们知道此次请求已经分发到了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”开头,后⾯跟任意字符。
其他静态⽂件的过滤思路与此⼀致。常见的服务器变量有:
根据IIS提供的服务器变量,可以编写⾮常复杂的⼊站条件和⼊站规则以应对不同的业务场景。
参考:
六、WebFarm⾼级
1:内容同步
2:持续集成
七、使⽤ARR+NLB搭建⾼可⽤服务体系
NLB:NetworkLoadBalancing 集允许⽤户把两台或更多的服务器结合起来使⽤,在客户端看起来就像是⼀台服务器,进⼊NBL 集的连接请求可以分解传送给两个或更多的集成员.
参考:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。