负载均衡之---应用请求路由模块的使用(ARR)(四)[使用ARR实现HTTP负载均衡]

使用ARR实现HTTP负载均衡

 

概述

本主题旨在指导读者一步步地配置ARR来实现高可用性及可扩展性。下面的演练同时描述了一些关于监控ARR内容服务器健康状况及客户端与服务器间亲和力的特性。

 

目标

下图是使用ARR来负载均衡HTTP请求的结构图:

http://learn.iis.net/file.axd?i=1194

 

先决条件

本演练需要下列先决条件:

装有IIS7Win2008,或更高版本

Microsoft ARR及相关模块

至少2台装有工作站点和应用程序的服务器

 

如果ARR组件没有安装,请在下列位置下载:

Microsoft Application Request Routing Version 1 for IIS 7 (x86) here

Microsoft Application Request Routing Version 1 for IIS 7 (x64) here

 

请按照这篇文章所示来安装ARR安装ARR

另一个先决条件请看这篇文章:定义及配置ARR服务器组

 

 

 

步骤1 – 确认URL Rewrite规则

在这篇文章(定义及配置ARR服务器组)中,创建的URL Rewrite规则已经能被用在简单的负载均衡场景下了。

 

通过图形界面来确认URL Rewrite规则:

1.       打开IIS管理器

2.       选择myServerFarm农场(在定义及配置ARR服务器组中创建的服务器农场)

3.       如下图所示:

a)         http://learn.iis.net/file.axd?i=1199

4.       双击Routing Rules(路由规则)图标

5.       确认 Use URL Rewrite to inspect incoming requests复选框处于选中状态

a)         http://learn.iis.net/file.axd?i=1202

6.       Enable SSL offloading这个选项默认是选中状态的。当SSL Offloading处于启用状态时,所有在ARR服务器和内容服务器之间的通信都是明文的,甚至当客户端发起的是https请求时也是如此。当ARR服务器及内容服务器处于一个信任网络中,比如说同处于一个数据中心时,启用这个选项是不会牺牲安全性的。而且,启用这个属性可以最大化的优化内容服务器的资源,因为此时不需要为加密解密花费额外的耗费了。让我们来禁用SSL offloading

7.       打开浏览器发送一些请求到ARR服务器

8.       想要确认这些请求已经被均匀的分散到了各个内容服务器,我们选中myServerFarm节点,双击Monitoring and Management(监控及管理)图标

a)         http://learn.iis.net/file.axd?i=1199

9.       在显示出的仪表盘中,确认这些请求被均匀的分发了

a)         http://learn.iis.net/file.axd?i=1203

 

 

 

命令行方式确认URL Rewrite规则:

1.       administrator身份打开命令行

2. 导航到文件夹%windir%\system32\inetsrv

3. 想要确认URL Rewrite规则创建成功,输入如下命令:appcmd.exe list config -section:system.webServer/rewrite/globalRules。它会返回如下全局规则信息:

a)         <system.webServer>
  <rewrite>
    <globalRules>
      <rule name="ARR_myServerFarm_loadbalance" patternSyntax="Wildcard" stopProcessing="true">
        <match url="*" />
        <conditions>
        </conditions>
        <action type="Rewrite" url="http://myServerFarm/{R:0}" />
      </rule>
    </globalRules>
  </rewrite>
</system.webServer>

4. 想要禁用SSL offloading,先要清除所有的URL Rewrite规则:

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

b)          然后,建立URL Rewrite规则来转发https流量。更进一步的,根据这个规则,如果客户端发起的是https请求,ARR也会使用ssl方式转发请求:

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

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

                        iii.              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

                       iv.              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

c)           最后,为普通http请求的转发建立URL Rewrite规则

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

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

                        iii.              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

d)          为了确认url rewrite规则被成功建立并且SSL offloading是禁用的,输入命令:appcmd.exe list config -section:system.webServer/rewrite/globalRules。它会返回类似如下的信息:

         i.      <system.webServer>
  <rewrite>
    <globalRules>
      <rule name="ARR_myServerFarm_loadbalance_SSL" patternSyntax="Wildcard" stopProcessing="true">
        <match url="*" />
        <conditions>
          <add input="{HTTPS}" pattern="On" />
        </conditions>
        <action type="Rewrite" url="https://myServerFarm/{R:0}" />
      </rule>
      <rule name="ARR_myServerFarm_loadbalance" patternSyntax="Wildcard" stopProcessing="true">
        <match url="*" />
        <conditions>
        </conditions>
        <action type="Rewrite" url="http://myServerFarm/{R:0}" />
      </rule>
    </globalRules>
  </rewrite>
</system.webServer>

 

 

 

步骤2 – 配置健康检查监控

ARR通过以下两种方式监控内容服务器的健康状态:

l   通过现场流量

l   通过特定的URL来测试

 

当有请求到ARR服务器时,现场流量测试是被默认执行的。特定url测试是一种额外的测试。在本演练中将指导你配置特定url的测试方式。

 

图形方式配置健康检查监控:

1.        url测试需要一个特定的url来做测试。为了满足这个条件,使用记事本来建立一个名为healthCheck.txt的文本文件,文件内容为”I am healthy.”

2.        healthCheck.txt文件放到各个内容服务器上

3.        通过浏览器来确定这个文件能够被正常获取到

4.        IIS管理器中,选择myServerFram服务器农场,如下图:

