windows平台下实现高可用性和可扩展性-ARR和HLB
本文档提供了关于如何将应用程序请求路由(ARR)与硬件负载均衡器一起使用以实现高可用性和可伸缩性的说明性指导。本文采用F5大IP负载均衡器来说明ARR与硬件负载平衡器之间的工作关系。
IIS7.0及以上版本的Microsoft Application Request Routing(ARR)是一个基于代理的路由模块,它基于HTTP报头、服务器变量和负载平衡算法将HTTP请求转发到内容服务器。下图显示了典型的ARR部署:

虽然ARR为内容服务器(Content server)提供了高可用性和可伸缩性,但总体部署并不是高度可用或可伸缩的,因为:
ARR是单点失效。
内容服务器(Content server)的可伸缩性受到一个ARR服务器最大容量的限制。
为了克服这些挑战,管理员可以考虑使用多个具有硬件负载均衡器的ARR服务器,例如F5大IP。ARR可以在主动/被动模式下部署,以实现高可用性,也可以在主动/主动模式下实现高可用性和可伸缩性。本白皮书描述了如何将ARR和F5大IP一起部署,以便在实现总体高可用性和可伸缩性的同时启用核心ARR方案。
应用ARP和F5 BIG-IP
ARR是作为IIS之上的一个模块构建的,它的目的是在第7层(应用程序)做出路由决策。更准确地说,ARR依赖另一个IIS模块URL重写来检查传入的HTTP请求头和服务器变量来做出路由决策。根据这种设计,管理员可以根据应用程序级别的信息编写智能路由规则,例如:
- 主机名(HTTP_HOST):根据主机名将通信量路由到不同的内容服务器。
- 请求资源(URL):基于文件扩展名,确定请求的资源是用于静态内容还是用于动态内容,并相应地路由请求。
客户端信息(HTTP_USER_Agent):根据浏览器类型和版本,将请求路由到适当的内容服务器
自定义标头(由应用程序设置为Cookie):根据应用程序设置的cookie信息(如用户首选项或用户ID)路由通信量。
以上只是一些例子。有关HTTP头和服务器变量的完整列表,请参阅附录A。
F5 BIG-IP的第3层和第4层的功能赞扬了ARR在基于第7层(如HTTP报头和服务器变量)进行路由决策方面的优势。同时,ARR不为自己提供容错部署特性,必须依靠其他互补技术和解决方案来实现ARR层的高可用性,如下所示:

场景1:基于http的路由和负载平衡
基于HTTP的路由和负载平衡方案支持三层部署体系结构,其中包括:
- 第1层(Web):提供处理静态内容以及路由和负载平衡到第2层服务器的剩余动态请求的双重目的。
第2层(应用程序):依赖于业务逻辑的过程动态内容。
第3层(数据):存储数据。
下图说明了3层部署:

