IIS之负载均衡---应用请求路由模块的使用(ARR)

1、啥是ARR?

     Microsoft Application Request Routing (ARR) for IIS 7是一个基于代理的路由模块,它基于http头、server variables和负载均衡算法将http请求转发到各个内容服务器。

     ARR依赖URL Rewrite模块检查进站http请求以确定路由规则。而且,要使用ARR的话,URL Rewrite模块是必选的组件。

      用处:

  • 增进系统的有效性和可扩展性;
  • 更好的利用各个内容服务器的资源;
  • 简化系统部署,包括引导管理以及;
  • A/B测试;
  • 减少管理费用及为共享主机提供商提供更多的机会。

      特点:

  • 基于HTTP的路由决策:ARR不像硬件负载均衡所实现的那样在IP级别实现路由决策,ARR在应用层实现路由决策。当ARR与URL Rewrite模块一起使用时,能够写出很强的基于http头及server variables的路由规则。
  • 负载均衡算法:能够自行选择负载均衡算法以支持什么样的http请求让哪台内容服务器提供服务。共提供了6种算法。
  • 系统健康监控:同时提供了正式环境数据以及指定URL测试两种方式来监控内容服务器的健康状态。系统还提供了许多配置参数来支持健康状态的监控。你也能同时禁用这2种健康状态监控方式,进而选择自定义的监控状态提供程序。
  • 客户端亲和:通过使用Cookie,ARR能够保持所有的请求始终如一的与某一台内容服务器对应上。ARR在NAT的后端区分这些请求,在那里会将各个请求独立区分开。这个特性需要客户端接受Cookie。
  • 主机名亲和:通过改变部署结构来最小化及平滑化管理,并且创造额外的业务机会。有2种方式被用于决定内部服务器亲和性的算法,既:循环方式和内存方式。
  • 多服务器组:ARR能够管理多个由逻辑内容服务器组成的服务器组。这个特性允许ARR能够被用在引导管理和A/B测试场景中。
  • 失败请求跟踪规则:特定的跟踪能够被快速的加入到排错及诊断任务中。
  • 图形界面管理和监控:使用IIS管理器来管理和查看所有的配置信息以及对ARR运行时的汇总统计。

2、咋安装ARR模块?

在IIS7上安装ARR v1以及依赖的模块,ARR模块包含以下组件:

  • Microsoft URL Rewrite Module for IIS 7.0
  • Microsoft Web Farm Management Version 1 for IIS 7.0.
  • Microsoft Application Request Routing Version 1 for IIS 7.0.
  • Microsoft External Cache Version 1 for IIS 7.0.

安装过程:(注:修复和卸载按相反顺序操作)

a.下载Microsoft Application Request Routing Version 1

b.安装 Microsoft Application Request Routing Version 1

     net stop was /y

     net stop wmsvc /y

     运行ARR_ x64_Version1.exe

     安装日志%TEMP%\arr_setup.log

     Net start was

     Net start wmsvc

c.改变应用程序池进程模型

     Action―>Edit―>Application Pool―>Advanced Setting--->Idle Time-out(minutes)为0

或者

administrator privileges

%windir%\system32\inetsrv

appcmd.exe set apppool "DefaultAppPool" -processModel.idleTimeout:"00:00:00" /commit:apphost

3、如何配置ARR服务器组?

服务器实际是一个由应用服务器组成的逻辑组,是基于http请求和负载均衡算法管理之下的。

配置步骤:

a.

或者

administrator privileges

%windir%\system32\inetsrv

appcmd.exe set config  -section:webFarms /+"[name='myServerFarm']" /commit:apphost
appcmd.exe set config  -section:webFarms /+"[name='myServerFarm'].[address='wonyoo-w2k8']" /commit:apphost
appcmd.exe set config  -section:system.webServer/rewrite/globalRules /+"[name='ARR_myServerFarm_loadbalance', patternSyntax='Wildcard',stopProcessing='True']" /commit:apphost
appcmd.exe set config  -section:system.webServer/rewrite/globalRules /[name='ARR_myServerFarm_loadbalance',patternSyntax='Wildcard',stopProcessing='True'].match.url:"*"  /commit:apphost
appcmd.exe set config  -section:system.webServer/rewrite/globalRules /[name='ARR_myServerFarm_loadbalance',patternSyntax='Wildcard',stopProcessing='True'].action.type:"Rewrite" /[name='ARR_myServerFarm_loadbalance',patternSyntax='Wildcard',stopProcessing='True'].action.url:"http://myServerFarm/{R:0}"  /commit:apphost
b.配Server Farm属性

