NLB+ARR实现IIS下的高可用性负载均衡

  1. 场景:

    高可用/可伸缩集群:

  2. NLB部署:

    很简单, 暂略.

  3.ARR部署
    1. ARR全称叫Application Request Router, 是IIS的组件需要手动安装:

      通过IIS安装Web Platform Installer组件:

      点击右侧获取新的web平台组件会跳转到官方下载地址:

      (官方下载: https://www.iis.net/downloads/microsoft/application-request-routing)

      下载安装好后, 在开始菜单找到并打开Web Platform:

      启动后, 找到产品-服务器-Application Request Router3.0(应用程序请示路由3.0Beta), 安装它:

      安装成功后, 打开IIS管理器, 就能看到Server Farms了:

    2. 使用ARR创建server farm:
      1. 打开IIS管理器, 选择Server Farms节点-右键-Create Server Farm:

        输一个名字:

        添加节点服务器组,注意写对端口,每写完一台点ADD添加进列表:

        创建好节点服务器组后,会弹提示是否创建默认URL rewrite规则, 确认就好:

        默认规则会自动添加到IIS管理器-节点-URL重写, 这个位置:

      2. 配置ARR:

        打开ARR代理

        打开转发功能:

        在Server Farm-Load Balance, 选择想要的负载均衡算法:

        配置URL重写规则:

        这里选择"正则表达式"模式来匹配入站的相应域名(规则示例,文末查看附录), 否则全部入站流量全部都会被转发, 如下:

        例1: 匹配所有www.website.com的入站访问请求, 跳转到MyARR场中的节点, 如下:

        例2:匹配所有入站流量跳转Server Farm, 如下:

      3. 更改应用程序池配置:

        由于所有 HTTP 请求和响应都经过 ARR,因此如果应用程序池超时或意外回收,则会发生延迟或错误。将空闲超时和应用程序池回收设置设置为零以避免出现问题。

      4. 配置ARR中https的中央证书存储:

        填好物理路径即共享证书文件夹的UNC路径, 输入共享服务器的登陆帐户和密码, 无私钥密码可不填, 如下:

      5. 关于ARR的一些配置说明:

        分别是:缓存Caching,健康检查Health Test,负载均衡Load Blance,监视和管理Monitoring and Management, 代理Proxy,路由规则Routing Rules,服务器相关性Server Affinity.

        健康检查:主要是检查各个服务器的IIS是否正常运作。(这个也是第七层负载均衡的一个好处,能感知Web服务器是否正常运作)

        负载均衡:主要作用是设置各种分发规则。比如根据权重,最小响应时间,最小请求量等

        监视和管理:主要让你看到各个服务器的健康情况,请求量,失败量,缓存命中率等

        路由规则: URL Rewrite可以匹配域名\路径\端口等,要深入学习语法; 单纯只是负载无需匹配:

        服务器相关性:主要提供一种服务器和客户端之间的粘性。简单理解就是,客户端A的请求分配到服务器B处理之后,以后客户端A的请求都分配到服务器B处理。(这样设计理论会使用分配不均,当然也有好处,比如可以使用本地session)

        Client Affinity: 根据客户端的cookies处理粘性

        Host Name Affinity 根据Host name处理粘性

附录:

URL Rewrite正则表达式子的元字符的基本意义。

"^ {} () | . ? + * $ "它们在什么时候用.

"^ $" 分别表示一行文字的开始和结束.

{} 数量范围,表示{最小,最大}

() 表示特定表达式的子集

? 表示可选

+ 表示1次或多次

* 表示任意次包括0次

. 表示任意字符

========================================

1. URL Rewrite从重写规则时访问URL格式说明:

对于这种形式的 HTTP URL:http(s)://<host>:<port>/<path>?<querystring>

<path> 与规则的模式匹配。

<querystring> 在名为 QUERY_STRING 的服务器变量中可用,并且可以通过使用规则中的条件来访问。

<host> 在服务器变量 HTTP_HOST 中可用,并且可以通过使用规则中的条件来访问。

<port> 在服务器变量 SERVER_PORT 中可用,并且可以通过使用规则中的条件来访问。

1. URL重写-编辑入站规则-匹配URL-正则表达式:

a)例如, 表达式:^article/([0-9]+)/([_0-9a-z-]+)