尽管上面的示例显示了将静态内容与动态内容区分开来的路由规则,但另一个常见的场景是将表示请求与Web服务请求区分开来。
选项1:Active/Passive
在主动/被动模式下,通常有两个ARR服务器,其中一个服务器处理请求,而另一个服务器作为故障转移服务器。如上所述,虽然此配置通过删除单个故障点来实现高可用性,但它并不是一个扩展解决方案,因为内容服务器的总容量受到一个ARR服务器的最大容量的限制。
在此设置中,由于两个ARR服务器的配置方式相同,因此使用了共享配置。F5 BIG-IP被配置为将所有请求路由到主动ARR服务器,并且只在必要时将请求路由到被动ARR服务器。
除了ARR中的主机名关联特性外,不存在两个ARR服务器之间必须共享的运行时状态信息。因此,对于这种情况,无论是在ARR服务器上还是在F5 BIG-IP上都不需要特殊的配置。即使您使用ARR中的服务器关联特性,当F5 BIG-IP将请求路由到以前被动但现在主动的服务器时,也会通过请求头中的cookie向被动服务器提供亲缘关系状态信息。
这个场景在ARR版本1版本中完全支持。
ARR配置
步骤1:
- 在两个ARR服务器上启用共享配置。按照本文档中的步骤在IIS中设置共享配置。
步骤2:
- 使用arr配置3层部署架构。按照本文档中的步骤在3层部署体系结构中配置ARR。
- 在更高层次上,上面的文档描述了:
- 如何使ARR服务器上的静态内容可用。
- 如何为静态内容编写URL重写规则,以便直接从ARR服务器为它们服务。
- 如何为动态内容编写URL重写规则,以便将它们转发到应用程序服务器。
F5 BIG-IP 配置
在这种情况下,所有可用的ARR服务器都被认为是活动的,并且是负载均衡通信量的候选服务器。使用BIG-IP LTM来确定ARR前端的健康和性能,并将流量引导到性能最好的前端。
步骤1:配置ARR服务器池。
- 在“Local Traffic”部分,单击“pool”。然后单击Create按钮创建一个池。
- 任何唯一的名称都适用于池;这个例子使用ARR_Pool。对于健康监视器,您可以使用定制的HTTP监视器或默认的HTTP监视器。-你可以把负载平衡方法设置为循环。在这个场景中,由于只有一个主动和被动的ARR服务器,所以不使用负载平衡。-一定要启用优先级组激活。这会配置 BIG-IP 以最高优先级的值将流量发送到服务器(s)。当这些服务器(s)不可用时,大ip将流量发送到ARR服务器,并获得下一个最高优先级值。在这个场景中,10.0.1的ARR服务器的优先级值为1,10.0.0.2的优先级值为2。所有的流量将被发送到10.0.2,直到它下降,然后流量将被发送到10.0.1。

步骤2:配置虚拟服务器。
- 在“本地流量”部分,单击“虚拟服务器”。然后单击Create按钮创建虚拟服务器。
- 任何唯一的名称都适用于虚拟服务器;示例使用arr_vs.-对于目标,可以使用用户指向浏览器的IP地址。在这种情况下,我们使用。对于服务端口,我们使用‘80’。-对于虚拟服务器类型部分,您有几个选项。因为您依赖于arr来路由,所以可以选择PerformanceHTTP,这是为最佳性能而设计的。-对于默认池,选择在步骤1中创建的池。

- 此时,您应该能够连接到此VirtualServer,该服务器将被发送到适当的ARR服务器。
备选案文2:积极/活跃在ARR中
在活动/活动模式下,可以有两个或多个ARR服务器。这种配置实现了高可用性和可伸缩性,与仅实现高可用性的活动/传递模式不同。由于多个ARR服务器的配置方式相同,因此使用了共享配置。F5大IP被配置为将传入请求加载到所有可用和健康的ARR服务器,而ARR服务器反过来将请求转发给内容服务器。
如前所述,主机名和内容服务器之间亲合映射的运行时状态信息存储在arr服务器实例中的内存中。为了在多个ARR服务器之间共享此信息,使用Microsoft外部IIS缓存。有关外部缓存的详细信息,请参阅这文件。
ARR组态
主动/主动的ARR结构与主动/被动的ARR结构相同。主要区别在于F5是如何配置的。
步骤1:在两个ARR服务器上启用共享配置。
- 按照下面的步骤这要在IIS中设置共享配置的文档。
步骤2:使用arr配置3层部署架构。
- 按照下面的步骤这文档配置ARR在3层部署体系结构中。
在高级别上,上述文件描述:
- 如何使静态内容在arr服务器上可用。
- 如何为静态内容编写URL重写规则,以便直接从arr服务器为它们服务。
- 如何为动态内容编写URL重写规则,以便将它们转发到应用程序服务器。
步骤3:启用和配置外部缓存。
- 按照下面的步骤这文档以启用和配置外部缓存以与arr一起使用。
F5大IP配置
在这种情况下,所有可用的ARR服务器都被认为是活动的,并且是负载均衡通信量的候选服务器。使用大ip ltm来确定arr前端的健康和性能,并将流量引导到性能最好的前端。
步骤1:配置ARR服务器池。
- 在“本地交通”部分,单击“池”。然后单击Create按钮创建一个池。
- 任何唯一的名称都适用于池;示例使用arr_Pool。-对于HealthMonitor,您可以使用自定义HTTP监视器或默认HTTP监视器。-由于您有多个ARR服务器来分发通信量,所以需要选择最适合您的需要的负载平衡方法。假设所有arr服务器都具有相似的硬件特性,则动态负载平衡方法(如最快、可观察或预测)将为您提供基于性能的分发。