4、如何配置ARR实现HTTP负载均衡?

配置步骤:

a.确认URL Rewrite规则(优化:SSL禁用)

或者

administrator privileges

%windir%\system32\inetsrv

appcmd.exe list config -section:system.webServer/rewrite/globalRules

appcmd.exe clear config -section:system.webServer/rewrite/globalRules

为https请求的转发建立URL Rewrite规则:

appcmd.exe set config -section:system.webServer/rewrite/globalRules/+"[name='ARR_myServerFarm_loadbalance_SSL',patternSyntax='Wildcard',stopProcessing='True']"/commit:apphost

appcmd.exe set config -section:system.webServer/rewrite/globalRules/[name='ARR_myServerFarm_loadbalance_SSL',patternSyntax='Wildcard',stopProcessing='True'].match.url:"*"/commit:apphost

appcmd.exe set config -section:system.webServer/rewrite/globalRules/+"[name='ARR_myServerFarm_loadbalance_SSL',patternSyntax='Wildcard',stopProcessing='True'].conditions.[input='{HTTPS}',pattern='On']"/commit:apphost

appcmd.exe set config -section:system.webServer/rewrite/globalRules/[name='ARR_myServerFarm_loadbalance_SSL',patternSyntax='Wildcard',stopProcessing='True'].action.type:"Rewrite"/[name='ARR_myServerFarm_loadbalance_SSL',patternSyntax='Wildcard',stopProcessing='True'].action.url:"https://myServerFarm/{R:0}"/commit:apphost

为http请求的转发建立URL Rewrite规则:

appcmd.exe set config -section:system.webServer/rewrite/globalRules/+"[name='ARR_myServerFarm_loadbalance',patternSyntax='Wildcard',stopProcessing='True']"/commit:apphost

appcmd.exe set config -section:system.webServer/rewrite/globalRules/[name='ARR_myServerFarm_loadbalance',patternSyntax='Wildcard',stopProcessing='True'].match.url:"*"/commit:apphost

appcmd.exe set config -section:system.webServer/rewrite/globalRules/[name='ARR_myServerFarm_loadbalance',patternSyntax='Wildcard',stopProcessing='True'].action.type:"Rewrite"/[name='ARR_myServerFarm_loadbalance',patternSyntax='Wildcard',stopProcessing='True'].action.url:"http://myServerFarm/{R:0}"/commit:apphost

确认url rewrite规则被成功建立并且SSL offloading是禁用的:

appcmd.exe list config -section:system.webServer/rewrite/globalRules

b.配置健康检查监控

显示URL测试监控,测试页面,根据需要发送额外的请求和刷新仪表盘

或者

administrator privileges

%windir%\system32\inetsrv

appcmd.exe set config -section:webFarms/[name='myServerFarm1'].applicationRequestRouting.healthCheck.url:"http://(servername or FQDN of ARR server)/healthCheck.txt "/[name='myServerFarm1'].applicationRequestRouting.healthCheck.responseMatch:"I amhealthy." /commit:apphost

c.client affinity(session management is not centralized,Cookie name)

或者

administrator privileges

%windir%\system32\inetsrv

appcmd.exe set config -section:webFarms/[name='myServerFarm1'].applicationRequestRouting.affinity.useCookie:"True"/commit:apphost
d.Disallow new connections
Monitoring and Management
Disallow New Connections
 
 

5、如何配置ARR实现三层部署体系?

3层部署体系结构由Web层,应用服务器层和数据层。

Tier1 静态内容

Tier2 动态内容

Tier3 数据库内容

ARR服务器直接从ARR服务器提供静态内容,同时转发动态内容的应用程序服务器的请求。

配置步骤:

a.Change URL rewrite rules to filter for static requests.

Routing Rules

检查日志 c:\inetpub\logs\LogFiles\

或者