此字符串是一个正则表达式,指定该模式将匹配满足以下条件的任何 URL 字符串:

以字符序列"article/"开头。

在第一个"/"之后包含一个或多个数字字符。

在第二个"/"之后包含一个或多个字母数字或"_"或"-"字符。

b)例如, 表达式: ^(www\.)(.*)$

对于字符串:www.foo.com

2. URL重写-编辑入站规则-条件-输入变量表示符:

例如:如果对该URL发出请求

http://www.mysite.com/content/default.aspx?tabid=2&subtabid=3

规则模式获取 URL 字符串content/default.aspx作为输入。

QUERY_STRING 服务器变量包含tabid=2&subtabid=3.

HTTP_HOST 服务器变量包含www.mysite.com.

SERVER_PORT 服务器变量包含80.

SERVER_PORT_SECURE 服务器变量包含0并且 HTTPS 包含OFF.

REQUEST_URI 服务器变量包含/content/default.aspx?tabid=2&subtabid=3.

PATH_INFO 服务器变量包含/content/default.aspx.

3. 反向引用的索引如下:

{C:0} - www.foo.com

{C:1} - www.

{C:2} - foo.com

在规则操作中,您可以使用对规则模式和该规则的最后匹配条件的反向引用。在条件输入字符串中,您可以使用对规则模式和先前匹配条件的反向引用。

以下规则示例演示了如何创建和引用反向引用:

<rule name="Rewrite subdomain">

<match url="^(.+)" /> <!-- rule back-reference is captured here -->

<conditions>

<add input="{HTTP_HOST}" type="Pattern" pattern="^([^.]+)\.mysite\.com$" /> <!-- condition back-reference is captured here -->

</conditions>

<action type="Rewrite" url="{C:1}/{R:1}" /> <!-- rewrite action uses back-references to condition and to rule when rewriting the url -->

</rule>

===========================================================

注: 用于编写路由决策规则的所有可用 HTTP 标头和服务器变量

Appendix A: All available HTTP headers and server variables for writing routing decision rules

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

HTTTP_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

QERY_STRING

REMOTE_ADDR

REMOTE_HOST

RMOTE_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

