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 ...
随机推荐
- #1 Python灵活技巧
前言 Python基础系列博文已顺利结束,从这一篇开始将进入探索更加高级的Python用法,Python进阶系列文章将包含面向对象.网络编程.GUI编程.线程和进程.连接数据库等.不过在进阶之前,先来 ...
- shell的命令替换和命令组合
bash&shell系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html Linux中使用反引号"``"(在波浪线的 ...
- 设计shell脚本选项:getopt
man 1 getopt翻译:https://www.cnblogs.com/f-ck-need-u/p/9757959.html 写shell脚本的时候,通过while.case.shift来设计脚 ...
- [转]rancher 初步
本文转自:https://blog.csdn.net/weixin_41709748/article/details/81515780 什么是 rancher Rancher是一个开源的企业级全栈化容 ...
- 升级ssh到OpenSSH_7.5p1
Redhat 6.5 x64升级SSH到OpenSSH_7.5p1 为了防止openssh安装失败导致不能远程登录,先部署telnet服务以防万一. rpm -qa telnet telnet-ser ...
- [android] 采用aidl绑定远程服务
aidl:android interface definition language 安卓接口定义语言 在两个不同的应用程序里面使用同一个接口 使用场景:调用支付宝服务进行支付 先写远程服务端Seri ...
- 阿里云oss,简单上传
描述:oss比较方便,省去了自己搭建文件服务器的时间,价格比较便宜,下面是java基于oss的简单上传代码 a.添加maven依赖 <dependency> <groupId> ...
- Hibernate入门(六)---------HQL语句
Query: 代表面向对象的一个Hibernate查询操作.在Hibernate中,通常使用session.createQuery()方法接收一个HQL语句,然后调用Query的 list()或uni ...
- CDRAF之Service mesh
最近翻看一些网上的文章,偶然发现我们的CDRAF其实就是Service mesh的C++版本.不管从架构的理念上,或者功能的支持上面,基本完全符合.发几个简单的文章链接,等有时间的时候,再来详细描述. ...
- memcached 源码阅览 一
想要快速了解memcached内部原理么?那么赶紧离开本页,这会耽误您的时间. 不知时隔多少时间,今天受了些刺激,在码农路上开始犹豫起来,但是想想自己也没其他本身,就只好放下王者荣耀,重新看看技术内容 ...