NLB+ARR实现IIS下的高可用性负载均衡
NLB+ARR实现IIS下的高可用性负载均衡
-
场景:
高可用/可伸缩集群:
-
NLB部署:
很简单, 暂略.
-
-
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了:
-
使用ARR创建server farm:
-
打开IIS管理器, 选择Server Farms节点-右键-Create Server Farm:
输一个名字:
添加节点服务器组,注意写对端口,每写完一台点ADD添加进列表:
创建好节点服务器组后,会弹提示是否创建默认URL rewrite规则, 确认就好:
默认规则会自动添加到IIS管理器-节点-URL重写, 这个位置:
-
配置ARR:
打开ARR代理
打开转发功能:
在Server Farm-Load Balance, 选择想要的负载均衡算法:
配置URL重写规则:
这里选择"正则表达式"模式来匹配入站的相应域名(规则示例,文末查看附录), 否则全部入站流量全部都会被转发, 如下:
例1: 匹配所有www.website.com的入站访问请求, 跳转到MyARR场中的节点, 如下:
例2:匹配所有入站流量跳转Server Farm, 如下:
-
更改应用程序池配置:
由于所有 HTTP 请求和响应都经过 ARR,因此如果应用程序池超时或意外回收,则会发生延迟或错误。将空闲超时和应用程序池回收设置设置为零以避免出现问题。
-
配置ARR中https的中央证书存储:
填好物理路径即共享证书文件夹的UNC路径, 输入共享服务器的登陆帐户和密码, 无私钥密码可不填, 如下:
-
关于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