NLB+ARR实现IIS下的高可用性负载均衡的更多相关文章

  1. 介绍一下再Apache下的Tomcat负载均衡的一些使用问题

    在负载均衡技术中,硬件设备是比较昂贵的,对于负载均衡的学习者如果不是在企业中应用或者是学员中学习,很少有机会能碰到实际操作的训练.(http://xz.8682222.com)所以,很多朋友都会选择软 ...

  2. 微软Azure 经典模式下创建内部负载均衡(ILB)

    微软Azure 经典模式下创建内部负载均衡(ILB) 使用之前一定要注意自己的Azure的模式,老版的为cloud service模式,新版为ARM模式(资源组模式) 本文适用于cloud servi ...

  3. Windows下apache+tomcat负载均衡

    Windows下apache+tomcat负载均衡 网上已经有很多的资料,但是很多都比较零碎,需要整合一起才能搭建出理想的负载均衡,正好前段时间搭建了windows与linux下的负载均衡,在此记录, ...

  4. .NET下数据库的负载均衡(有趣实验)(续)

    .NET下数据库的负载均衡(有趣实验)这篇文章发表后,受到了众多读者的关注与好评,其中不乏元老级程序员. 读者来信中询问最多的一个问题是:它是否能支持"异种数据库"的负载均衡?? ...

  5. 两台Windows的 IIS 应用站点 基于NLB + ARR 实现双机热备和负载

    IIS负载均衡中我们使用微软的ARR,但提到网站的高可用性,ARR只能做请求入口的消息分发服务,这样如果我们的消息分发服务器给down掉啦,那么做再多的应用服务集群也都枉然. 这里我们主要针对解决这一 ...

  6. Nginx + IIS 配置,实现负载均衡

    当你的Web应用程序访问量大的时候,一台服务器可能会因为压力过大而无法处理所有的请求.此时,可以增加服务器,采用负载均衡来分担所有的请求.关于Nginx的作用,自行百度了解.总之,在Windows平台 ...

  7. 利用IIS和Nginx实现负载均衡

    一直对Nginx反向代理和负载均衡感兴趣,今天在Windows下搭建了一个简单实例.步骤如下: 1.下载Nginx,我下载的是最新的1.11.10版本,地址http://nginx.org/downl ...

  8. IIS+nginx反向代理 负载均衡

    本文没有过多的讲述,只讲述重点地方.由这两个转自的文章进行中和 1.nginx+iis实现负载均衡(这篇文章主要是有第2篇文章的工具) 2.nginx+iis使用(这篇文章讲得很详细,配置文件直接复制 ...

  9. 用Nginx搭建IIS集群实现负载均衡

    长话短说,我们用Nginx来搭建一个简单的集群,实现Web应用的负载均衡,架构图如下: 两台Web服务器,一台静态资源服务器,因为是演示,我们以网站形式部署在本机IIS中 一台Nginx代理服务器,安 ...

  10. Nginx+IIS分布式部署和负载均衡

    1.IIS中部署2个网站 创建2个网站,端口分别为9001.9002 2.下载Nginx 可以进入Nginx官网进行下载,官网地址: http://nginx.org/,需要下载windows版的 3 ...

随机推荐

  1. kingbase字符类数据类型和oracle字符类型的区别

    为兼容Oracle的数据类型,KingbaseES扩展了Oracle的NUMBER.VARCHAR2.CHAR(n)和DATE类型.该措施使得移植Oracle的Create Table等DDL语句时, ...

  2. Apache Maven Assembly自定义打包插件的使用

    前言 本文主要记录在SpringBoot项目中使用Apache Maven Assembly插件进行打包的相关内容: 官网说明:https://maven.apache.org/plugins/mav ...

  3. 详解http和https

    前言 大家好,我是小卷! 近几年,互联网发生着翻天覆地的变化,尤其是我们一直习以为常的HTTP协议,在逐渐的被HTTPS协议所取代,在浏览器.搜索引擎.CA机构.大型互联网企业的共同促进下,互联网迎来 ...

  4. MyCat2 读写分离

    已经搭配好的主从数据库分别为:主:192.168.200.51:3306 从:mysql://192.168.200.53:3306 一. 登录数据客户端,创建逻辑库,配置数据源 create dat ...

  5. C#得到和JAVA通过Base64.encodeBase64String(DigestUtils.md5(""))加密后的字符串

    public static string GetMd5(string Str) { MD5 md5Hash = MD5.Create(); // 将输入字符串转换为字节数组并计算哈希数据 byte[] ...

  6. python中的上下文管理器以及python内建模块contextlib的contextmanager方法

    上下文管理器 上下文管理器是实现了上下文管理协议的对象,其特有的语法是"with -as".主要用于保存和恢复各种全局状态,关闭文件等,并为try-except-finally提供 ...

  7. 肖sir ___性能测试____多线程

    一.理论 (一) (1)多线程是Python程序中实现多任务的一种方式(2)线程是程序执行的最小单位. (3)同属一个进程的多个线程共享进程所拥有的全部资源. (二)进程和线程对比 (1)关系对比: ...

  8. ubuntu下安装lua和tolua++

    先安装lua,然后安装toluapp 1.官网下载lua5.3或者5.2的版本 2.readline开发包安装 apt-get install libreadline-dev 3.解压源码包来编译安装 ...

  9. vue项目,本地启动时,请求地址会自动加上http://localhost:

    wepack设置时,使用代理 devServer: { hot: true, host: '0.0.0.0', port: "2023", // 项目启动端口, 默认8080 // ...

  10. 新手搭建Git与项目整合

    新手搭建Git,将代码托管到码云 如果你还没有使用过Git,首先先去https://gitee.com/注册一个自己的账户,然后在https://git-scm.com/下载一个客户端(提交代码到码云 ...