步骤2:配置虚拟服务器。
- 在“本地流量”部分,单击“虚拟服务器”。然后单击Create按钮创建虚拟服务器。
- 任何唯一的名称都适用于虚拟服务器;示例使用arr_vs.-对于目标,可以使用用户指向浏览器的IP地址。在这种情况下,我们使用。对于服务端口,我们使用‘80’。-对于虚拟服务器类型部分,您有几个选项。因为您依赖于arr来路由,所以可以选择PerformanceHTTP,这是为最佳性能而设计的。-对于默认池,选择在步骤1中创建的池。

摘要
在本白皮书中,回顾了两种主要的ARR场景,通过部署多个ARR服务器和使用F5大IP来实现高可用性和可伸缩性。
附录
附录A:用于编写路由决策规则的所有可用HTTP头和服务器变量。
| ALL_HTTP | ALL_RAW | APPL_MD_PATH |
|---|---|---|
| APPL_PHYSICAL_PATH | CERT_COOKIE | CERT_FLAGS |
| CERT_ISSUER | CERT_KEYSIZE | CERT_SECRETKEYSIZE |
| CERT_SERIALNUMBER | CERT_SERVER_ISSUER | CERT_SERVER_SUBJECT |
| CERT_SUBJECT | CONTENT_LENGTH | CONTENT_TYPE |
| DOCUMENT_ROOT | GATEWAY_INTERFACE | HTTP_ACCEPT |
| HTTP_ACCEPT_ENCODING | HTTP_ACCEPT_LANGUAGE | HTTP_CONNECTION |
| HTTP_CONTENT_LENGTH | HTTP_HOST | HTTP_IF_MODIFIED_SINCE |
| HTTP_IF_NONE_MATCH | HTTP_REFERER | HTTP_UA_CPU |
| HTTP_USER_AGENT | HTTPS | HTTPS_KEYSIZE |
| HTTPS_SECRETKEYSIZE | HTTPS_SERVER_ISSUER | HTTPS_SERVER_SUBJECT |
| INSTANCE_ID | INSTANCE_META_PATH | LOCAL_ADDR |
| PATH_INFO | PATH_TRANSLATED | QUERY_STRING |
| REMOTE_ADDR | REMOTE_HOST | REMOTE_PORT |
| REMOTE_USER | REQUEST_FILENAME | REQUEST_METHOD |
| REQUEST_URI | SCRIPT_FILENAME | SCRIPT_NAME |
| SERVER_ADDR | SERVER_NAME | SERVER_PORT |
| SERVER_PORT_SECURE | SERVER_PROTOCOL | SERVER_SOFTWARE |
| URL |
windows平台下实现高可用性和可扩展性-ARR和HLB的更多相关文章
- Windows平台下利用APM来做负载均衡方案 - 负载均衡(下)
概述 我们在上一篇Windows平台分布式架构实践 - 负载均衡中讨论了Windows平台下通过NLB(Network Load Balancer) 来实现网站的负载均衡,并且通过压力测试演示了它的效 ...
- 【转载】Windows平台下利用APM来做负载均衡方案 - 负载均衡(下)
概述 我们在上一篇Windows平台分布式架构实践 - 负载均衡中讨论了Windows平台下通过NLB(Network Load Balancer) 来实现网站的负载均衡,并且通过压力测试演示了它的效 ...
- windows平台下基于VisualStudio的Clang安装和配置
LLVM 是一个开源的编译器架构,它已经被成功应用到多个应用领域.Clang是 LLVM 的一个编译器前端,它目前支持 C, C++, Objective-C 以及 Objective-C++ 等编程 ...
- Windows平台下的读写锁
Windows平台下的读写锁简单介绍Windows平台下的读写锁以及实现.背景介绍Windows在Vista 和 Server2008以后才开始提供读写锁API,即SRW系列函数(Initialize ...
- [转]Windows平台下安装Hadoop
1.安装JDK1.6或更高版本 官网下载JDK,安装时注意,最好不要安装到带有空格的路径名下,例如:Programe Files,否则在配置Hadoop的配置文件时会找不到JDK(按相关说法,配置文件 ...
- MongoDB学习总结(一) —— Windows平台下安装
> 基本概念 MongoDB是一个基于分布式文件存储的开源数据库系统,皆在为WEB应用提供可扩展的高性能数据存储解决方案.MongoDB将数据存储为一个文档,数据结构由键值key=>val ...
- windows平台下基于QT和OpenCV搭建图像处理平台
在之前的博客中,已经分别比较详细地阐述了"windows平台下基于VS和OpenCV"以及"Linux平台下基于QT和OpenCV"搭建图像处理框架,并 ...
- Windows平台下的内存泄漏检测
在C/C++中内存泄漏是一个不可避免的问题,很多新手甚至有许多老手也会犯这样的错误,下面说明一下在windows平台下如何检测内存泄漏. 在windows平台下内存泄漏检测的原理大致如下. 1. 在分 ...
- 不同WINDOWS平台下磁盘逻辑扇区的直接读写
不同WINDOWS平台下磁盘逻辑扇区的直接读写 关键字:VWIN32.中断.DeviceIoControl 一.概述 在DOS操作系统下,通过BIOS的INT13.DOS的INT25(绝对读).INT ...
随机推荐
- 南大算法设计与分析课程OJ答案代码(4)--变位词、三数之和
问题 A: 变位词 时间限制: 2 Sec 内存限制: 10 MB提交: 322 解决: 59提交 状态 算法问答 题目描述 请大家在做oj题之前,仔细阅读关于抄袭的说明http://www.bi ...
- angularjs_百度地图API_根据经纬度定位_示例
百度API--Demo地址: http://lbsyun.baidu.com/jsdemo.htm#i8_4 本例是在angular.js使用的百度地图根据经纬度定位的API:(正常的页面写法基本 ...
- ife2018 零基础学院 day 3
ife2018 零基础学院 第三天:让简历有点色彩 什么是CSS,CSS是如何工作的! 摘自CSS如何工作 什么是CSS CSS是一种用于向用户指定文档如何呈现的语言 - 它们如何被指定样式.布局等. ...
- windows 下 nginx 配置文件路径
nginx在windowns下路径 http{ #虚拟主机1 server{ listen 80; #监听端口,基于IP配置的时候变更此处,比如192.168.1.100:8080; server_n ...
- 从零开始学安全(十一)●IP地址
127 都是本机地址 ip DE 类网段 都是广播网段 它并不指向特定的网络 用不上
- 【原创】MVC+ZTree实现权限树的功能
今天自己采用MVC+ZTree的技术实现权限树的功能,有需要的可以收藏一下. 1.需要引用的JS 文件 <link href="~/Content/ZTree/css/demo.css ...
- 慢查询日志工具mysqlsla的使用
安装mysqlsla源码路径:https://github.com/daniel-nichter/hackmysql.com源码存放路径:/usr/local/src1.获取源码如果没有git命令,请 ...
- 23.C++- 继承的多种方式、显示调用父类构造函数、父子之间的同名函数、virtual虚函数
上章链接: 22.C++- 继承与组合,protected访问级别 继承方式 继承方式位于定义子类的”:”后面,比如: class Line : public Object //继承方式是publi ...
- python学习笔记(一)、列表和元祖
该一系列python学习笔记都是根据<Python基础教程(第3版)>内容所记录整理的 1.通用的序列操作 有几种操作适用于所有序列,包括索引.切片.相加.相乘和成员资格检查.另外,Pyt ...
- dubbo+zookeeper+springBoot框架整合与dubbo泛型调用演示
dubbo + zookeeper + spring Boot框架整合与dubbo泛型调用演示 By:客 授客 QQ:1033553122 欢迎加入全国软件测试交流 QQ 群:7156436 ...