zoukankan      html  css  js  c++  java
  • 负载均衡之应用请求路由模块的使用(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的服务器的统计信息没有改变过。

  • 相关阅读:
    selenium操控浏览器
    DOM
    bug记录
    log日志
    linux 搭建 telnet + tftp
    linux 搭建 MeepoPS+Socket
    php常见面试题(2)
    php常见面试题(1)
    laravel 5 支付宝支付教程
    计算机进位制原理
  • 原文地址:https://www.cnblogs.com/aarond/p/2011955.html
Copyright © 2011-2022 走看看