a)          http://learn.iis.net/file.axd?i=1199

5.        双击Health Test(健康测试)

a)          http://learn.iis.net/file.axd?i=1201

6.        URL中输入http://(server name or FQDN of ARR server)/healthCheck.txt

7.        Response match中输入healthy作为值。Response match是个可选测试,用来确保回复过来的Body中包含有期望值。在本例中,由于healthCheck.txt包含了”I am healthy.”字符串,所以Response match会匹配到单词”healthy”

8.        点击Apply保存更改

9.        为了确认健康检查监控的正确性,可以先停止内容服务器中的某一台。因为Interval(seconds)的值设置的是30秒,所以我们等待30秒。

10.      等待30秒后,发送几个请求到ARR服务器

11.      要想确认所有的请求都转发到了健康状态的服务器,我们来双击Monitoring and Management图标,然后用F5来刷新仪表盘。注意运行时统计信息已经被reset了,这个是被设计成这样的。你可以按需来发送几个额外的请求然后刷新仪表盘。

a)          http://learn.iis.net/file.axd?i=1204

12.      健康状况监控程序也可以在这种情况下使用:当一台不健康的服务器恢复健康时。为了验证这个功能,我们启动在第九步中停止的那个网站。再一次,因为Interval(seconds)设置的是30秒,我们等待30秒。

13.      等待30秒后,发送几个请求到ARR服务器

14.      为了确认请求被均匀的分配到了各个服务器,在IIS管理器中刷新仪表盘。注意运行时统计信息已经被reset了,这是被设计成这样的。你可以按需来发送几个额外的请求然后刷新仪表盘。

 

 

用命令行方式配置健康检查监控:

1.        administrator身份打开命令行

2.        导航到文件夹%windir%\system32\inetsrv

3.        设置URL参数值为http://(server name or FQDN of ARR server)/healthCheck.txt以及Response match值为I am healthy.。输入:

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

 

 

 

步骤3 – 配置客户端亲和

ARR提供了客户端亲和特性,能够让客户端在一个会话中始终和一台内容服务器对应。当这个特性开启时,负载均衡算法只对客户端刚开始时起作用。从这点上来看,所有同一个客户的后续请求都会被路由到同一台内容服务器处理。这个特性在以下场景中是非常有用的:

当内容服务器是有状态的

客户端的请求必须路由到同一台内容服务器来处理

会话管理不是中央化管理的

 

 

图形方式配置客户端亲和:

1.        打开IIS管理器

2.        选择myServerFarm农场,这是在这篇文章中建立的(定义及配置ARR服务器组)

3.        如下图所示:

a)          http://learn.iis.net/file.axd?i=1199

4.        双击Server Affinity图标(服务器亲和)

5.        想要启用客户端亲和,选中Client affinity复选框,然后点击Apply保存

a)          http://learn.iis.net/file.axd?i=1205

b)          ARR使用一个cookie来启用客户端亲和。Cookie name属性是被输出到客户端的cookie名称。这意味着客户端必须能够接受cookie才能让这个特性起作用。

6.        为了确认客户端亲和正在起作用,我们先发送一些请求到ARR服务器。在IIS中刷新仪表盘(监控及管理图标)。确认只有一台服务器的统计信息是被更新的(因为现在是启用了客户端亲和了)。你可以按需发送其他请求然后刷新仪表盘。

 

 

命令行方式配置客户端亲和:

1.        administrator方式打开命令行

2.        导航到文件夹%windir%\system32\inetsrv

3.        启用客户端亲和,输入:

a)          appcmd.exe set config -section:webFarms /[name='myServerFarm1'].applicationRequestRouting.affinity.useCookie:"True" /commit:apphost

 

 

 

步骤4 - 禁止新连接

当想把某台内容服务器移出农场时,针对某台内容服务器设置禁止新连接选项是个优雅的解决方式。当启用了客户端亲和特性时,这变得很有趣,因为ARR会保持目前已有的会话而拒绝新连接。那就是说,当一个客户端与一台设置了禁止新连接的内容服务器关联后,客户端的请求会继续路由到这个内容服务器,就是说,对于客户端来说是没有影响的。然而,不会有新的客户再被转发到这台内容服务器上了。

 

图形方式设置禁止新连接:

1.        通过上面的步骤3来将一台客户端与一台内容服务器关联起来

2.        选择myServerFarm农场

3.        如下图所示:

a)          http://learn.iis.net/file.axd?i=1199

4.        双击Monitoring and Management(监控及管理)

5.        选择那台已经客户端亲和的内容服务器,在Actions那里,点击Disallow New Connections(不允许新连接)

6.        在确认对话框中,单击Yes

a)          http://learn.iis.net/file.axd?i=1064

7.        为了确认已被亲和的客户端与内容服务器,并且这台内容服务器已经设置了disallow new connections,让我们发送一些请求到ARR服务器。刷新IIS中的仪表盘。确认那台内容服务器的统计信息的改变。你可以按需发送更多的请求并且刷新仪表盘

8.        为了确认新的客户端已经不会被路由到禁止新连接的内容服务器,我们来删除cookie并且关闭重新打开浏览器

9.        发送一些请求到ARR服务器。刷新仪表盘。确认只有处于Available状态的内容服务器在改变统计信息。并且确认设置了Disallow new connections的服务器的统计信息没有改变过。

posted @ 2011-04-11 00:02  McKay  阅读(1932)  评论(6编辑  收藏  举报