administrator privileges
%windir%\system32\inetsrv
appcmd.exe clear config -section:system.webServer/rewrite/globalRules
appcmd.exe set config  -section:system.webServer/rewrite/globalRules/+"[name='ARR_myServerFarm_loadbalance',patternSyntax='Wildcard',stopProcessing='True']" /commit:apphost
appcmd.exe set config  -section:system.webServer/rewrite/globalRules/[name='ARR_myServerFarm_loadbalance',patternSyntax='Wildcard',stopProcessing='True'].match.url:"*"  /commit:apphost
appcmd.exe set config  -section:system.webServer/rewrite/globalRules/+"[name='ARR_myServerFarm_loadbalance',patternSyntax='Wildcard',stopProcessing='True'].conditions.[input='EXT_{URL}',negate='True',pattern='*.css']" /commit:apphost
appcmd.exe set config  -section:system.webServer/rewrite/globalRules /+"[name='ARR_myServerFarm_loadbalance',patternSyntax='Wildcard',stopProcessing='True'].conditions.[input='{URL}',negate='True',pattern='*/images/*']" /commit:apphost
appcmd.exe set config  -section:system.webServer/rewrite/globalRules /[name='ARR_myServerFarm_loadbalance',patternSyntax='Wildcard',stopProcessing='True'].action.type:"Rewrite" /[name='ARR_myServerFarm_loadbalance',patternSyntax='Wildcard',stopProcessing='True'].action.url:"http://myServerFarm1/{R:0}"  /commit:apphost

6、如何配置ARR实现管理测试方案?(pilot)

ARR能够设置成把不同的用户路由到不同的试点站点,或者根据流量来决定将部分请求路由到试点站点。

配置步骤:

Routing Rules

by adding conditions.

根据测试站或者具体需求来增加条件。示例如下:

客户端使用IE客户端安装.NET3.5

uncheck the Stop processing of subsequent rules checkbox。

或者

administrator privileges

%windir%\system32\inetsrv.

appcmd.exe set config  -section:system.webServer/rewrite/globalRules /+"[name='ARR_pilotSiteServers_loadbalance'].conditions.[input='{HTTP_USER_AGENT}',pattern='*MSIE*']" /commit:apphost
appcmd.exe set config  -section:system.webServer/rewrite/globalRules /+"[name='ARR_pilotSiteServers_loadbalance'].conditions.[input='{HTTP_USER_AGENT}',pattern='*.NET CLR 3.5*']" /commit:apphost
appcmd.exe set config  -section:system.webServer/rewrite/globalRules /[name='ARR_pilotSiteServers_loadbalance'].stopProcessing:"False"  /commit:apphost

7、如何配置ARR实现主机名共享?

为啥要共享主机名?

靠DNS找到实际的服务器-----》转变

简易后ARR结构,主机头负载均衡。

配置步骤:(注:前提服务器上的站点应使用主机名绑定)

a.Server Affinity

Microsoft.Web.Arr.HostNameRoundRobin将请求均匀的分配给各个服务器,Microsoft.Web.Arr.HostNameMemory根据各个应用服务器的内存情况来决定将请求分配过去(需要配置WMI远程查询内存)。Time-out值代表自从最近一次对某个host name请求后,经过多长时间后被reset,这个值需要与应用程序服务器的应用程序池的idle time-out时间相同。

确认运作正常,返回的地址列表应该是和Number of Allocated Servers中的一样。

b.配置主机名多台服务器

Server Affinity―>Advanced Settings,填主机名称和数量。

确认运作正常。

或者

administrator privileges.

%windir%\system32\inetsrv

appcmd.exe set config  -section:webFarms /+"[name='myServerFarm'].applicationRequestRouting.affinity.[name='www.contoso.com',servers='2']" /commit:apphost

8、如何配置多个ARR服务器(即External Cache for IIS)?

使用场景:

配置步骤:(前提IIS共享配置和服务器上的站点应使用主机名绑定)

a.Server Affinity.

Use host name.

Use external cache

或者

administrator privileges

%windir%\system32\inetsrv

appcmd.exe set config  -section:webFarms /[name='myServerFarm'].applicationRequestRouting.affinity.useHostName:"True"  /commit:apphost
appcmd.exe set config  -section:system.webServer/externalCache/diskCache /[name='ARRCache'].path:"\\wonyoo-w2k8-3\IISShared" /[name='ARRCache'].userName:"redmond\wonyoo" /[name='ARRCache'].password:"********"  /commit:apphost
9、如何处理请求路由不正常?(Failed Request Tracing Rules)
参考文章1
参考文章2
10、如何高可用性?(High availability at ARR tier)
ARR+NLB

ARR and Hardware Load Balancer

 

你可能感兴趣的:(request,server,style,服务器,Microsoft)